之前总是习惯使用Navicat来建表添加约束,方便是真的方便,以至于有一天写项目的时候发现竟然不会手写添加约束的语句了。。。
这两天总结了下关于mysql的一些约束,
—主键约束
意义:它能够唯一确定一张表中的一条记录,也就是通过给某个字段添加约束,就可以适当该字段不重复且不为空。
创建方法
建表时创建create table 表名(
字段名 字段类型 primary key,
…
);
建表后创建
alter table 表名 add primary key(列名);
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
| pass | varchar(255) | YES | | NULL | |
+——-+————–+——+—–+———+——-+
删除主键约束
alter table 表名 drop primary key;
—联合主键
意义:联合主键就是用2个或2个以上的字段组成主键,联合主键可以分别重复,但不能同时重复。
建表时创建
create table 表名(
字段名 字段类型,
字段名 字段类型,
字段名 字段类型,
primary key(字段1,字段2)
…
);
建表后创建
alter table 表名 add primary key(列名1,列名2);
删除联合主键alter table 表名 drop primary key;
—自增约束
意义:自增约束的列必须是键列(主键,唯一键,外键),且一张表只能有一个自增约束,设置自增约束后,列值会自动增长。
建表时创建
create table 表名(
字段名1 int primary key auto_increment,
字段名2 数据类型 ,
字段名3 数据类型
…
);
建表后创建
alter table 表名称 modify 字段名 数据类型 auto_increment;
删除自增约束
alter table 表名称 modify 字段名 数据类型;
—唯一约束
意义:约束修饰的字段值不可以重复
建表时创建create table 表名(
字段1 类型 primary key,
字段2 类型 unique,
字段3 类型
);
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | NO | UNI | NULL | |
| pass | varchar(255) | YES | | NULL | |
+——-+————–+——+—–+———+——-+
建表后创建alter table 表名 add unique(列名);
删除约束alter table 表名 drop index 列名;
—非空约束
意义:修饰的字段不能为空
建表时创建create table 表名(
字段1 类型 not null,
字段2 类型,
…
);
建表后创建
alter table 表名 change column 字段名 字段名 类型 not null;
删除约束alter table 表名 change column 字段名 字段名 类型 null;
—默认约束
意义:就是当我们插入字段值的时候,如果没有传值,就会使用设置的默认值
建表时创建
create table 表名(
字段1 类型,
字段2 类型,
字段3 类型 default 默认值
);
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | NO | | NULL | |
| pass | varchar(255) | YES | | 123 | |
+——-+————–+——+—–+———+——-+
建表后创建alter table 表名 modify 字段名 类型 default 默认值
删除默认约束alter table 表名 alter column 字段名 drop default;
—外键约束
意义:外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性
建表时创建
主表create table classes(
字段1 类型 primary key,
字段2 类型
)ENGINE=innoDB DEFAULT CHARSET=utf8;
从表create table students(
字段1 类型 primary key,
rimary key,
字段3 类型,
foreign key(从表的字段3) references 主表名(主表的字段1)
)ENGINE=innoDB DEFAULT CHARSET=utf8;
注意:数据表引擎需设置为innoDB,否则可能会不支持外键