表的约束创建和增删改查

表的约束创建和增删改查

一、表的创建

格式: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 约束条件

  1. primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段(一条记录)
  2. foreign key:外键
  3. unique:唯一性数据, 该条字段的值需要保证唯一,不能重复(一个字段)
  4. auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段
  5. foreign key 字段名 可以自定义(名字随意),通常命名规范(关联表_关联字段)
  6. not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值
  7. default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值
  8. unsigned:无符号 - 存储的数字从0开始
  9. zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充

2.2 约束实例

  1. not null 字段不可以为空

mysql>: create table td1 (x int not null, y int default 0, z int default 100);

  1. 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);

  1. 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);

唯一键:确保一个字段,数据不能重复

主键:是一条记录的唯一标识(可以理解为数据的编号)

  1. 联合唯一

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));

  1. 、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

外键字段本身可以唯一或不唯一,但是外键关联的字段一定唯一

在当下的阶段,必将由程序员来主导,甚至比以往更甚。
原文地址:https://www.cnblogs.com/randysun/p/11629803.html