常用命令跟重要命令
# 常用命令跟重要命令
# 查看各种信息
# 查看mysql版本
SELECT VERSION();
预期的结果:
+-----------+
| @@version |
+-----------+
| 8.0.26 |
+-----------+
2
3
4
5
# 增删查改
以下是crud的模版:
# 增加
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
2
table_name
:要插入数据的表的名称。column1, column2, ...
:指定要插入数据的列名(可以省略,但需要确保值的顺序与表结构一致)。value1, value2, ...
:对应列的值。
# 查找
-- 查询每个部门的平均薪水
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
2
3
4
以上sql,还使用了分组和聚合函数
# 删除或更新
-- 执行更新或删除操作
UPDATE employees SET salary = 55000.00 WHERE id = 1;
DELETE FROM employees WHERE department_id = 101;
2
3
如果你想删除整张表:
DELETE FROM employees;
当然,删除还有另一个关键字:TRUNCATE
TRUNCATE TABLE table_name;
TRUNCATE
语句用于快速删除表中的所有记录,但它与 DELETE
语句有一些重要的区别。
# TRUNCATE
与 DELETE
的区别
功能:
DELETE
:可以删除表中的部分或全部记录,并且可以通过WHERE
子句指定条件。TRUNCATE
:只能删除表中的所有记录,不能指定条件。
性能:
DELETE
:逐行删除记录,会产生大量的日志记录,尤其是在 InnoDB 存储引擎中,因为每一条记录的删除都会被记录到事务日志中。TRUNCATE
:直接删除整个表的数据和索引,然后重新创建表结构,因此速度更快,产生的日志更少。
事务处理:
DELETE
:可以回滚,如果在一个事务中执行DELETE
操作,可以在事务提交之前通过ROLLBACK
回滚操作。TRUNCATE
:在某些存储引擎(如 InnoDB)中也可以回滚,但在其他存储引擎(如 MyISAM)中通常不可回滚。
自动递增列:
DELETE
:删除记录后,自动递增列的值不会重置。TRUNCATE
:删除记录后,自动递增列的值会被重置为初始值(通常是 1)。
# count(1)跟count(*)
Count()函数,返回语句检索到的行中非NULL
值 的数量 。
SELECT COUNT(*) FROM tableA;
和 SELECT COUNT(1) FROM tableA;
是 SQL 中用于统计表中记录数的两种常见方式。它们在大多数情况下表现相同,但在某些特定场景下可能有细微差异。
# COUNT(*)
Select count(*) from tableA 这条语句返回 tableA
表中的所有行数,包括那些包含 NULL
值的列。COUNT(*)
会计算表中的每一行,而不论这些行是否包含 NULL
值。
在mysql的官网中,已进行说明,count(*)与count(1)无任何差异。
官网:
InnoDB
handlesSELECT COUNT(*)
andSELECT COUNT(1)
operations in the same way. There is no performance difference.count函数说明-5.7 (opens new window)
- https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html#function_count
count函数说明-8.0 (opens new window)
- https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html
# COUNT(1)
select count(1) from tableA ,这条语句返回 tableA
表中的所有行数。这里使用了常量 1
作为参数传递给 COUNT
函数。COUNT(1)
实际上与 COUNT(*)
的效果相同,因为 COUNT
函数只统计非 NULL
的表达式,而 1
永远不会是 NULL
。因为 1
永远不是 NULL
,所以它会统计每一行。