数据库:约束

概述:

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确、有效性和完整性。

分类

约束是作用于表中的字段上的,在创建/修改表时可以添加约束

演示

创建表:

sql 复制代码
create table students(
    id int primary key auto_increment comment '学号',
    name varchar(20) not null unique comment '姓名',
    age int check ( age between 0 and 100) comment '年龄',
    staus char(1) default '1' comment '状态',
    gender char(1) comment '性别'
    )comment '学生表';

insert into students(name,age,staus,gender) values ('小明',18,1,'男'),
                                                   ('小红',19,0,'女'),
                                                   ('小李',21,1,'女');
insert into students(name,age,gender) values ('小王',18,'男');
insert into students(name,age,gender) values (null,18,'男'); -- 报错
insert into students(name,age,gender) values ('小赵',17,'女');
insert into students(name,age,gender) values ('小刘',-1,'男'); -- 报错但是id还是+1
insert into students(name,age,gender) values ('小刘',22,'男'); -- id=7

select * from students;

外键约束

概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

语法:

sql 复制代码
-- 添加外键
CREATE TABLE 表名(
      字段名 数据类型,
      [CONSTRAINT] [外键名称]FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

示例:

sql 复制代码
update students set id=6 where id=7;-- 修正

create table class(
    id int primary key auto_increment comment '课程号',
    cname varchar(20) not null comment '课程名',
    tname varchar(20) not null comment '任课教师姓名'
)comment '选修课';

insert into class(cname, tname) values('高等数学','王X'),
                                      ('C++','李XX'),
                                      ('线性代数','张XX'),
                                      ('英语','吴XX'),
                                      ('物理','张X'),
                                      ('化学','游XX');


alter table students add column courseid int comment '选修课id';
update students set students.courseid= case id
    when 1 then 1
    when 2 then 2
    when 3 then 3
    when 4 then 4
    when 5 then 5
    when 6 then 6
end;

-- 关联students的courseid与class的id
alter table students add constraint fk_courseid foreign key (courseid) references class(id);

-- 删除外键
alter table students drop foreign key fk_courseid;

外键约束的删除和更新行为

其中NO ACTION/RESTRICT为默认行为。

语法:

sql 复制代码
ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREIGNKEY(外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
-- ON UPDATE CASCADE ON DELETE CASCADE:更新和删除时都CASCADE
相关推荐
木木子2210 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
阿成学长_Cain14 小时前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
一嘴一个橘子15 小时前
mysql 创建表
mysql
OceanBase数据库官方博客16 小时前
OceanBase AI 时代,数据库的变与不变(技术解析与实践)
数据库·人工智能·oceanbase
阿成学长_Cain17 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
ywl47081208717 小时前
Mysql 平衡二叉树、红黑树、B树、B+树区别以及应用场景(五)
数据库·b树·mysql
IvorySQL18 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
作陪18 小时前
小白也能看懂的 SQL 零基础教程:从关系模型到事务全解
mysql
SelectDB19 小时前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_19 小时前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能