表的约束创建和增删改查
表的约束创建和增删改查
一、表的创建
格式:create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
)engine=innodb charset=utf8;注:[]可选参数
eg>>: create table db1.t1(name char(3) not null);
注:1)数据插入时,name不能为空(null), 且最长只能存放三个字符
2)宽度和约束条件为可选参数, 用来限制存放数据的规则
二、约束条件
2.1 约束条件
- primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段(一条记录)
- foreign key:外键
- unique:唯一性数据, 该条字段的值需要保证唯一,不能重复(一个字段)
- auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段
- foreign key 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)
- not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值
- default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值
- unsigned:无符号 - 存储的数字从0开始
- zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充
2.2 约束实例
- not null 字段不可以为空
mysql>: create table td1 (x int not null, y int default 0, z int default 100);
-
auto_increment 自增
- 报错,auto_increment必须设置给 键字段
- 报错,auto_increment必须设置给 int字段
- 报错,auto_increment字段最多出现 1次
报错,auto_increment必须设置给 键字段>
mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);报错,auto_increment必须设置给 int字段>
mysql>: create table td2 (x char(4) auto_increment);报错,auto_increment字段最多出现 1次>
mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);
- primary key 主键(记录)和unique 唯一键(字段)
x为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键>
mysql>: create table td21 (x int unique auto_increment, y int unique);y为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键=>
mysql>: create table td22 (x int unique, y int unique auto_increment);x为主键:设置了主键就是设置的,主键没设置自增,那自增是可以设置在唯一键上的
mysql>: create table td23 (x int primary key, y int unique auto_increment);x为主键:设置了主键就是设置的,主键设置了自增,自增字段只能有一个,所以唯一键不能再设置自增了
mysql>: create table td24 (x int primary key auto_increment, y int unique);默认主键:没有设置主键,也没有 唯一自增键,那系统会默认添加一个 隐式主键(不可见)
mysql>: create table td25 (x int unique, y int unique);
唯一键:确保一个字段,数据不能重复
主键:是一条记录的唯一标识(可以理解为数据的编号)
- 联合唯一
ip在port不同时,可以相同,ip不同时port也可以相同,均合法>
ip和port都相同时,就是重复数据,不合法>
mysql>: create table tu1 (ip char(16), port int, unique(ip, port));也可以设置成 联合主键,道理同 联合唯一>
mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));
- 、foreign key 外键
foreign key(所在表的外键字段) references 关联表(关联字段)
-
1、外键的 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)
-
2、外键要通过 foreign key 语法建立表与表之间的关联
-
3、foreign key(所在表的外键字段) references 关联表(关联字段)
eg: foreign key(detail_id) references author_detail(id)
-
4、级联关系
级联更新 on update cascade
级联删除 on delete cascade
-
5、外键格式
格式:foreign key(所在表外键) references 关联表名称(id) on update cascade on delete cascade;
eg>>: foreign key(detail_id) references author_detail(id) on update cascade on delete cascade
外键字段本身可以唯一或不唯一,但是外键关联的字段一定唯一