MySQL(13)常见约束

本文详细介绍了MySQL中的六大约束,包括notnull非空、default默认、primarykey主键、unique唯一、foreignkey外键以及check约束的区别和使用方法。重点讲解了列级和表级约束的添加方式,以及主键与唯一约束的对比。还提到了外键约束在关联表间的关系维护和check约束在Oracle和SQL Server的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六大约束及分类

含义:一种限制,用于限制表中的数据,为了保证表中数据的准确与可靠性。一些数据像身份证号、学号等是不可以重复的,所以应该加上约束。

在MySQL中一共有六大约束

  1. not null 非空约束,用于保障该字段的值不能为空。
  2. default 默认约束,用于保障该字段有默认值。
  3. primary key 主键约束,用于保障该字段的值具有唯一性,并且非空。
  4. unique 保障该字段的值具有唯一性,可以为空。
  5. check 检查约束 在MySQL中没效果。
  6. foreign key 外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值。像学生表的专业编号,员工表的部门编号,员工表的工种编号。

添加约束的时机是在创建表或者修改表时。

约束的添加分类

  1. 列级约束 是在create table在对应字段处添加。六大约束中外键约束没有效果。
  2. 表级约束 是在create table 所有字段的最后添加表级约束。六大约束中除了非空默认其他都支持。

创建表时添加列级约束

直接在字段名和类型后追加 约束类型即可,除了check和外键约束其余都支持。

create database students
use students

create table stuinfo(
 id int primary key,
 name varchar(20) not null,
 gender char default '男',
 seat int  unique,
 majorId int references major(id)# 外键约束
);
create table major(
id int primary key,
majorname varchar(20)
);

创建表时添加表级约束

DROP TABLE IF EXISTS stuinfo
CREATE TABLE stuinfo(
 id INT ,
 stu_name VARCHAR(20),
 gender CHAR(1),
 seat INT,
 majorId INT,
 
 CONSTRAINT pk PRIMARY KEY(id),# 主键
 CONSTRAINT uq UNIQUE(seat),
 CONSTRAINT fk_stuinfo_major  FOREIGN KEY(majorid) REFERENCES major(id)#外键
);

添加表级约束是在各个字段的最下面
constraint 约束名 约束类型(字段)
其中,constraint和约束名 可以省略。

通用写法

DROP TABLE IF EXISTS stuinfo
CREATE TABLE stuinfo(
 id INT PRIMARY KEY,
 stu_name VARCHAR(20) NOT NULL,
 gender CHAR(1),
 age INT DEFAULT 18,
 seat INT UNIQUE,
 majorId INT,

 CONSTRAINT fk_stuinfo_major  FOREIGN KEY(majorid) REFERENCES major(id)#外键
);

除了外键约束写在表级约束,其余写在列级约束。

主键和唯一的对比

  • 两者都是确保唯一性的。但主键不能为空,唯一是可以为空的。
  • 主键一个表中至多有一个,但唯一一个表中可以有多个。
  • 主键和唯一都是允许组合的,但不推荐。

外键

  • 要求在从表设置外键关系。
  • 从表的外键列的类型和主表的关联列的类型要求一致或兼容。
  • 主表的关联列必须是一个主键或唯一键
  • 插入数据时,应先插入主表,再插入从表。删除数据时,先删除从表,再删除主表。
  • 一个字段是可以加多个约束的,用空格隔开。
  • 从表的外键列可以为空,前提是主表的关联列没有设置not null。
CREATE TABLE my_class(
id INT PRIMARY KEY,#主键
NAME VARCHAR(30) NOT NULL DEFAULT ''
);

CREATE TABLE my_stu(
id INT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL DEFAULT '',
class_id INT,
FOREIGN KEY (class_id) REFERENCES my_class(id)
)

INSERT INTO my_class VALUES(100,'java');
INSERT INTO my_class VALUES(200,'web')

INSERT INTO my_stu VALUES(1,'Tom',100);
INSERT INTO my_stu VALUES(2,'Jack',200);
INSERT INTO my_stu VALUES(3,'Mary',100);

在这里插入图片描述

check约束

用于强制行数据必须满足的条件,Oracle和sql server均支持check,MySQL不支持check,只做语法校验,不会生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值