MySQL-7.mysql约束

约束用于确保数据库中的数据满足特定的商业规则。

MySQL约束包含五种:not null、unique、primary key、foreign key、check

7.1 primary key 主键

字段名 字段类型 primary key
用于唯一的标识表的行数据,当定义主键约束后,该列不能重复。
  • primary key不能重复而且不能为null
  • 一张表最多只能有一个主键,但可以是复合主键(同时重复,才违反主键不可重复的原则)
  • 主键的指定方式有两种:直接在字段后指定:字段名 字段类型 primakry key
                                               在表定义最后写 primary key(列名);
  • 使用desc表名,可以看到primary key的情况
  • 在实际开发中,每个表往往都会设计一个主键
CREATE TABLE tab
    (id INT PRIMARY KEY, -- 表示 id 列是主键
    `name` VARCHAR(32));

CREATE TABLE tab
    (id INT,
    `name` VARCHAR(32),
    PRIMARY KEY(id)
    );
# 复合主键 (id 和 name 做成复合主键)
# 当id和name同时重复,才违反主键不可重复的原则
CREATE TABLE tab(
    id INT , 
    `name` VARCHAR(32),
    email VARCHAR(32), 
    PRIMARY KEY (id, `name`) -- 这里就是复合主键
    );

7.2 not null 非空

字段名 字段类型 not null
如果列上指定了not null,插入数据时必须为列提供数据

7.3 unique 唯一

字段名 字段类型 unique
如果列上指定了unique,该列数据不能重复
  • 如果没有指定 not null,则 unique 字段可以有多个null
  • 与主键的区别是:一张表可以有多个unique字段 
  • unique not null 使用效果类似 primary key

7.3 foreign key 外键

FOREIGN KEY  (本表字段名)  REFERENCES  主表名(主键名或unique字段名)
用于定义主表和从表之间的关系: 外键约束要定义在从表上,主表则必须具有主键约束或是unique约束。当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。

由于主表中没有id=300,从表class_id=300插入失败
如果要删除主表id=200的记录,会删除失败,因为有从表与它有外键约束,必须先删除从表class_id=200的记录,才能删除主表id=200的记录。
  • 外键指向的表的字段,要求是primary key 或者是unique
  • 表的类型是innodb,这样的表才支持外键
  • 外键字段的类型要和主键字段的类型一致(长度可以不同)
  • 外键字段的值,必须在主键字段中出现过,或者为nul[前提是外键字段允许为null]
  • 一旦建立主外键的关系,数据不能随意删除了
-- 创建 主表 my_class
CREATE TABLE my_class (
    id INT PRIMARY KEY , -- 班级编号
    `name` VARCHAR(32) NOT NULL DEFAULT ''
    );

-- 创建 从表 my_stu
CREATE TABLE my_stu (
    id INT PRIMARY KEY , -- 学生编号
    `name` VARCHAR(32) NOT NULL DEFAULT '', 
    class_id INT , -- 学生所在班级的编号
    -- 下面指定外键关系
    FOREIGN KEY (class_id) REFERENCES my_class(id)
    );

7.4 check

列名 类型 check(check条件)
用于强制行数据必须满足的条件。
假定在sal列上定义了check约束,要求sal列值在1000~2000之间,如果不再1000~2000之间就会提示出错。
在mysql中实现check的功能,一般是在程序中控制或者通过触发器完成。
CREATE TABLE tab (
    id INT PRIMARY KEY, 
    `name` VARCHAR(32) , 
    sex VARCHAR(6) CHECK (sex IN('man','woman')), 
    sal DOUBLE CHECK ( sal > 1000 AND sal < 2000)
    );

自增长:auto_increment

字段名 整型 primary key auto_increment
希望id列在添加记录的时候该列从1开始,自动的增长
插入数据是可以给null,或直接跳过该字段赋值
INSERT INTO tab VALUES(NULL, 'tom@qq.com', 'tom');
INSERT INTO tab (email, `name`) VALUES('hsp@sohu.com', 'hsp');
  • 一般来说自增长是和primary key 配合使用的
  • 自增长也可以单独使用[但是需要配合一个unique]
  • 自增长修饰的字段为整数型(虽然小数也可以但是非常少这样使用)
  • 自增长默认从1开始,也可以修改:alter table 表名 auto increment = 新的开始值;
  • 如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据. 
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值