Mysql 约束的新增和删除

1.普通索引。

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

(1)创建索引:create index indexname on tablename(tablecolumns(length));如果是char,varchar类型,length可以小于字段实际长度;如果是blob 和 text 类型,必须指定length,下同。

(2)修改表结构:alter tablename add index [indexname] on (tablecolumns(length)) 

(3)创建表的时候直接指定:create table tablename ( [...], index [indexname] (tablecolumns(length)) ;

2.唯一索引。

它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

(1)创建索引:create unique index indexname on tablename(tablecolumns(length))

(2)修改表结构:alter tablename add unique [indexname] on (tablecolumns(length))

(3)创建表的时候直接指定:create table tablename ( [...], unique [indexname] (tablecolumns(length)) 

 


查看索引  show index from 数据库表名

alter table 表名 add index 索引名称(数据库字段名称)

primary key(主键索引)

alter table table_name add primary key ( column )

unique(唯一索引)

alter table table_name add unique (column)

index(普通索引)

alter table table_name add index index_name ( column )

fulltext(全文索引)

alter table table_name add fulltext ( col)

多列索引

alter table table_name add index index_name ( column1, column2 )

-- 创建约束

alter table table_name add unique(col);

默认该约束的名称等于该列的名称,但是如果修改了这列的名称,而约束的名称确是不会改变的,这样在修改的时候容易引起问题,最好的方法是查看该表的约束再进行操作。

alter table table_name add constraint index_name2 unique(col);

create unique index index_name2 on table_name(col);

 -- 删除没有显式命名的约束

show index from table_name; --查看 key_name 。如key_name 是 index_name

alter table table_name drop index index_name; -- 隐式

-- 删除带显式命名的约束

alter table table_name drop index index_name2; -- 显式


alter table table_name drop primary key; 直接就可以删除该表中的主键

show keys from table_name;

alter table table_name add constraint forkey_name foreign key (col) references table_name2(col); 

或:

alter table table_name add foreign key (col) references table_name2(col); 

(需要通过 show create table table_name)来查看外键名称

如果table_name2上没有主键约束和唯一性约束的列是没有资格作为列建立外键约束,否则会报错:“error 1215 (hy000): cannot add foreign key constraint”

alter table table_name2 add primary key (col);

删除外键:

首先查看外键名称:

show create table table_name

alter table table_name drop foreign key forkey_name; 

 

check约束

建立约束alter table table_name add check(sex in ('男','女'));没有报错

但是insert into table_name values("a"); 不会报错,这是因为mysql 对于check会进行解析,但check约束实际无效。而要实际实现check约束的功能一般使用enum类型或者触发器来实现。


你可能感兴趣的:(Mysql 约束的新增和删除)