列的约束

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数据库支持。

 

posted on 2020-12-01 17:20  刀锋93  阅读(195)  评论(0编辑  收藏  举报

导航