MySQL之约束注意点

  1. not null约束。

    not null约束只能在列名后面声明,不能使用constraint语句声明,当然也就没无法声明约束名称了。更改字段为null或者not null只能使用alter table table_name modify col_name (not) null;无法使用constraint语句修改。也就是说not null虽然是约束,但是却和constraint语句扯不上关系。not null约束在information_schema里面的table_constraints表中也无法查到。


  2. 主键约束。

    主键约束既可以在列名后面声明,也可以在声明完所有列之后声明。前者只需要在列明后面跟上primary key就行了,后者的声明方法是[CONSTRAINT [symbol]] PRIMARY KEY(COL1,...),这里声明约束名称是没有任何意义的,因为你假如使用CONSTRAINT [symbol]语句之后,MySQL会自动把约束名称改为PRIMARY,可以到information_schema里面的table_constriants表里面验证。所以我们在声明所有列再声明primary key都不会使用constraint关键字。主键即唯一索引加上not null约束,主键列上会创建唯一索引,索引的名称和约束名称相同,默认为BTREE索引,索引信息可以在information_schema里面的statistics表里面查询。

    删除主键约束使用alter table table_name drop primary key;




  3. unique约束。

    unique约束也可以称为unique索引,因为二者都是同时存在。创建表的时候可以使用如下两种方法创建unique约束:

    (1)create table t1(id int primary key,name varchar(20) unique);无法指定约束名称,系统默认约束名称和字段名相同。

    (2)create table t1(id int primary key,name varchar(20),constraint t1_unq unique(name));

     表已经存在时可以通过两种方式添加unique约束。

    (1)alter table t1 modify name varchar(20) unique;

    (2)alter table t1 add constraint t1_unq unique(name);

    (3)alter table t1 add unique index t1_unq(name);

    因为unique约束就是unique索引,所以我们都会用第三种方式去添加unique索引,如果不带unique关键字则说明添加的是普通索引。unique约束(unique索引)的信息会同时在information_schema里面的statistics表和table_constraints表里面保持一致。

    删除unique约束(索引)只能使用如下语句:

    alter table t1 drop index t1_unq;


4.  外键约束。

    在建表时创建外键约束可以使用如下方法(注意被引用的表的那个列必须有unique约束):

    (1)create table t1(id int primary key, name varchar(20) references t2(name));该方法无法声明约束名称。

    (2)create table t1(id int primary key,name varchar(20), constraint t1_fk_name foreign key(name) references t2(name));该方法可以声明约束名。

    在表已经存在的时候添加外键约束可以使用如下语句:

    alter table add constraint t1_fk_name foreign key(name) references t2(name));

    删除外键可以使用如下语句:

    alter table drop foreign key t1_fk_name;

本文出自 “trikker” 博客,请务必保留此出处http://trikker.blog.51cto.com/7478890/1538373

MySQL之约束注意点,布布扣,bubuko.com

MySQL之约束注意点

上一篇:oracle之分组内的字符串连接


下一篇:SQL基础理论题