有以下的六大約束:sql
須要注意的是,MySQL不支持check約束,可是可使用check約束,沒有任何效果。ui
CREATE TABLE 表名(
列名 字段類型 單列約束,
列名 字段類型 單列約束,
多列約束(列名1,列名2)
);
複製代碼
CREATE TABLE 表名(
列名 字段類型 列級約束,
列名 字段類型 列級約束,
表級約束(列名1,列名2)
);
複製代碼
列級約束,六大約束都支持,可是外鍵約束沒有效果。spa
表級約束,除了非空、默認約束,其餘約束都支持。code
CREATE TABLE stu_info (
id INT PRIMARY KEY,# 主鍵
stu_name VARCHAR ( 255 ) NOT NULL,# 非空
gender CHAR ( 1 ) CHECK (
gender IN ( '男', '女' )),# 檢查
seat INT UNIQUE,# 惟一
age INT DEFAULT 18 # 默認約束
);
複製代碼
CREATE TABLE major (
id INT PRIMARY KEY,
`name` VARCHAR ( 255 )
);
CREATE TABLE stu_info (
id INT ,
stu_name VARCHAR ( 255 ) not null ,
gender CHAR ( 1 ) ,
seat INT ,
age INT DEFAULT 18,
major_id int,
CONSTRAINT pk_id PRIMARY KEY (id),
CONSTRAINT uk_seat UNIQUE (seat) ,
CONSTRAINT fk_marjor_id FOREIGN KEY (major_id) REFERENCES major(id)
);
複製代碼
保證惟一性 | 是否容許爲空 | 一個表中能夠有多少個 | 是否容許組合 | |
---|---|---|---|---|
主鍵 | √ | × | 最多有1個 | √,可是不推薦 |
惟一 | √ | √ | 能夠有多個 | √,可是不推薦 |
# 添加列級約束
ALTER TABLE 表名 MODIFY COLUMN 列名 字段類型 新約束;
# 添加表級約束
ALTER TABLE 表名 ADD CONSTRAINT 約束名 約束類型 (字段名) [外鍵的引用];
複製代碼
CREATE TABLE major (
id INT PRIMARY KEY,
`name` VARCHAR ( 255 )
);
CREATE TABLE stu_info (
id INT ,
stu_name VARCHAR ( 255 ) NOT NULL,# 非空
gender CHAR ( 1 ) ,
seat INT UNIQUE,# 惟一
age INT ,
major_id int
);
# 修改表時添加約束
ALTER TABLE stu_info MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE stu_info MODIFY COLUMN age INT DEFAULT 18;
ALTER TABLE stu_info ADD CONSTRAINT fk_major_id FOREIGN KEY (major_id) REFERENCES major(id);
複製代碼
CREATE TABLE major (
id INT PRIMARY KEY,
`name` VARCHAR ( 255 )
);
CREATE TABLE stu_info (
id INT PRIMARY KEY,
stu_name VARCHAR ( 255 ) NOT NULL,# 非空
gender CHAR ( 1 ) ,
seat INT UNIQUE,# 惟一
age INT DEFAULT 18,
major_id int,
CONSTRAINT fk_marjor_id FOREIGN KEY (major_id) REFERENCES major(id)
);
# 修改表時刪除非空約束
ALTER TABLE stu_info MODIFY COLUMN stu_name VARCHAR(255) ;
# 修改表時刪除默認約束
ALTER TABLE stu_info MODIFY COLUMN age INT;
# 修改表時刪除主鍵
ALTER TABLE stu_info DROP PRIMARY KEY;
# 修改表時刪除主鍵
# 查詢惟一鍵 show index from stu_info
ALTER TABLE stu_info DROP INDEX seat;
# 修改表時刪除外鍵
ALTER TABLE stu_info DROP FOREIGN KEY fk_marjor_id;
複製代碼
# 刪除表
DROP TABLE IF EXISTS student;
# 建立表的時候設置標識列
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
`name` VARCHAR ( 255 )
);
# 新增數據
INSERT INTO student(`name`) VALUES ('xxx');
複製代碼
# 刪除表
DROP TABLE IF EXISTS student;
# 建立表的時候設置標識列
CREATE TABLE student (
id INT PRIMARY KEY ,
`name` VARCHAR ( 255 )
);
# 修改表的時候設置標識列
ALTER TABLE student MODIFY COLUMN id PRIMARY KEY auto_increment;
# 新增數據
INSERT INTO student(`name`) VALUES ('xxx');
複製代碼
# 刪除表
DROP TABLE IF EXISTS student;
# 建立表的時候設置標識列
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
`name` VARCHAR ( 255 )
);
# 修改表時刪除標識列
ALTER TABLE student MODIFY COLUMN id PRIMARY KEY;
複製代碼
標識列必須不必定和主鍵搭配,可是要求是一個key。rem
一個表中至多有一個標識列。string
標識列的類型只能是數值型。it
標識列能夠經過set auto_increment_increment =3;
設置步長,也能夠經過手動插入值的方式設置標識列的起始值INSERT INTO student(id,name) VALUES (5,'xxx')
。table