1.constraint就是约束的意思,在MySQL中约束的表现形式有:not null/ primary key/unique隐含有约束功能。
2.如果为一个字段创建了约束,除非这个字段是not null ,否则就是为了这个字段即创建了约束又创建了索引,也就是说primary key为主键创建了约束和索引,unique也是一样。
但是当primary key 与constraint 关键字搭配使用的时候,将会忽视constraint 所创建的约束名与索引,其约束名与索引名皆为primary,比如:create table jc_one (id int ,names varchar(10) ,primary key(id))和create table jc_one (id int ,names varchar(10) ,constraint my_self_index primary key(id))执行结果是一样的,因此在使用primary key的时候就不需要使用constraint了。
而unique 则不一样,如果unique不与constraint 搭配使用,则约束与索引名都默认为字段名称,而当使用unique与constraint 配合使用时,其约束名称与索引名称结尾constraint定义的一样,create table jc_one (id int ,names varchar(10) ,unique(id))的约束名与索引为id,而create table jc_one (id int ,names varchar(10) ,constraint my_self_key unique (id))索引名与约束名都是my_self_key。
注:如何验证以上结论呢,在mysql下的有个information_schema的数据库,该数据库下有个table_constraints表与 STATISTICS表,这两张表里分别存放着数据库中所有表的约束名与索引名,所以我们可以通过查看这两个表的变化,去查看结果
3.key与index 一样,只创建索引,不创建约束
4.foreign key 是建立外键关系,其与constraint搭配使用也是一样的,当然如果你不使用constraint的话,数据库会自动为你生成一个默认的约束名称与索引名称。