一.NOT NULL(非空約束)
添加非空約束
1)建表時直接添加
CREATE TABLE t_user(user_id INT(10) NOT NULL);
2)通過ALTER 語句
ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) NOT NULL;
刪除非空約束
1)ALTER TABLE t_user MODIFY user_id INT(10);
2)ALTER TABLE t_user CHANGE user_id user_id INT(10);
二.UNIQUE(唯一約束)
添加唯一約束
1)建表時直接添加
CREATE TABLE t_user(user_id INT(10) UNIQUE);
CREATE TABLE t_user(
user_id INT(10),
user_name VARCHAR(30),
CONSTRAINT UN_PHONE_EMAIL UNIQUE(user_id,user_name)#復合約束
);
CREATE TABLE t_user(
user_id INT(10),
UNIQUE KEY(user_id)
);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) UNIQUE;
ALTER TABLE t_user CHANGE user_id user_id INT(10) UNIQUE;
ALTER TABLE t_user ADD UNIQUE(user_id);
ALTER TABLE t_user ADD UNIQUE KEY(user_id);
ALTER TABLE t_user ADD CONSTRAINT UN_ID UNIQUE(user_id);
ALTER TABLE t_user ADD CONSTRAINT UN_ID UNIQUE KEY(user_id);
刪除唯一性約束
ALTER TABLE t_user DROP INDEX user_id;
注:唯一但是可以為空(空和空不相等)
三.PRIMARY KEY(主鍵約束)
添加主鍵約束
1)建表時直接添加
CREATE TABLE t_user(user_id INT(10) PRIMARY KEY);
CREATE TABLE t_user(
user_id INT(10),
user_name VARCHAR(30),
CONSTRAINT PK_ID_NAME PRIMARY KEY(user_id,user_name)#復合約束
);
CREATE TABLE t_user(
user_id INT(10),
PRIMARY KEY(user_id)
);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user CHANGE user_id user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user ADD PRIMARY KEY(user_id);
ALTER TABLE t_user ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);
刪除主鍵約束
1)ALTER TABLE t_user DROP PRIMARY KEY;
注:主鍵約束相當於(唯一約束+非空約束)
一張表中最多有一個主鍵約束,如果設置多個主鍵,就會出現如下提示:
Multiple primary key defined!!!
刪除主鍵約束前,如果有自增長需要先刪除自增長,如果不刪除自增長就無法刪除主鍵約束
四.FOREIGN KEY(外鍵約束,對應的字段只能是主鍵或者唯一約束修飾的字段)
首先創建兩張表:class,students
主表:
CREATE TABLE class(
cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE
);
從表:
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id)#添加外鍵約束
);
也可以這樣添加:
ALTER TABLE students ADD CONSTRAINT FK_CLA_ID FROEIGN KEY(cla_id) REFERENCES class(cla_id);
刪除外鍵約束
ALTER TABLE students DROP FOREIGN KEY FK_CLA_ID;
#外鍵中的級聯關系有以下幾種情況:
#ON DELETE CASCADE 刪除主表中的數據時,從表中的數據隨之刪除
#ON UPDATE CASCADE 更新主表中的數據時,從表中的數據隨之更新
#ON DELETE SET NULL 刪除主表中的數據時,從表中的數據置為空
#默認 刪除主表中的數據前需先刪除從表中的數據,否則主表數據不會被刪除
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE CASCADE
);
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON UPDATE CASCADE
);
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE SET NULL
);
注:插入數據時,先插入主表中的數據,再插入從表中的數據。
刪除數據時,先刪除從表中的數據,再刪除主表中的數據。
五.CHECK(檢查約束)
CREATE TABLE class(
cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE,
CHECK(cla_id>0)
);
注:mysql不支持檢查約束,但是寫上檢查約束不會報錯
其他:
一.AUTO_INCREMENT(自增長)
添加自增長
1)在創建表的時候添加
CREATE TABLE t_user(user_id INT(10) AUTO_INCREMENT PRIMARY KEY);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) AUTO_INCREMENT;
ALTER TABLE t_user CHANGE user_id user_id INT(10) AUTO_INCREMENT;
刪除自增長
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
注:There can be only one auto column and it must be defined as a key.
一張表只能有一個自增長列,並且該列必須定義了約束(可以是主鍵約束,也可以是唯一約束,也可以是外鍵約束,但是不可以是非空和檢查約束)
不過自增長一般配合主鍵使用,並且只能在數字類型中使用
二.ZEROFILL(零填充)
添加零填充
1)在創建表的時候添加
CREATE TABLE t_user(user_id INT(10) ZEROFILL);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) ZEROFILL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) ZEROFILL;
刪除零填充
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
注:零填充會將未將有效位以外的位用零來顯示,比如某字段數據類型為INT(5),而插入的值為2,那么零填充會顯示00002
但是,這個效果在Navicat for MySQL中顯示不出來,只有在DOS窗口下才能顯示
三.DEFAULT(默認)
添加默認約束
1)在創建表的時候添加
CREATE TABLE t_user(user_id INT(10) DEFAULT 3);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) DEFAULT 2;
ALTER TABLE t_user CHANGE user_id user_id INT(10) DEFAULT 2;
刪除默認約束
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
四.UNSIGNED(無符號位)
添加無符號
1)在創建表的時候添加
CREATE TABLE t_user(user_id INT(10) UNSIGNED);
2)通過ALTER語句
ALTER TABLE t_user MODIFY user_id INT(10) UNSIGNED;
ALTER TABLE t_user CHANGE user_id user_id INT(10) UNSIGNED;
刪除無符號
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
注:無符號作用於數值類型
#從查詢information_schema中查詢指定表中的約束
USE INFORMATION_SCHEMA;
SELECT CONSTRAINT_NAME FROM TABLE_CONSTRAINTS WHERE TABLE_NAME='student';
引用:https://blog.csdn.net/a909301740/article/details/62887992