N天爆肝数据库——MySQL(3)下

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: N天爆肝数据库——MySQL(3)下

约束:

概念

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

目的

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

分类:

非空约束:NOT NULL 限制该字段的数据不能为null
唯一约束: UNIQUE 保证该字段的所有数据都是唯一、不重复的
主键约束:PRRIMARY KEY 主键是一行数据的唯一标识,要求非空且唯一
默认约束:DEFAULT 保存数据时,如果未指定该字段的值,则采用默认值
检查约束:CHECK 保证字段值满足某一个条件
外键约束:FOREIGN KEY 用来让两张表的数据之间建立连接,保证数据的一致性
    和完整性

外键约束:

概念

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

语法:

添加外键

  CREATE TABLE 表名(
  字段名 数据类型,
  ...
  [CONSTRAINT][外键名称]FOREIGN(外键字段名)REFERENCES 主表(主表列名)
);
ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREING KEY(外键字段名) REFERENCES 主表(主表列名); 

删除外键

ALTER TABLE 表名DROP FOREIGN  KEY 外键名称;

删除/更新行为

NO ACTION
RESTRICT
CASCADE
SET NULL
SET DEFAULT
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREING KEY (外键名称)REFERNCES 主表名(主表名段名)ON UPDATE CASCADE ON DELETE CASCADE;

多表关系

概述

各个表结构之间相互存在联系有:一对多,多对多,一对一

一对多(多对一)

实现:在多的一方建立外键,指向一的一方的主键
举例:员工和部门

多对多

实现:建立第三张中间表,中间表至少包含两个外键,费别关联两方的主键
案例:学生于课程

一对一

实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
案例:用户与用户详细信息的关系

多表查询

概述:指从多张表中查询数据

笛卡尔积:在多表查询时,需要消除无效的笛卡尔积

分类

连接查询

    内连接:相当于查询A,B交集部分数据
  外连接
    左外连接:查询左表所有数据,以及两张表交集部分数据
    右外连接:查询游标所有数据,以及两张表交集部分数据
  自连接:当前表与自身的连接查询,自连接必须使用表别名
  子查询

多表查询-内连接

隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

显示内连接

SELECT 字段列表 FROM 表1[INNER]JOIN表2 ON连接条件...;

注意

内连接查询时两张表交集的部分

多表查询-外连接

左外连接

 SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN表2 ON条件...;
  相当于查找表1(左表)的所有数据,包含表1和表2交集部分的数据

多表查询-自连接

语法

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON条件...;
自连接查询,可以是内连接查询,也可以是外连接查询。

联合查询-union,union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

语法:

SELECT 字段列表 FROM 表A...
UNION[ALL]
SELECT 字段列表 FROM 表B...;

注意:

 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。


子查询

概念

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
 SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2);
  子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。

根据子查询结果不同,分为:

标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)

根据子查询位置,分为

WHERE之后
FROM之后
SELECT之后
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 存储 关系型数据库
数据库-MySQL-01(一)
数据库-MySQL-01(一)
13 4
|
1天前
|
SQL 存储 关系型数据库
数据库-MySQL-03
数据库-MySQL-03
8 0
|
1天前
|
SQL 数据库
数据库-MySQL-02(二)
数据库-MySQL-02(二)
5 0
|
1天前
|
SQL 关系型数据库 MySQL
数据库-MySQL-02(一)
数据库-MySQL-02(一)
8 0
|
1天前
|
SQL 存储 数据库
数据库-MySQL-01(二)
数据库-MySQL-01(二)
6 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
23 0
|
9天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
32 6
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
8天前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
|
9天前
|
固态存储 关系型数据库 MySQL
"惊!20亿数据秒速入MySQL,揭秘数据库极速插入的黑科技,你不可不知的绝密技巧!"
【8月更文挑战第11天】面对20亿级数据量,高效插入MySQL成为挑战。本文探讨优化策略:合理设计数据库减少不必要的字段和索引;使用批量插入减少网络往返;优化硬件如SSD和内存及调整MySQL配置;并行处理加速插入;附Python示例代码实现分批导入。这些方法将有效提升大规模数据处理能力。
26 2