指定条件下更新数据
update student a, score b SET b.stuscore = 100 WHERE
a.stuid=b.stuid and a.stuname=‘赵雷’ and b.courseid=0002
#单表删除
delete from score where stuscore = 64 and courseid=0001 and stuid=0001
多表删除
delete a, b from student as a LEFT JOIN score as b on a.stuid=b.stuid
where a.stuname=‘赵雷’
and b.courseid=0002 and b.stuscore=100
1、基础增删改查:
语法:
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
DELETE FROM table_name [WHERE Clause]
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
- insert into account (name, money) values ("abab", 200)
- select * from account
- delete from account where id =7
- update account set name ="dadada" where id='2'
2、多表版本增删改:
更新方法一:
UPDATE table1
SET column1 = column2
WHERE EXISTS (
SELECT * FROM table2
WHERE table1.id = table2.table1_id AND table2.column3 = 'value'
);
更新方法二:
UPDATE table1
JOIN table2 ON table1.id = table2.table1_id
SET table1.column1 = table2.column2
WHERE table2.column3 = 'value';
2.1、两个表关联插入数据
- 使用子查询和 VALUES
sqlCopy CodeINSERT INTO table1 (column1, column2)
SELECT column3, column4
FROM table2
WHERE column5 = 'value'
UNION ALL
VALUES (value1, value2), (value3, value4);
上述语句中,通过子查询 SELECT column3, column4 FROM table2 WHERE column5 = 'value'
选择需要插入的数据行,并将其与手动指定的数值集合进行合并(UNION ALL)。手动指定的数值集合使用 VALUES 语法进行定义。
- 使用 JOIN 和 VALUES
sqlCopy CodeINSERT INTO table1 (column1, column2)
SELECT table2.column3, table2.column4
FROM table1
JOIN table2 ON table1.id = table2.table1_id
UNION ALL
VALUES (value1, value2), (value3, value4);
此示例中,使用 JOIN 操作将需要插入的表 table1
和其他表 table2
进行关联查询,并通过关联条件 table1.id = table2.table1_id
来选择需要插入的数据行。然后将其与手动指定的数值集合进行合并(UNION ALL),手动指定的数值集合同样使用 VALUES 语法进行定义。
2.2 两个表关联删除数据
- 使用子查询
使用子查询的方式可以先根据另一个表的条件查询需要删除的数据行,然后再将这些数据行从当前表中删除。简单示例如下:
sqlCopy CodeDELETE FROM table1 WHERE column1 IN (
SELECT column1 FROM table2 WHERE column2 = 'value'
);
上述 SQL 语句中,我们使用子查询 SELECT column1 FROM table2 WHERE column2 = 'value'
内部选择满足条件的数据行的列,然后在外部将其传递给 DELETE 语句的 WHERE 子句,以确定要从当前表 table1
中删除的数据行。
- 使用 JOIN
另一种删除数据的方式是使用 JOIN 操作来确定要删除的数据行,然后使用 DELETE 语句从当前表中删除这些数据。简单示例如下:
sqlCopy CodeDELETE table1 FROM table1
JOIN table2 ON table1.id = table2.table1_id
WHERE table2.column2 = 'value';
上述 SQL 语句中,我们使用 JOIN 操作将需要删除的表 table1
和其他表 table2
进行关联,并在关联条件 table1.id = table2.table1_id
中指定需要删除的数据行。然后在 WHERE 子句中进一步过滤数据行,以确定要从当前表 table1
中删除的数据行。
2.3 、其他常见基础语法
1. 复制表结构及其数据:
create table table_name_new as select * from table_name_old
2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
3. 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
3、MySQL数据库执行原理
- 连接数据库 在使用 MySQL 之前,需要先使用合适的客户端工具连接到数据库服务器。
- 解析 SQL 语句 当客户端发送 SQL 语句给 MySQL 服务器后,MySQL 服务器会首先对 SQL 语句进行词法分析、语法分析等操作,以确定 SQL 语句的正确性和合法性。
- 查询优化器 MySQL 服务器将优化 SQL 语句的执行计划,以使查询能够更快地执行。MySQL 的查询优化器充分利用索引、表连接等功能,为 SQL 语句找到最优的执行路径。
- 执行 SQL 语句 MySQL 服务器使用执行路径来执行 SQL 语句,获得满足查询条件的结果集。这可能涉及到索引扫描、表扫描、连接操作等,具体取决于 SQL 语句和数据结构。
- 返回结果集 MySQL 服务器将执行后的结果集返回给客户端,并等待下一个命令的执行。
需要注意的是,在以上步骤中,查询优化器是 MySQL 查询执行过程中的重要组成部分,它可以大幅提升查询效率。MySQL 查询优化器会通过分析 SQL 语句,选择最优的执行方式并生成执行计划,使查询效率达到最大化。
MySQL数据库相关优化参数
MySQL数据库执行计划
MySQL数据库执行顺序
- FROM 子句:首先,SQL 解析器会识别查询的源表或视图,并确定它们之间的连接关系。这包括在 FROM 子句中指定的表和子查询。
- WHERE 子句:解析器会检查 WHERE 子句中的条件,并根据条件筛选出符合条件的数据行。WHERE 子句通常用于限制查询结果的范围。
- GROUP BY 子句:如果查询包含 GROUP BY 子句,解析器会将结果按照指定的列进行分组。然后,针对每个组计算聚合函数(如 SUM、COUNT、AVG 等)。
- HAVING 子句:HAVING 子句用于筛选聚合结果。解析器会检查 HAVING 条件,并只包含满足条件的分组结果。
- SELECT 子句:解析器会选择要返回的列,并进行计算、转换等操作(如聚合函数、表达式计算、别名等)。
- ORDER BY 子句:如果查询中有 ORDER BY 子句,解析器会对最终结果进行排序,按照指定的列和排序方向进行排序。
- LIMIT/OFFSET 子句:最后,解析器会根据 LIMIT 和 OFFSET 子句来限制返回结果的数量和偏移量。
MySQL性能测试过程中的优化项目和注意事项