-- 约束primary key、not null、unique、foreign key、check、auto_increment
一、主键(primary key)
CREATE TABLE email_tab(
id INT PRIMARY KEY,
`name`VARCHAR(32),
email VARCHAR(32)
);
-- 主键列的值不可以重复
INSERT INTO email_tab
VALUES(1,'jack','jack@163.com')
INSERT INTO email_tab
VALUES(2,'tom','tom@163.com')
INSERT INTO email_tab
VALUES(2,'ch','ch@163.com')
二、非空(not null)
当插入数据时,必须提供数据
三、唯一(unique)
CREATE TABLE unique_tab(
id INT UNIQUE, --unique不可重复,可以有多个null
`name`VARCHAR(32),
email VARCHAR(32)
);
INSERT INTO unique_tab
VALUES(1,'jack','jack@163.com')
INSERT INTO unique_tab
VALUES(1,'tom','tom@163.com')
四、外键(foreign key)
-- 创建主表 班级表
CREATE TABLE my_class(
id INT PRIMARY KEY, -- 班级编号
`name`VARCHAR(32) NOT NULL DEFAULT''
);
-- 创建从表 学生表
CREATE TABLE my_stu(
id INT PRIMARY KEY, -- 学生编号
`name`VARCHAR(32) NOT NULL DEFAULT'',
class_id INT, -- 学生所在的班级编号
-- 指定外键关系
FOREIGN KEY(class_id)REFERENCES my_class(id)
);
-- 添加数据
INSERT INTO my_class
VALUES (100,'java'),(200,'web');
SELECT * FROM my_class;
INSERT INTO my_stu
VALUES (1,'tom',100);
INSERT INTO my_stu
VALUES (2,'jack',200);
INSERT INTO my_stu
VALUES (3,'ch',300); --班级不存在,插入数据失败
五、check
创建表
CREATE TABLE check_tab(
id INT PRIMARY KEY,
`name`VARCHAR(32),
sex VARCHAR(6) CHECK (sex IN('man','women')),
sal DOUBLE CHECK (sal >1000 AND sal<2000)
);
添加数据测试
INSERT INTO check_tab
VALUES (1,'ch','man',1100);
SELECT * FROM check_tab;
六、自增长(auto_increment)
CREATE TABLE zizengzhang_tab(
id INT PRIMARY KEY AUTO_INCREMENT, --自增长
email VARCHAR(32) NOT NULL DEFAULT'',
`name`VARCHAR(32) NOT NULL DEFAULT''
);
-- 测试自增长
INSERT INTO zizengzhang_tab
VALUES(NULL,'jack@qq.com','jack');
SELECT * FROM zizengzhang_tab;
INSERT INTO zizengzhang_tab
VALUES(NULL,'tom@qq.com','tom');
SELECT * FROM zizengzhang_tab;