你知道数据库有哪些约束吗?

目录

[1. NULL约束](#1. NULL约束)

[2. 唯一(UNIQUE)约束](#2. 唯一(UNIQUE)约束)

[3. 默认值(DEFAULT)约束](#3. 默认值(DEFAULT)约束)

[4. 主键约束](#4. 主键约束)

[5. 外键约束](#5. 外键约束)

[6. CHECK约束](#6. CHECK约束)


数据库约束是一种用于确保数据库中数据完整性和一致性的规则或条件。这些约束可以应用于表、列或整个数据库,以确保数据的正确性和可靠性。主要的约束类型有以下:

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。确保列中的数据是唯一的,但与主键约束不同的是,唯一约束允许空值
  • DEFAULT - 规定没有给列赋值时的默认值。 定义列的默认值,如果插入行时未提供该列的值,则将使用默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。用于限制列中数据的范围,例如,确保年龄列中的值大于等于18。

1. NULL约束

创建表时,可以指定某列不为空。比如我们想要创建一个学生表,学生表的id属性代表学生的在数据库中的编号,我们想要指定id是不可以为空的。这样我们就可以维塔加上一个非空约束。

bash 复制代码
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
 CREATE TABLE student (
    id INT NOT NULL,
    sn INT,
    name VARCHAR(20),
    qq_mail VARCHAR(20)
 );

2. 唯一(UNIQUE)约束

还是上面的例子,我们想要学生的学号(sn)为不重复的,此时就可以为数据库的id列加上一个UNIQUE约束。

bash 复制代码
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
 CREATE TABLE student (
    id INT NOT NULL,
    sn INT UNIQUE,
    name VARCHAR(20) ,
    qq_mail VARCHAR(20)
 );

3. 默认值(DEFAULT)约束

比如我们想要再插入一条学生数据的时候,想要name列暂时不添加,设定一个默认值,设定默认值为unknown。

bash 复制代码
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
 CREATE TABLE student (
    id INT NOT NULL,
    sn INT UNIQUE,
    name VARCHAR(20) DEFAULT 'unkown',
    qq_mail VARCHAR(20)
 );

4. 主键约束

这个约束就是非空加上UNIQUE。

bash 复制代码
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
 CREATE TABLE student (
    id INT NOT NULL PRIMARY KEY,
    sn INT UNIQUE,
    name VARCHAR(20) DEFAULT 'unkown',
    qq_mail VARCHAR(20)
 );

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1。

bash 复制代码
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
 id INT PRIMARY KEY auto_increment,

5. 外键约束

外键约束在数据库设计中扮演着至关重要的角色,它不仅确保了数据的完整性和一致性,还提供了建立表之间关系的有效方式。他的基本使用语法是:foreign key (字段名) references 主表(列)。

案例:

创建班级表classes,id为主键:(有使用MySQL关键字作为字段时,需要使用``来标识)

bash 复制代码
-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
 CREATE TABLE classes (
 id INT PRIMARY KEY auto_increment,
 name VARCHAR(20),
 `desc` VARCHAR(100)
 );

创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键, classes_id为外键,关联班级表id:

bash 复制代码
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
 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)
);

6. CHECK约束

CHECK约束是一种用于在插入或更新数据时验证特定条件的约束。它允许你指定一个条件,当条件为真时才允许插入或更新数据。这个条件可以是一个简单的逻辑表达式,也可以是一个复杂的函数或子查询。

bash 复制代码
drop table if exists test_user;
 create table test_user (
   id 
int,
   name varchar(20),
   sex varchar(1),
   check (sex ='男' or sex='女')
 );
相关推荐
三体世界29 分钟前
Mysql基本使用语句(一)
linux·开发语言·数据库·c++·sql·mysql·主键
Giser探索家1 小时前
低空智航平台技术架构深度解析:如何用AI +空域网格破解黑飞与安全管控难题
大数据·服务器·前端·数据库·人工智能·安全·架构
chillxiaohan1 小时前
GO学习记录五——数据库表的增删改查
数据库·学习·golang
一颗星的征途3 小时前
java循环分页查询数据,任何把查询到的数据,分批处理,多线程提交到数据库清洗数据
java·数据库·mysql·spring cloud
NightReader5 小时前
如何解决WordPress数据库表损坏导致的错误
数据库
Warren986 小时前
MySQL,Redis重点面试题
java·数据库·spring boot·redis·mysql·spring·蓝桥杯
青鱼入云6 小时前
mysql查询中的filesort是指什么
数据库·mysql
开航母的李大6 小时前
Navicat 全量&增量数据库迁移
数据库·oracle
白书宇8 小时前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源