mysql多表操作与练习笔记
MySQL中的高级查询与多表操作技巧

MySQL中的高级查询与多表操作技巧在数据库管理系统中,MySQL是一个被广泛使用的关系型数据库管理系统。
它提供了丰富的查询功能和多表操作技巧,使得用户能够更加灵活地操作数据,实现复杂的业务需求。
在本文中,我们将重点介绍MySQL中的高级查询与多表操作技巧,帮助读者更好地利用MySQL进行数据处理。
一、连接查询在MySQL中,连接查询是一种常见的多表查询操作。
它可以通过连接两个或多个表,根据关联条件同时从多个表中获取数据。
连接查询可以大大提高数据查询的效率和准确性。
1. 内连接查询内连接查询是连接查询中最常用的一种类型。
它通过使用INNER JOIN关键字将两个或多个表连接在一起,并根据连接条件获取匹配的数据。
例如,我们有一个学生表和一个成绩表,可以使用内连接查询获取学生表和成绩表中相关联的数据。
```sqlSELECT , scores.scoreFROM studentsINNER JOIN scores ON students.id = scores.student_id;```2. 左连接查询左连接查询是连接查询中另一种常见的类型。
它通过使用LEFT JOIN关键字连接两个或多个表,并返回左表中所有的记录和右表中与之匹配的记录。
如果右表中没有与左表匹配的记录,将返回NULL值。
例如,我们有一个部门表和一个员工表,可以使用左连接查询获取所有部门及其员工的信息。
```sqlSELECT , FROM departmentsLEFT JOIN employees ON departments.id = employees.department_id;```3. 右连接查询右连接查询和左连接查询类似,但是返回右表中所有的记录和左表中与之匹配的记录。
如果左表中没有与右表匹配的记录,将返回NULL值。
例如,我们有一个订单表和一个客户表,可以使用右连接查询获取所有订单及其客户的信息。
```sqlSELECT orders.order_num, FROM ordersRIGHT JOIN customers ON orders.customer_id = customers.id;```4. 全连接查询全连接查询是连接查询中最常用的一种类型。
mysql数据库多表查询的语法

mysql数据库多表查询的语法在MySQL中,多表查询是一种用于从多个表中获取数据的方法。
通过使用适当的语法和关键字,我们可以结合多个表的信息以满足特定的数据需求。
多表查询的语法如下:SELECT 列名1, 列名2, ...FROM 表名1JOIN 表名2 ON 表名1.列名 = 表名2.列名WHERE 条件;其中,SELECT语句用于指定我们要从多个表中选择的列。
我们可以指定多个列,使用逗号进行分隔。
FROM子句用于指定我们要从中检索数据的表。
JOIN关键字用于将两个或多个表连接起来。
我们需要指定连接的条件,即两个表之间的列的对应关系。
这可以通过使用ON关键字和等式条件完成。
WHERE子句可选,用于筛选满足特定条件的行。
我们可以使用各种逻辑运算符和比较运算符来定义条件。
以下是一个简单的示例,演示如何使用多表查询:SELECT orders.order_id, customers.customer_nameFROM ordersJOIN customers ON orders.customer_id = customers.customer_idWHERE order_date >= '2022-01-01';在上述示例中,我们从"orders"表和"customers"表中选择订单ID和客户名称。
我们使用"JOIN"关键字将这两个表连接起来,连接条件是订单表中的"customer_id"列与客户表中的"customer_id"列相等。
最后,我们使用"WHERER"子句筛选出日期在2022年1月1日及以后的订单。
通过理解和掌握MySQL多表查询的语法,我们可以更好地利用数据库中的多个表来满足我们的数据检索需求。
MySQL学习笔记:生成一个时间序列

博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
MySQL学 习 笔 记 : 生 成 一 个 时 间 序 列
今天遇到一个需求是生成以下表格的数据,一整天24小时,每秒一行数据。
寻找颇旧,找到另外两个实现的例子,暂且学习一翻。另一个见另外一篇。
其中,SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1是为了生成一个虚拟的表格,这样子可以生 成一样多的行数,此次可用T表代替,只需满足T表数据量大于所需即可。
SELECT DATE_ADD('2018-01-01',INTERVAL @i := @i + 1 DAY) AS DATE FROM
SELECT DATE_ADD('2018-01-01',INTERVAL @i := @i + 1 DAY) AS DATE FROM (SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1) AS tmp, (SELECT @i := -1) t;
MySQL教程:多表操作和批处理方法

MySQL教程:多表操作和批处理方法多表操作在一个数据库中,可能存在多个表,这些表都是相互关联的。
我们继续使用前面的例子。
前面建立的表中包含了员工的一些基本信息,如姓名、性别、出生日期、出生地。
我们再创建一个表,该表用于描述员工所发表的文章,内容包括作者姓名、文章标题、发表日期。
1、查看第一个表mytable的内容mysql> select * from mytable;+----------+------+------------+-----------+| name | sex | birth | birthaddr |+----------+------+------------+-----------+| abccs | f | 1977-07-07 | china || mary | f | 1978-12-12 | usa || tom | m | 1970-09-02 | usa |+----------+------+------------+-----------+2、创建第二个表title(包括作者、文章标题、发表日期)mysql> create table title(writer varchar(20) not null,-> title varchar(40) not null,-> senddate date);向该表中填加记录,最后表的内容如下:mysql>select * from title;+--------+-------+------------+| writer | title | senddate |+--------+-------+------------+| abccs | a1 | 2000-01-23 || mary | b1 | 1998-03-21 || abccs | a2 | 2000-12-04 || tom | c1 | 1992-05-16 || tom | c2 | 1999-12-12 |+--------+-------+------------+5 rows in set (0.00sec)3、多表查询现在我们有了两个表: mytable 和title。
宋红康mysql高级篇笔记

宋红康mysql高级篇笔记MySQL 是一款广泛应用于互联网领域的关系型数据库管理系统。
它的高级功能和优势使得它成为互联网开发者的首选。
本文将分享一些关于 MySQL 高级篇的笔记,涵盖了一些互联网技术介绍、互联网商业和技术应用方面的内容。
一、索引优化索引是提高数据库查询效率的重要手段之一。
在 MySQL 中,使用合适的索引可以显著提升查询性能。
首先,我们需要了解不同类型的索引,如主键索引、唯一索引和普通索引等。
其次,根据具体应用场景,我们可以使用覆盖索引、前缀索引、联合索引等技术进行索引优化。
此外,我们还要注意索引的维护和管理,及时进行索引的重建和优化。
二、查询优化在互联网应用中,查询是最常见的数据库操作之一。
如何编写高效的查询语句,能够快速地获取所需的数据,是每个开发者都应该关注的问题。
本节将介绍一些查询优化的技巧,例如避免使用通配符查询、合理使用 LIMIT 关键字、使用 EXPLAIN 分析查询执行计划等。
三、事务管理事务是保证数据库操作一致性和完整性的重要手段。
MySQL 支持事务的 ACID 特性,可以确保多个操作的原子性、一致性、隔离性和持久性。
本节将详细介绍如何使用事务管理,包括事务的开启、提交和回滚,以及事务并发控制的方法。
四、高级数据操作除了基本的增删改查操作,MySQL 还提供了一些高级数据操作功能,方便开发者完成复杂的数据处理任务。
本节将介绍如何使用子查询、联合查询、分组查询和多表操作等技术,实现更灵活和高效的数据操作。
五、存储引擎选择MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。
不同的存储引擎具有不同的特点和适用场景。
本节将比较各种存储引擎的优缺点,并给出存储引擎选择的建议。
六、高可用性和容灾备份在互联网应用中,数据库的高可用性和容灾备份是非常重要的。
本节将介绍如何使用主从复制、读写分离、故障转移和数据备份等技术,提高数据库的稳定性和可用性。
mysql基础笔记”

mysql基础笔记”MySQL是一种开源的关系型数据库管理系统,被广泛应用于Web 应用程序的数据存储和管理。
下面是关于MySQL基础的一些笔记:1. 数据库,MySQL是基于数据库的,数据库是一个用于存储和管理数据的容器。
可以创建多个数据库,每个数据库可以包含多个表。
2. 表,表是数据库中的一个组成部分,用于存储数据。
表由行和列组成,每一列代表一个数据字段,每一行代表一条记录。
3. 字段,字段是表中的列,用于存储特定类型的数据。
每个字段都有一个数据类型,如整数、字符串、日期等。
4. 主键,主键是表中的一列或一组列,用于唯一标识表中的每一行。
主键的值不能重复,且不能为空。
5. 外键,外键是表中的一列,用于建立表与表之间的关系。
外键与其他表中的主键相关联,用于确保数据的完整性和一致性。
6. 查询,查询是从数据库中检索数据的操作。
可以使用SQL语句来编写查询,SQL是结构化查询语言。
7. 插入,插入是向表中添加新记录的操作。
可以使用INSERT语句来插入数据。
8. 更新,更新是修改表中现有记录的操作。
可以使用UPDATE语句来更新数据。
9. 删除,删除是从表中删除记录的操作。
可以使用DELETE语句来删除数据。
10. 索引,索引是对表中的一列或多列进行排序的结构,用于加快数据的检索速度。
可以根据索引进行快速的查询操作。
11. 视图,视图是基于一个或多个表的查询结果,可以像表一样使用。
视图可以简化复杂的查询操作,提供更方便的数据访问方式。
12. 事务,事务是一组数据库操作的集合,要么全部执行成功,要么全部回滚。
事务可以确保数据的一致性和完整性。
13. 存储过程,存储过程是一组预编译的SQL语句,可以在数据库中进行复杂的操作。
存储过程可以提高数据库的性能和安全性。
14. 触发器,触发器是与表相关联的特殊类型的存储过程,可以在插入、更新或删除数据时自动执行。
以上是关于MySQL基础的一些笔记,希望对你有所帮助。
《快速念咒:MySQL入门指南与进阶实战》笔记

《快速念咒:MySQL入门指南与进阶实战》阅读记录1. 第一章数据库基础在开始学习MySQL之前,了解一些数据库的基础知识是非常重要的。
数据库是一个用于存储和管理数据的计算机软件系统,它允许用户通过关键字或特定的查询语言来检索、更新和管理数据。
在数据库中,数据是以表格的形式进行组织的,每个表格都包含了一组相关的数据项,这些数据项被称为记录。
表(Table):表是数据库中存储数据的基本单位。
每个表都有一个唯一的名称,并由行(Row)和列(Column)组成。
每一行代表一个数据记录,每一列代表一个特定的数据属性。
字段(Field):字段是表中的一列,代表了数据的一种属性。
每个字段都有一个唯一的名称和一个数据类型,用于定义该字段可以存储的数据种类。
主键(Primary Key):主键是表中的一个特殊字段,用于唯一标识表中的每一行记录。
主键的值必须是唯一的,且不能为NULL。
外键(Foreign Key):外键是一个表中的字段,它的值引用了另一个表的主键值。
外键用于建立两个表之间的联系,确保引用完整性。
索引(Index):索引是一种数据库优化技术,用于提高查询性能。
通过创建索引,数据库可以更快地定位到表中的特定记录,而不必扫描整个表。
SQL(Structured Query Language):SQL是用于与数据库进行交互的编程语言。
它包括用于数据查询、插入、更新和删除的操作符和语法结构。
理解这些基本概念是学习MySQL的前提。
通过掌握SQL语言的基本语法和操作,你将能够有效地管理和操作数据库中的数据。
在接下来的章节中,我们将深入探讨MySQL的具体应用,包括如何创建和管理数据库、表、以及如何执行复杂的查询操作。
2. 第二章数据库设计《快速念咒:MySQL入门指南与进阶实战》是一本全面介绍MySQL 数据库的书籍,其中第二章详细阐述了数据库设计的基础知识和实践技巧。
在这一章节中,作者首先介绍了数据库设计的基本概念和目标,包括数据模型、实体关系模型(ER模型)等,并解释了如何通过这些模型来描述现实世界中的数据和业务逻辑。
(转)MySQL学习笔记-redolog和binlog两阶段提交

(转)MySQL学习笔记-redolog和binlog两阶段提交原⽂:https:///qq_38937634/article/details/113100472?utm_term=mysql%E6%97%A5%E5%BF%97%E4%B8%A4%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-113100472&spm=3001.4430⽂章⽬录MySQL学习笔记-redo log 和 binlog&两阶段提交1.笔记图2.⼀条更新语句是如何被执⾏的3.redo log4.binlog5.为什么要有两份⽇志?6.更新语句内部执⾏流程7.两阶段提交MySQL学习笔记-redo log 和 binlog&两阶段提交前⾯学习了⼀条查询语句的执⾏过程⼀般是经过连接器、分析器、优化器、执⾏器等功能模块,最后到达存储引擎,⽽⼀条更新语句的执⾏流程也会按照查询查询语句的流程⾛⼀遍,但更新语句会涉及到两个⽇志模块,分别是 redo log 和 binlog,这篇⽂章学习⼀下这两个⽇志的作⽤。
1.笔记图2.⼀条更新语句是如何被执⾏的连接器:负责跟客户端建⽴连接、获取权限、维持和管理连接分析器:词法分析:识别出 SQL 语句⾥⾯的字符串分别代表什么,把 SQL 语句中字符串 T 识别成“表名 T,把字符串 ID 识别成列 ID语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断你输⼊的这个 SQL 语句是否满⾜ MySQL 语法优化器:优化器是在表⾥⾯有多个索引的时候,决定使⽤哪个索引,或者在⼀个语句有多表关联(join)的时候,决定各个表的连接顺序执⾏器:调⽤存储引擎提供的接⼝3.redo logWAL(Write-Ahead Logging):先写⽇志,再写磁盘当有记录需要更新时,InnoDB 引擎就会先把记录写到 redo log,并更新内存,这时更新就算完成InnoDB 的 redo log 是固定⼤⼩的,可以配置为⼀组 4 个⽂件,每个⽂件的⼤⼩是 1GB,从头开始写,写到末尾就⼜回到开头循环写Tips:write pos 表⽰当前记录的位置,写到第 3 号⽂件末尾后就回到 0 号⽂件开头,checkpoint 表⽰当前要擦除的位置,擦除记录前要把记录更新到数据⽂件如果 write pos 追上 checkpoint,表⽰ redo log 满了,这时不能再执⾏新的更新,得停下来先擦掉⼀些记录,把 checkpoint 推进⼀下crash-safe:InnoDB 就可以保证即使数据库发⽣异常重启,之前提交的记录都不会丢失4.binlogMySQL Server 层也有⾃⼰的⽇志,称为归档⽇志(binlog),binlog ⽇志只能⽤于归档redo log 是 InnoDB 引擎特有的,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使⽤redo log 是物理⽇志,记录的是在某个数据页上做了什么修改,binlog 是逻辑⽇志,记录的是这个语句的原始逻辑,⽐如给 ID=2 这⼀⾏的 c 字段加 1redo log 是循环写的,空间固定会⽤完,binlog 是可以追加写⼊的,binlog ⽂件写到⼀定⼤⼩后会切换到下⼀个,并不会覆盖以前的⽇志5.为什么要有两份⽇志?最开始 MySQL ⾥并没有 InnoDB 引擎,MyISAM 没有 crash-safe 的能⼒,binlog ⽇志只能⽤于归档InnoDB 是另⼀个公司以插件形式引⼊ MySQL 的,使⽤另外⼀套⽇志系统 redo log 来实现 crash-safe 能⼒6.更新语句内部执⾏流程update T set c=c+1 where ID=2执⾏器先找引擎取 ID=2 这⼀⾏,ID 是主键,引擎直接⽤树搜索找到这⼀⾏,如果 ID=2 这⼀⾏所在的数据页本来就在内存中,就直接返回给执⾏器,否则,需要先从磁盘读⼊内存,然后再返回执⾏器拿到引擎给的⾏数据,把这个值加上 1,⽐如原来是 N,现在就是 N+1,得到新的⼀⾏数据,再调⽤引擎接⼝写⼊这⾏新数据引擎将这⾏新数据更新到内存中,同时将这个更新操作记录到 redo log ⾥⾯,此时 redo log 处于 prepare 状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mysql多表操作与练习数据库备份与恢复◆数据库备份◆数据库恢复多表操作◆多表设计◆外键介绍与创建◆多表查询介绍◆多表查询-内连接◆多表查询-外连接◆多表查询-子查询SQL练习【内容:数据库备份与恢复】数据库备份数据库的备份是指将数据库转换成对应的sql文件。
数据库导出sql脚本的命令如下:●mysqldump –u用户名–p密码数据库名>生成的脚本文件路径;以上备份数据库的命令中需要用户名和密码,即表明该命令要在用户没有登录的情况下使用数据库恢复数据库的恢复指的是使用备份产生的sql文件恢复数据库,即将sql文件中的sql语句执行就可以恢复数据库内容。
因为数据库备份只是备份了数据库内容,所以备份产生的sql文件中没有创建数据库的sql语句,在恢复数据库之前需要自己动手创建数据库。
●在数据库外恢复mysql -u root -p 数据库名< 文件路径注意:要求数据库必须先创建出来.●.在数据库内恢复source SQL脚本路径:使用这种方式恢复数据,首先要登录数据库【重点总结】备份Mysqldump –u root –p abc mydb>c:/mydb.sql恢复1.mysql –u root –p mydb<c:/mydb.sql2.source c:/mydb.sql掌握多表设计掌握外键的作用及创建方式了解多表查询原理及迪卡尔积掌握内连接掌握外连接掌握子查询【内容:多表操作】多表设计当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。
例如部门、员工都是系统中的实体。
概念模型中的实体最终会成为Java中的类、数据库中的表。
今天我们需要了解的概念模型包括以下两个:●对象模型:针对java中的实体类,例如我们之前学习的domain层中的User类等;●关系模型:对应数据库中的表。
在java中有以下三个关系描述:●is a:例如猫是动物,表示继承关系;●has a:例如人有两只手,表示的是类与成员的关系;●use a:表示类与方法之间的关系;我们今天主要关注的是第二个关系:类与成员的关系。
这种关联关系可以分为如下三种:●一对一关联:例如身份证与人就是一对一的关系,一个人只有一个身份证,一个身份证号只属于一个人。
●一对多关联:例如用户与订单,一个用户可以拥有多个订单,多个订单可以属于同一个用户,这是一个很明显的一对多关联。
●多对多关联:例如商品与订单,一个订单中可以包含多个商品,而一个商品也可以存在于多个订单中,这就是一个多对多关联。
概念模型在java中对应这实体类,在实体类中使用成员变量完成关联关系,而且一般都是双向关联,以下是java中实体类与成员之间的关联关系,如下所示:一对一关联//身份证类一的一方public class IDCard {private Person person; //身份证关联人类一对一}//人类一的一方public class Person {private IDCard idcard; //人类关联身份证类一对一}一对多关联//用户一的一方public class User {private List<Order> orders; //用户可以有多个订单,在用户中关联订单}//订单多的一方public class Order {private User user; //多个订单可以属于一个用户,在订单中关联用户}多对多关联// 订单多的一方public class Order {private List<Product> products;//订单中可以包含多个商品,订单关联商品// 商品多的一方public class Product {private List<Order> orders;//一个商品可以包含在多个订单中在商品关联订单}外键约束概念模型在数据库中就对应数据表,那么表与表之间的关系也包括:一对一,一对多,多对多。
而表与表之间关系是通过外键来维护的。
外键约束特性如下:●外键必须是另一表或自身表的主键的值;●外键可以重复;●外键可以为空;●一张表中可以有多个外键。
表之间关联关系●一对一person表CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT,NAME V ARCHAR(20) -- 姓名)idcard表CREATE TABLE idcard(id INT PRIMARY KEY AUTO_INCREMENT,num V ARCHAR(20) -- 身份证号)上述是我们创建的person表与idcard表,它们之间是一对一关系,那么我们怎样来描述一个人只有一个身份证,而一个身份证只能属于一个人哪?我们只需要在任意一张表中添加一个外键字段,与主表中的主键字段对应就可以描述其一对一的关系。
person表CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT,NAME V ARCHAR(20), -- 姓名idcard_id int)idcard表CREATE TABLE idcard(id INT PRIMARY KEY AUTO_INCREMENT,num V ARCHAR(20), -- 身份证号pid int)●一对多用户表id INT PRIMARY KEY AUTO_INCREMENTNAME V ARCHAR(20))订单表CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT,price DOUBLE,)上述是订单与用户表,一个用户是可以有多个订单的,它们是很明显的一个一对多(多对一)的关系,那么我们怎样在表中描述它们的对应关系。
CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENTNAME V ARCHAR(20))CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT,price DOUBLE,uid INT)多对多订单表CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT,price DOUBLE)商品表CREATE TABLE products(id INT PRIMARY KEY AUTO_INCREMENT,NAME V ARCHAR(30))订单与商品之间是一个很明显的多对多关系,那么我们怎样在表中描述它们的关系订单表CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT,price DOUBLE)商品表CREATE TABLE products(id INT PRIMARY KEY AUTO_INCREMENT,NAME V ARCHAR(30))订单与商品关联表-中间表oid INT,pid INT,PRIMARY KEY(oid,pid))总结:对于一对一关系,我们在表中描述时,可以在任意一方描述对于一对多关系,我们在表中描述时,在多的一方描述对于多对多关系,我们在表中描述时,会产生一个中间表外键约束作用:通过外键约束可以保证数据的完整性。
我们以用户与订单(一对多关联)来说明一下关于外键约束作用:-- 用户表CREATE TABLE USER(uid INT PRIMARY KEY AUTO_INCREMENT, -- 用户编号NAME V ARCHAR(20) -- 用户姓名)-- 订单表CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT, -- 订单编号money DOUBLE, -- 订单总价receiveraddress V ARCHAR(50), -- 订单收货地址uid INT -- 用户id)我们向表中插入数据INSERT INTO USER V ALUES(NULL,"tom");INSERT INTO USER V ALUES(NULL,"fox");INSERT INTO orders V ALUES(NULL,1000,"北京",1);INSERT INTO orders V ALUES(NULL,2000,"上海",1);INSERT INTO orders V ALUES(NULL,3000,"广州",2);INSERT INTO orders V ALUES(NULL,4000,"深圳",2);通过数据很明显可以看出,tom有两个订单,订单编号为1,2.fox有两个订单,订单编号为3,4 那么我们执行下面这条sql:DELETE FROM USER WHERE uid=1;这时,我们会发现,在user表中已经将uid=1的用户删除了,但是在orders表中还存在uid=1的用户的订单,破坏了数据的完完整性。
(不应该出现无用户的订单)那么如果我们修改一下表结构,将orders表中的uid设置成外键,在看一下结果。
对于添加外键方式我们可以在创建表时添加,也可以在表创建后在添加外键。
●表创建后添加外键ALTER TABLE orders ADD CONSTRAINT FK_UID FOREIGN KEY(uid) REFERENCES USER(uid);注意:上面操作中已经将uid=1的用户删除了,所以在添加外键时,会报错,将数据重新添加或重新建表就可以。
●创建表时指定外键CREATE TABLE orders(id INT PRIMARY KEY AUTO_INCREMENT, -- 订单idmoney DOUBLE, -- 订单总价receiveraddress V ARCHAR(50), -- 订单收货地址uid INT, -- 用户idCONSTRAINT FK_UID FOREIGN KEY orders(uid) REFERENCES USER(uid) )当我们给orders表中的uid添加外键后,我们在执行DELETE FROM USER WHERE uid=1;会发现报错Query : delete from user where uid=1Error Code : 1451Cannot delete or update a parent row: a foreign key constraint fails (`mydbtest`.`orders`, CONSTRAINT `FK_UID` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`))原因就是因为我们添加了外键,所以我们在删除主表中数据时,要先将子表中数据删除后,才可以删除主表数据。