MySQL基础(六)常见约束

一、常见约束的分类

1.约束的含义:一种限制。用于限制表中数据,为了保证表中数据准确可靠。

2.六大约束
(1)NOT NULL:非空,用于保证该字段的值不能为空
(2)DEFAULT:默认,用于保证该字段有默认值
(3)PRIMARY KEY:主键,用于保证该字段值具有唯一性,并且非空
(4)UNIQUE:唯一、具有唯一性但可为空;比如:座位号
(5)CHECK:检查约束(MySQL中不支持)
(6) FOREIGN KEY:外键,用于限制两个表的关系,保证该字段的值必须来自主表的关联列的值
(在从表中添加外键约束,用于引用主表中某列的值)

Q1. 主键 vs 唯一

是否唯一是否允许为空一张表中可以有多少个是否可以组合
主键唯一不允许至多1个可以,但不推荐
主键唯一允许可以多个可以,但不推荐

Q2. 外键的特点
1.要求在从表设置外键约束
2.从表外键列的类型和主表关联列的类型要求一致或兼容,名称无要求
3.主表关联列必须是一个key(主键或者唯一)
4.插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再剔除主表

3.约束的添加时机

  • 创建表时
  • 修改表时

4.约束的添加分类

  • 列级约束:六大约束语法上都支持,但外键约束没有效果
  • 表级约束:除了非空、默认,其他都支持
位置支持的约束类型是否可起约束名
列级约束列的后面语法都支持,外键没效果不可以
表级约束所有列下面默认和非空都不支持,其他支持可以,但主键没效果
CREATE TABLE 表名 (
    字段名 字段类型 列级约束,
    字段名 字段类型,
    表级约束
);

二、创建表时添加约束

1.添加列级约束

CREATE TABLE students (
    stu_id INT PRIMARY KEY,
    stu_name VARCHAR(20) NOT NULL,
    gender CHAR(1) CHECK(gender='男' or gender='女'),
    seat INT UNIQUE,
    age INT DEFAULT,
    majorid INT [FOREIGN KEY] REFERENCES major(id)
);

2.添加表级约束

语法:[constraint 约束名] 约束类型 (字段名)

CREATE TABLE students (
    stu_id INT ,
    stu_name VARCHAR(20),
    gender CHAR(1) ,
    seat INT,
    age INT,
    majorid INT,
    PRIMARY KEY(id),
    UNIQUE(seat),
    CHECK(gender='男' or gender='女'),
    FOREIGN KEY(majorid) REFERENCES major(id)
);

三、修改表时添加约束

1.添加非空约束

ALTER TABLE students MODIFY column stu_name VARCHAR(20) NOT NULL;

2.添加默认约束

ALTER TABLE students MODIFY column age INT DEFAULT 18;

3.添加主键

ALTER TABLE students MODIFY column id INT PRIMARY KEY;
或者
ALTER TABLE students add PRIMARY KEY(id);

4.添加唯一(同3)

ALTER TABLE students MODIFY column seat INT UNIQUE;
或者
ALTER TABLE students add UNIQUE(seat);

5.添加外键

ALTER TABLE students ADD FOREIGN KEY(majorid) fk_students_major REFERENCES major(id);

四、修改表时删除约束

1.删除非空、默认约束

ALTER TABLE students DROP PRIMARY KEY;
ALTER TABLE students ;

2.删除主键、唯一、外键

ALTER TABLE students DROP PRIMARY KEY;
ALTER TABLE students DROP INDEX seat;
ALTER TABLE students DROP FOREIGN KEY fk_students_major;

【补充:标识列】

定义

标识列,又称自增长列,可以不用手动插入值,系统提供默认的序列值。

特点

  • 标志列必须和key搭配,不一定是主键
  • 一个表至多有1个标识列
  • 标识列的类型只能是数值型
  • 标识列可通过set auto_increment_increment=k;设置步长;可以通过手动插入值设置起始值

1.修改表时设置标识列

ALTER TABLE students MODIFY column id INT PRIMARY KEY AUTO_INCREMENT;

2.修改表时删除标识列

ALTER TABLE students MODIFY column id INT PRIMARY KEY;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值