MySQL约束学习笔记

MySQL约束总共分为四种:

  1. NOT NULL: 非空约束,指定某列不能为空
    建立该约束的方法:只能使用列级定义
    直接上代码:
    create table student(
    name varchar(10) NOT NULL
    age int(5)
    )
    所以列级约束十分简单,就是可以在建表时直接在你定义列级语句末尾直接加上NOT NULL

    alter table student modify age int(5) not null
    这是在增加列级定义,相当于给该列补充了一个约束

    删除not null 约束:
    alter table student modify name varchar(10) null
    只需去掉not便可去掉该约束

  2. UNIQUE: 唯一约束,指定列不能有重复
    注意:不能有重复,但是可以有多个null,因为在数据库中null不等于null
    建立该约束的方法:列级约束,表记约束
    create table Student(
    name varchar(10) unique,
    age int(5),
    school varchar(20)
    )

    alter table student modify name varchar(10) unique
    与前者相同
    表记约束:同时对两列或者以上的列进行约束
    语法: unique()括号中填写需要加唯一约束的列名,逗号隔开
    create table student(
    age int(5),
    school varchar(20)
    unique (age,school)
    )
    constraint+约束名+unique+需要约束的列
    将上面unique (age,school)等效于 constraint index unique (age,school)
    此处index 类似于Java中Student stu 中的stu 可以看作是一个变量名.

    去除约束操作:注意可以使用 alter table 表名 +drop constraint +约束名,但是MySQL中没有效果,因此要去除约束操作得通过 alter table 表名 + drop index +约束名
    例如去除上方age列的约束:
    alter table student drop index index

  3. Primary Key:相当于非空约束和唯一约束的组合,既指定列不能为空,不能重复

    操作语法与unique方法基本相同,直接上代码:
    create table student(
    name varchar(20),
    id int(5) primary key,
    age int (5)
    )
    或者可以将 id int(5) primary key该语句替换为:
    constraint id primary key(id)

    添加约束也是一样:
    alter table student modify age int(5) primary key

    同样可以使用表级约束:
    alter table student constraint index primary key(id,age)
    但是!需要注意的是虽然约束名我设为了index,但是在MySQL中约束名仍为Primary

    删除约束语句:直接是 alter table 表名 drop primary key

  4. Foreign Key:保证一个或者两个表之间数据的参照性,子表(从表)外键列的值必须在主表被参照列的值范围之内,或者为空。外键约束通常用于定义两个实体之间的一对多,一对一的关联关系。对于一对多的关联关系,通常在多的一端增加外键列。
    例如老师——学生(假设一个老师对应多个学生,但每个学生只有一个老师,这是典型的一对多的关联关系)。为了建立他们之间的关联关系,可以在学生表中增加一个外键列,该列中保存此条学生记录对应老师的主键

    操作语法:可以使用列级语法,但是不会生效!
    create table teacher_info(
    tea_id varchar(30) primary key,
    tea_name varchar(50) not null
    )
    create table student_info
    (
    stu_id varchar(30) primary key,
    stu_name varchar(50) not null,
    teacher_id varchar(30) references teacher_info(tea_id)
    )
    不会生效!

因此使用表记语法:
需要使用foreign key来指定表的外键列,并使用references来指定参照哪个主表,以及参照到主表的哪个数据列。使用表级约束语法还可以为外键约束指定约束名称,如果创建外键约束时没有指定约束名,则MySQL会为该外键约束命名为table_name_ibfk_n,其中table_name是从表的名称,而n是从1开始的整数。
create table student_info(
stu_id varchar(30) primary key,
stu_name varchar(50) not null,
teacher_id varchar(30) not null,
foreign key (teacher_id) references teacher_info(tea_id)
)
如果需要显示的指定外键约束名称,则可以使用constraint来指定约束名字,如下SQL所示:

create table student_info(
stu_id varchar(30) primary key,
stu_name varchar(50) not null,
teacher_id varchar(30) not null,
constraint stud_info_teacher_fk foreign key (teacher_id) references teacher_info(tea_id)
)

如果需要建立多列组合的外键约束,则必须使用表级约束语法。如下SQL所示:
create table student_info(
stu_id varchar(30) primary key,
stu_name varchar(50) not null,
teacher_id varchar(30) not null,
foreign key (teacher_id,teacher_name) references teacher_info(tea_id,tea_name)
)
添加外键约束,同时指定外键名称
alter table orders
add constraint fk_order_user foreign key (user_id) references user(user_id)

需要指出的是,外键约束不仅可以参照其他表,而且还可以参照自身,这种参照自身的情况通常被称为自关联。例如,使用一个表保存某个公司的所有员工记录,员工之间有部门经理和普通员工的区分,部门经理和普通员工之间就存在了一对多的关系,但他们都是保存在同一个数据表里的记录,这就是典型的自关联,如下SQL所示:
#使用表级约束语法建立外键约束,且直接参照自身
create table foreign_test(
foreign_id int auto_increment primary key,
foreign_name varchar(50) not null,
refer_id int,
foreign key(refer_id) references foreign_test(foreign_id) on delete cascade
)

删除外键约束名的语法很简单,在alter table后增加“drop foreign key 约束名”子句即可,如下SQL所示:
alter table student_info
drop foreign key stud_info_teacher

需要注意的是当主表的记录被从表记录参照时,主表记录不允许被删除,必须先把从表参照记录的所有记录全部删除后,才可以删除主表的该记录。还有一种方式,删除主表记录时级联删除从表中所有参照该记录的从表记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值