列的约束
1.主键约束(Primary Key)
*约束是对表格列中的值起限定作用
*每一个表格只有一个列可以设置为主键
*主键约束通常用来标记表格中的一条数据唯一存在(现实中记录两条一模一样的数据是没有意义的)
*唯一性,非空性。被设置为主键的列,不能重复,不能为空null
*主键约束属于对表结构进行修改,归类到DDl数据定义语言
*添加主键约束:alter table 表名 add constraint 约束名字 约束类型 (被设置为主键的列);
alter table 表名 add constraint pk_表名 primary key (classid);
发现我们自定义的主键约束名没有被用到,因此可以简写为
简写:alter table 表名 add primary key(classid);//classid这里默认是主键列
怎么发现的?通过show keys from 表; desc 表; show create table 表名;
查到Key_name依然是默认的PRIMARY,而不是我们自定义的pk_表名
*添加主键自增:有时候我们并不需要主键列有意义,只需要它作为唯一标识就行了,可以设计为自增
语句:
alter table 表名 modify 主键列 类型(长度) auto_increment;
或alter table 表名 change 列名 列名 类型(长度) auto_increment;//这里是做自增,第二个列名跟第一个一样
大概区别是modify修改原列结构,change一样,只不过可以修改列名
主键列默认从1开始,如果需要设置起始值,语句:alter table 表名 auto_increment=10;
*删除主键约束:
语句:alter table 表名 drop primary key;//因为一个表格只有一个主键约束,所以无需知道约束名就可以
如果报错:请看https://www.cnblogs.com/hebiao/p/14069531.html
注意:删除主键后,唯一特性没有了,但非空特性还在
语句:alter table 表名 modify 列名 类型(长度) null;//这两句执行完,主键就删除干净了
2.唯一约束(Unique Key)
*不能重复,但是可以为空
*一个表格可以设置多个列
*添加唯一约束:
语句:alter table 表名 add constraint 约束名称 约束类型(列)
alter table tablename add constraint uk_表名 unique [key](列);
简写:alter table taalename add unique key(列);//约束名默认为列名
*删除唯一约束:
语句:alter table 表名 drop index 约束名;
alter table 表名 drop index uk_表名;//删除唯一约束,这里不是用unique key ,而是使用的index,规则
3.非空约束
*给表格的某个列添加非空约束,这个列的值不能为null
*添加非空约束:alter table 表名 modify 列名 类型 (长度) not null default 默认值;//default 默认值,如果不想填值,又不能为空,那么设个默认值。
或 alter table 表名 change 列名 新列名 类型(长度) not null;//如果只是想修改非空,不想修改列名,那么新列名跟列名一样
*删除非空约束:alter table 表名 modify 列名 类型(长度) null;
4.外键约束(Foreign Key)
*表格中可以有多个列被设置为外键约束
*当前列的值可以为空 可以重复
*当前列的值不能随便的填写 值去另外一张表格内寻找
*外键是当前列的值受到另外一张表格某一个列的影响
*另外一张表格的列 是唯一约束(主键 唯一)
*添加外键约束:alter table 表名 add [constraint fk_当前表_关联表] foreign key (列) references 关联表(列);
*简写:alter table 表名 add foreign key (列) references 关联表(列);
*总结:主键约束都用简写形式,因为定义了约束名也没用,况且一个表只有一个主键,只简写;非空没约束名,只是表结构的属性修改;
唯一约束简写,约束名默认是列名,可简写也可定义;外键约束简写,默认约束名不是列名,是自动生成的一个名字,建议自定义。
*删除:外键约束删除分两步,1.alter table 表名 drop foreign key 约束名;2.alter table 表名 drop key 约束名;
外键约束是跟另一张表的关联,这个关联是相互的,建立外键的时候自动产生一个key,标识对方与自己的关系。
5.检查约束(Check)
列在存值的时候做一个细致的检查 范围是否合理
alter table student add constraint ck_sage check(sage>15 and sage<30);
mysql数据库可以执行上面语句,但不生效,oracle数据库支持。