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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【数据库】MySQL数据库约束(六大约束)

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)
);

注意:

  • 在两个表中相同字段,并且外键在主表中是主键或者是唯一字段
  • 主表的内容不能随意删除、修改,因为删除、修改操作会对从表造成影响。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
142 1
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
399 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
259 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
257 0
MySQL---数据库从入门走向大神系列(五)-存储过程

推荐镜像

更多