当前位置: 首页 > news >正文

【数据库】MySQL数据库约束(六大约束)

目录

1.数据库约束

1.1约束类型 

1.2 非空约束(NOT NULL )

1.3 唯一约束(UNIQUE)

 1.4默认值约束(DEFAULT )

 1.5主键约束(PRIMARY KEY)

 1.6外键约束(FOREIGN KEY )


写在前面

  1. 文章截图均是每个代码显示的图。
  2. 数据库对代码大小写不敏感,可以大写也可以小写,不要把大小写混在一起使用,最好只使用大写或者只使用小写。

1.数据库约束

定义:约束故名思意就是对列进行限制约束。约束是在创建表的时候添加上去的,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

1.1约束类型 

  • 非空约束(NOT NULL )- 指示某列不能存储 NULL 值。
  • 唯一约束(UNIQUE) - 保证某列的每行必须有唯一的值。
  • 默认值约束(DEFAULT )- 规定没有给列赋值时的默认值
  • 主键约束(PRIMARY KEY) - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • 外键约束(FOREIGN KEY )- 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • 检查约束(CHECK) - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

约束的使用方式 :在建表时,我们只需在建立每列时,在每列的后面加上约束类型即可。

1.2 非空约束(NOT NULL )

 create table student(id int not null,sn int,name varchar(20),qq_mail varchar(20));desc student;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | NO   |     | NULL    |       |
| sn      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| qq_mail | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

上方代码就是将学生id加上了非空约束,这样学生id在填写时就不能为空了,为空会怎样,我们演示一下。

可以看出,当我们将学生id置空时,客户端报了错。若需要让以列成为必填项,这时非空约束就到了发挥作用的时候。 

1.3 唯一约束(UNIQUE)

mysql> create table student(-> id int not null,-> sn int unique,-> name varchar(20),-> sex varchar(5)-> );
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| sn    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(5)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

我们在学号sn列加上了唯一约束,唯一约束的含义是:这一列不能出现重复的数据,例如(当有一个1时,我们又去添加一个1,这时就会报错。)

 1.4默认值约束(DEFAULT )

 create table student (id int not null,sn int unique,name varchar(20) default '无名氏',sex varchar(5));desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| sn    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | 无名氏  |       |
| sex   | varchar(5)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

添加默认值约束的列在填写时为空时(这时需要添加到列名),会默认填入设置好的默认值。

还可以使用MySQL给的关键字(default),填这个也是会得到设置的默认值。

 1.5主键约束(PRIMARY KEY)

主键约束是非空约束和唯一约束的合集,它满足这两个约束的所有条件。 

create table student(id int primary key auto_increment,sn int unique,name varchar(20) default '无名氏',sex varchar(5));desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| sn    | int(11)     | YES  | UNI | NULL    |                |
| name  | varchar(20) | YES  |     | 无名氏  |                |
| sex   | varchar(5)  | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

注意:对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。一个表中只能有一个主键。

 例如:

 insert into student values (1,10,'张三','男'),(null,11,'李四','男'),(100,12,'小红','女'),(null,13,'王五','男');

 代码先设置id是1,之后插入一条id设为空,因为有自增主键,客户端将这个自动设置为2,

当设置id为100时,再将id设为空,这次id没有根据顺序排列,而是用最大值+1编号。

 1.6外键约束(FOREIGN KEY )

外键用于关联其他表的主键或唯一键,对于两个具有关联关系的表来说,关联字段所在的表就是主表(父表),外键所在的表就是从表(子表)。

语法格式:

foreign key (字段名) references 主表(列)

 示例:

  • 创建班级表classes,id为主键 :
CREATE TABLE classes (id INT PRIMARY KEY auto_increment,name VARCHAR(20),`desc` VARCHAR(100)
);
  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);

 注意:

  • 在两个表中相同字段,并且外键在主表中是主键或者是唯一字段
  •  主表的内容不能随意删除、修改,因为删除、修改操作会对从表造成影响。
http://www.lryc.cn/news/36119.html

相关文章:

  • 使用inotify监视文件后台运行收到 SIGTTIN 信号的原因及解决方案
  • L3-021 神坛
  • ArrayList和LinkedList区别
  • 977. 有序数组的平方 1. 两数之和 349. 两个数组的交集
  • Mysql问题:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
  • Idea springboot springCloud热加载热调试常用的两种方式
  • 银河麒麟V10SP1高级服务器版本离线RPM方式升级openssl openssh 自动化升级系统补丁实战实例全网唯一
  • 2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻
  • Vue3这样子写页面更快更高效
  • 锐捷AP设置限速(胖模式)
  • 聚势合力,电巢与SDIA协会“战略合作签约仪式”圆满落成
  • Linux安装后基础配置--网络--ssh--基本软件
  • 剑指 Offer 66. 构建乘积数组
  • 1.1 误差的来源
  • python进程间通信
  • 麒麟Linux操作系统磁盘策略永久调整为deadline
  • yum安装Docker(CentOS7.9)
  • c++错误 free(): double free detected
  • 12升400V 升压DC-DC高压脱毛仪解决方案SC3671
  • h264格式分析
  • 【数据分析师求职面试指南】实战技能部分
  • 树与二叉树(二叉树的表示,性质,遍历,还原)
  • mysql 源码学习理解记录--lock_rec_move
  • markdown(.md)常用语法
  • 千言数据集赛题介绍
  • 信息技术最全总结(备考教资)
  • opencv识别车道线(霍夫线变换)
  • MySQL的同步数据Replication功能
  • 2023年全国最新高校辅导员精选真题及答案17
  • 中文代码92