1 /*
2 约束分类: 4种约束的CRUD3 注意点:4 唯一 主键 外键 都可以约束多列。5 4种约束,建表后,添加约束,如果表中有数据,则可能出bug,导致约束添加失败。6
7 查询约束:8 查询约束信息:SHOW CREATE TABLE 表名;9 查询约束语法:help create talbe; help alter table10
11 1.非空12 NOT NULL 非空13 建表时加非空,删除非空,建表后加非空14
15 建表后添加非空约束:16 bug: 如果表中有数据,并且指定列有null值,则非空约束添加失败。17
18 2.唯一19 UNIQUE 唯一,可以有多个null值20 建表时加UNIQUE,删除UNIQUE,建表后加UNIQUE21
22 建表后添加唯一约束:23 bug: 如果表中有数据,并且指定的列有重复数据,则UNIQUE约束添加失败24
25 注意点:26 UNIQUE约束允许多个null值。27
28 3.主键29 PRIMARY KEY 唯一非空,一张表只能有一个主键约束30 建表时加PRIMARY KEY,删除PRIMARY KEY,建表后加PRIMARY KEY31
32 建表后添加主键约束:33 bug: 如果表中有数据,并且指定列含有null值或者重复数据,则添加主键失败。34
35 注意点:36 1.PRIMARY KEY != UNIQUE + NOT NULL(因为主键只能有一个,而UNIQUE + NOT NULL可以多个)37 2.删除PRIMARY KEY后还会有一个NOT NULL约束38
39 4.外键40 FOREIGN KEY 外键约束可以设置级联更新和级联删除41 建表时加FOREIGN KEY,删除FOREIGN KEY,建表后加FOREIGN KEY42
43 建表后添加外键约束:44 bug: 如果从表有数据,并且外键列引用了被引用列没有的值,则添加外键约束失败45
46 注意点:47 1.添加外键约束,主表必须存在48 2.表数据约束:49 1.从表不能引用主表中不存在的值50 2.主表不能删除被从表引用的记录51 3.删表:从表引用主表,不能直接删除主表。52
53 5.综合:54 唯一 主键 外键 都可以约束多列。55 4种约束,建表后,添加约束,如果表中有数据,则可能出bug,导致约束添加失败。56
57 6.自动增长58 AUTO_INCREMENT59 1.一张表只能有一个自动增长列,该列必须是数值类型60 2.自增的新值= 表数据最大值 + 161 7.默认值62 DEFAULT63
64 */
65 DROP TABLE IF EXISTSstudent;66
67 --建表时添加NOT NULL约束
68 CREATE TABLEstudent(69 name VARCHAR(50) NOT NULL
70 );71
72 --删除NOT NULL约束
73 ALTER TABLE student MODIFY name VARCHAR(50);74
75 --建表后添加NOT NULL约束
76 --bug: 如果表中有数据,并且指定列有null值,则非空约束添加失败。
77 ALTER TABLE student MODIFY name VARCHAR(50) NOT NULL;78 DELETE FROM student WHERE name IS NULL;79
80
81
82 DROP TABLE IF EXISTSstudent;83
84 --建表时,添加UNIQUE约束
85 CREATE TABLEstudent(86 name VARCHAR(50) UNIQUE
87 );88
89 CREATE TABLEstudent(90 name VARCHAR(50),91 CONSTRAINT uni_name UNIQUE(name)92 );93
94 --删除UNIQUE约束
95 ALTER TABLE student DROP INDEXname;96
97 --建表后,添加UNIQUE约束
98 --bug: 如果表中有数据,并且指定的列有重复数据,则UNIQUE约束添加失败
99 ALTER TABLE student MODIFY name VARCHAR(50) UNIQUE;100 ALTER TABLE student ADD CONSTRAINT uni_name UNIQUE(name);101
102 --查看表信息
103 SHOW CREATE TABLEstudent;104
105 /*
106 PRIMARY KEY 主键约束107 唯一非空,一张表只能有一个主键约束108 注意点:109 PRIMARY KEY != UNIQUE + NOT NULL(因为主键只能有一个,而UNIQUE + NOT NULL可以多个)110 */
111 DROP TABLE IF EXISTSstudent;112
113 --建表时,添加PRIMARY KEY约束
114 CREATE TABLEstudent(115 name VARCHAR(50) PRIMARY KEY
116 );117
118 CREATE TABLEstudent(119 name VARCHAR(50),120 PRIMARY KEY(name)121 );122
123 --删除主键
124 ALTER TABLE student DROP PRIMARY KEY; --删除后还有一个NOT NULL约束
125
126 --创建完表后,添加主键
127 --bug: 如果表中有数据,并且指定列含有null值或者重复数据,则添加主键失败。
128 ALTER TABLE student MODIFY name VARCHAR(50) PRIMARY KEY;129 ALTER TABLE student ADD PRIMARY KEY(name);130
131 --查看表:约束
132 SHOW CREATE TABLEstudent;133
134
135 /*
136 外键约束:137 注意点:138 1.添加外键约束,主表必须存在139 2.表数据约束:140 1.从表不能引用主表中不存在的值141 2.主表不能删除被从表引用的记录142 3.删表:从表引用主表,不能直接删除主表。143 */
144 DROP TABLE IF EXISTSemployee;145 DROP TABLE IF EXISTSdepartment;146
147 CREATE TABLEdepartment(148 id INT PRIMARY KEY,149 name varchar(50) UNIQUE NOT NULL
150 );151 --建表时,添加外键
152 CREATE TABLEemployee(153 id INT PRIMARY KEY,154 name varchar(50) NOT NULL,155 dep_id INT,156 CONSTRAINT emp_dep_fk FOREIGN KEY(dep_id) REFERENCESdepartment(id)157 );158 --删除外键
159 ALTER TABLE employee DROP FOREIGN KEYemp_dep_fk;160
161 --建表后,添加外键
162 --bug: 如果从表有数据,并且外键列引用了被引用列没有的值,则添加外键约束失败
163 ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY(dep_id) REFERENCESdepartment(id);164
165 SHOW CREATE TABLE employee;