一、主键
创建表时:
#列级定义
create table user (
id int primary key,
name varchar(255)
)
#表级定义
create table user (
id int,
name varchar(255),
primary key(id)
)
#约束定义
create table user (
id int,
name varchar(255),
constraint pk primary key(id)
)
修改表时:
alter table user add primary key(id);
alter table user add constraint pk primary key (id);
alter table modify id int primary key;
注意:无论通过哪种方式创建主键,通过show create table
语句查看表时,显示的都是表级定义。
删除主键:
alter table user drop primary key;
注意:主键是唯一的,所以不需要名称,哪怕你是通过约束创建的,实际上是表级定义,约束名不起作用。
即以下语句是错误的:
alter table user drop constraint pk;
二、外键
创建表时:
create table introduce (
name varchar(255),
content varchar(255),
foreign key(name) references user(name)
)
注意:可以在foreign key的后面加上名称,如foreign key fk_index (name),不过这个名称并不是外键的名称,在创建外键时,mysql会为引用列创建一个索引,该名称为索引名。
以上方式,外键名称会自动生成,也可以通过以下语句指定外键名:
constraint fk foreign key(name) references user(name);
即约束名就是外键名称。
修改表时:
alter table introduce add foreign key(name) references user(name);
alter table introduce add constraint fk foreign key(name) references user(name);
注意:通过show create table
语句查看时,显示的都为约束定义的外键。
删除外键:
alter table introduce drop foreign key fk;
alter table introduce drop constraint fk;
三、唯一约束
创建表时:
#列级定义
create table user (
id int unique,
name varchar(255)
)
#表级定义
create table user (
id int,
name varchar(255),
unique (id)
)
#约束定义
create table user (
id int,
name varchar(255),
constraint uq unique(id)
)
注意:表级定义unique(id)也可以加上名称,如:unique index uq (id),不然自动生成。
另外,通过约束方式生成的唯一约束,该约束名就是唯一约束的名称。
修改表时,创建方式与主键、外键类似。
alter table user add unique(id);
alter table user add constraint uq unique (id);
alter table modify id unique;
通过show create table
语句查看,会发现无论通过哪种方式创建唯一约束,显示的都是表级定义方式。
所以删除时,只能用如下语句:
alter table user drop index uq;
而对于删除约束的方式drop constraint uq
会发生错误,原因在于约束定义在内部会转为表级定义。
unique index与unique key类似,通过show create table
语句查看,显示的都为unique key。
四、索引
create table user (
id int,
name varchar(255),
index(id)
)
index的后面可以加上名称,不然自动生成。
索引不能通过约束定义的方式创建
修改表时:
alter table user add index myindex (id);
删除索引:
alter table user drop index myindex;
通过create index
语句创建:
create index index_name on user(id);
通过drop index
语句删除:
drop index index_name on user;
注意:unique index也可以用同样方式创建、删除。
index与key是类似的,通过show create table
语句查看,显示关键字的是key