MySQL 学习笔记之建表、添加约束、表字段操作

184 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

表约束

  • 常见约束

    • not null:非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空

    • unique:唯一约束,它可以使某个字段的值不能重复,如:email不能重复

    • primary key:主键约束,每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的

    • foreign key:外键约束,外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp中的deptno值必须来源于dept表中的deptno字段值   

    当一个表中存在外键约束时,比如 user 表中有一个外键来自 dept 表,那么删除数据的时候的时候要先删除 user 表中的引用记录,再删除 dept 表中的数据

  • 创建表并添加约束的语句

drop table if exists user;

create table user(

id  bigint (20),

name    varchar(32) not null,

constraint  pk_id   primary key(id)
);

 

drop table if exists dept;

create table dept(

det_id  bigint(20),

name varchar(32) not null,

user_id  bigint (20) not null,

constraint  pk_det_id   primary key(det_id),

constraint  fk_user_id   foreign key(classes_id) references t_classes(classes_id)

)
  • 级联更新与级联删除

当一个表中存在外键约束时,删除和修改都会是一个比较令人头疼的事情,一不小心就会报错。可以采用级联的方法去解决这个问题。

- on update cascade 级联更新

mysql 对有些约束的修改比较麻烦,所以我们可以先删除,再添加

alter table dept drop foreign key fk_user_id;
alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id)  on update cascade;<br><br>
- on delete cascade 级联删除

mysql 对有些约束的修改是不支持的,所以我们可以先删除,再添加

alter table dept drop foreign key fk_user_id;

alter table dept add constraint fk_user_id foreign key(fk_user_id) references user(id)  on delete cascade;

delete from user where id = 20;
  • 添加约束   ① 添加外键约束:alter table 从表 add constraint 约束名称 foreign key 从表(外键字段) references 主表(主键字段);

  示例:alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id);

  ② 添加主键约束:alter table 表 add constraint 约束名称 primary key 表(主键字段);

  示例:alter table t_student add constraint pk primary key(student_id);

  ③ 添加唯一性约束:alter table 表 add constraint 约束名称 unique 表(字段);

  示例:alter table t_student add constraint uk unique(email);

  • 修改约束   alter table t_student modify student_name varchar(30) unique;

  mysql对有些约束的修改时不支持,所以我们可以先删除,再添加

  • 删除约束   删除外键约束:alter table 表名 drop foreign key 约束名;

  删除主键约束:alter table 表名 drop primary key ;

表字段操作

  • 添加字段
  alter table 表名 add column 列名 类型;// column 可省略

示例:

alter table user add name varchar(32);
  • 修改字段
  alter table 表名 modify 列名 类型;

示例:

alter table user modify name varchar(64) ;
  • 删除字段
alter table 表名 drop 列名;

示例:

alter table user drop name;