MySQL数据约束和关联查询
1 默认值deafult:在建表的时候字段后使用 default ,默认值字段允许为null。
2 非空 not null:在建表的时候字段后使用 not null。
非空字段必须赋值,并且不能是null。
3 唯一:主键和unique 字段必须唯一。
注意:unique 对 null 值不起作用。只对有值的字段数据进行约束。
4 主键primary key:就是not null 和 nuique的联合。
5 自增长auto_increment:
6 外键:约束两张表,主要是解决数据冗余。
alter table tablename1
add foreign key column name1
references tablename2 column name2
on delete restrict/cascade/set null;
在建表的时候创建外键,在添加完字段后 foreign key(column ame) reference table name2 (column name2) on delete cascade/restrict/set null。
注意:
1)被约束的表为附表,约束别人的表是主表,外键设置在附表上。
2)添加数据是先添加主表数据,再添加附表数据
3)不能直接修改主表,先修改附表数据。
4)删除数据,先删除附表数据,再删除主表数据。
二、数据库表的设计原则,三大范式
第一范式:要求表中的每个字段必须是不可分割的独立单元,第一范式(确保每列保持原子性)
第二范式:要求每张表表达一个思想,表的每个字段都和主键有依赖,第二范式(确保表中的每列都和主键相关)
第三范式:要求每张表主键之外的每个字段都只能和主键有直接依赖关系,第三范式(确保每列都和主键列直接相关,而不是间接相关)
三、关联查询
查询规则:1)确定查询那些表 2)确定查询哪些字段 3)表与表之间的连接条件
例如:
表1: student
CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL, sgender CHAR(2) NOT NULL, sage SMALLINT NOT NULL, sphone VARCHAR(11), address VARCHAR(400));
表2:englishScore
CREATE TABLE englishScore(
id INT PRIMARY KEY AUTO_INCREMENT,
sscore SMALLINT,
sid INT NOT NULL,
FOREIGN KEY(sid) REFERENCES student(id) ON DELETE CASCADE
);
查询学生姓名和成绩
3.1 内连接查询,两张表或多张表的连接条件都非空
SELECT sname, sscore
FROM student S, englishScore ES
WHERE S.id = ES.sid;
相当于是使用下面语句执行查询
SELECT sname, sscore
FROM student S
INNER JOIN englishScore ES
ON S.id = ES.sid;
3.2 左外连接
SELECT S.sname, ES.sscore
FROM student S
LEFT JOIN englishScore ES
ON S.id = ES.sid;
3.3 右外连接
SELECT S.sname, ES.sscore
FROM student S
RIGHT JOIN englishScore ES
ON S.id=ES.sid;
如果觉得有用,想赞助一下请移步赞助页面:赞助一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)