一文教会你 MySQL

前文叙述:

很久之前整理的一些实战开发过程中常用的 SQL 语句,整理成表格与目录形式,可理解为实战速查手册,方便快速查阅、理解、复习和使用。所有文章如若需要转载请说明出处,请尊重技术劳动成果!!!

MySQL 常用语句表格归纳

类型

SQL 语句示例

描述

创建表

CREATE TABLE 表名 (列1 数据类型, 列2 数据类型);

创建新表。

删除表

DROP TABLE 表名;

删除表及其数据。

插入数据

INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);

向表中插入新数据。

更新数据

UPDATE 表名 SET 列1 = 值1 WHERE 条件;

更新表中符合条件的数据。

删除数据

DELETE FROM 表名 WHERE 条件;

删除表中符合条件的数据。

查询数据

SELECT 列1, 列2 FROM 表名 WHERE 条件;

查询表中符合条件的数据。

查询所有列

SELECT * FROM 表名;

查询表中所有列的数据。

过滤数据

SELECT * FROM 表名 WHERE 条件;

使用条件过滤数据。

排序数据

SELECT * FROM 表名 ORDER BY 列1 ASC/DESC;

按指定列升序(ASC)或降序(DESC)排序。

分组数据

SELECT 列1, COUNT(*) FROM 表名 GROUP BY 列1;

按列分组并聚合数据。

连接表

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;

内连接两张表。

左连接

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列;

左连接两张表(返回左表所有数据)。

右连接

SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;

右连接两张表(返回右表所有数据)。

联合查询

SELECT 列1 FROM 表1 UNION SELECT 列1 FROM 表2;

合并两个查询结果(去重)。

联合所有查询

SELECT 列1 FROM 表1 UNION ALL SELECT 列1 FROM 表2;

合并两个查询结果(不去重)。

去重查询

SELECT DISTINCT 列1 FROM 表名;

返回列中唯一的值。

分页查询

SELECT * FROM 表名 LIMIT 数量 OFFSET 起始位置;

分页查询数据。

条件筛选

SELECT * FROM 表名 WHERE 列1 IN (值1, 值2);

检查列值是否在指定列表中。

模糊查询

SELECT * FROM 表名 WHERE 列1 LIKE '%关键字%';

模糊查询(% 表示任意字符,_ 表示单个字符)。

聚合函数

SELECT COUNT(*), SUM(列1), AVG(列1), MAX(列1), MIN(列1) FROM 表名;

计算聚合值。

创建索引

CREATE INDEX 索引名 ON 表名 (列1);

为表中的列创建索引。

删除索引

DROP INDEX 索引名 ON 表名;

删除表中的索引。

修改表结构

ALTER TABLE 表名 ADD 列名 数据类型;

向表中添加新列。

删除列

ALTER TABLE 表名 DROP COLUMN 列名;

删除表中的列。

修改列类型

ALTER TABLE 表名 MODIFY 列名 新数据类型;

修改表中列的数据类型。

重命名表

ALTER TABLE 旧表名 RENAME TO 新表名;

重命名表。

事务开始

BEGIN TRANSACTION;

开始一个事务。

事务提交

COMMIT;

提交事务。

事务回滚

ROLLBACK;

回滚事务。

创建视图

CREATE VIEW 视图名 AS SELECT 列1, 列2 FROM 表名;

创建视图。

删除视图

DROP VIEW 视图名;

删除视图。

创建存储过程

CREATE PROCEDURE 存储过程名 AS SQL语句;

创建存储过程。

调用存储过程

CALL 存储过程名;

调用存储过程。

创建用户

CREATE USER 用户名 IDENTIFIED BY '密码';

创建新用户。

授予权限

GRANT 权限 ON 表名 TO 用户名;

授予用户权限。

撤销权限

REVOKE 权限 ON 表名 FROM 用户名;

撤销用户权限。

备份表

CREATE TABLE 新表名 AS SELECT * FROM 原表名;

通过查询备份表数据。

数据库备份

mysqldump -u 用户名 -p 数据库名 > 备份文件.sql

备份整个数据库。

求和

SELECT SUM(列名) FROM 表名;

计算某一列的总和。

平均值

SELECT AVG(列名) FROM 表名;

计算某一列的平均值。

最大值

SELECT MAX(列名) FROM 表名;

查找某一列的最大值。

最小值

SELECT MIN(列名) FROM 表名;

查找某一列的最小值。

计数

SELECT COUNT(列名) FROM 表名;

统计某一列的行数(非空值)。

去重计数

SELECT COUNT(DISTINCT 列名) FROM 表名;

统计某一列中唯一值的数量。

字符串连接

SELECT CONCAT(列1, ' ', 列2) AS 新列名 FROM 表名;

将两列或多列的值连接为一个字符串。

字符串长度

SELECT LENGTH(列名) AS 长度 FROM 表名;

计算字符串列的长度。

字符串截取

SELECT SUBSTRING(列名, 开始位置, 长度) FROM 表名;

截取字符串的一部分。

四舍五入

SELECT ROUND(列名, 小数位数) FROM 表名;

对数值进行四舍五入。

绝对值

SELECT ABS(列名) FROM 表名;

计算数值的绝对值。

日期差

SELECT DATEDIFF(日期列1, 日期列2) FROM 表名;

计算两个日期之间的天数差。

日期格式化

SELECT DATE_FORMAT(日期列, '格式') FROM 表名;

将日期格式化为指定格式。

条件求和

SELECT SUM(IF(条件, 列名, 0)) FROM 表名;

根据条件对某一列求和。

条件计数

SELECT COUNT(IF(条件, 1, NULL)) FROM 表名;

根据条件统计行数。

分组计算

SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1;

按某一列分组后计算其他列的聚合值。

分组过滤

SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1 HAVING SUM(列2) > 100;

对分组结果进行过滤。

MySQL 数据类型

说明: MySQL 中处理涉及金额的数据时,建议使用 DECIMAL 数据类型,因为它能够精确存储浮点数,避免浮点数计算时的精度丢失问题。

类别

类型

描述

示例

整数类型

TINYINT

1字节,(-128,127)

TINYINT

SMALLINT

2字节,(-32768,32767)

SMALLINT

MEDIUMINT

3字节,(-8388608,8388607)

MEDIUMINT

INT

INTEGER

4字节,(-2147483648,2147483647)

INT

BIGINT

8字节,(-2^63,2^63-1)

BIGINT

浮点数类型

FLOAT

4字节,单精度

FLOAT(7, 4)

DOUBLE

8字节,双精度

DOUBLE(15, 8)

定点数类型

DECIMAL(M, D)

精确小数,M为总位数,D为小数位数

DECIMAL(10, 2)

字符串类型

CHAR(N)

定长,最多N字符

CHAR(10)

VARCHAR(N)

变长,最多N字符

VARCHAR(255)

文本类型

TINYTEXT

最多255字符

TINYTEXT

TEXT

最多65535字符

TEXT

MEDIUMTEXT

最多16777215字符

MEDIUMTEXT

LONGTEXT

最多4294967295字符

LONGTEXT

二进制类型

BINARY(N)

定长,最多N字节

BINARY(10)

VARBINARY(N)

变长,最多N字节

VARBINARY(255)

二进制大对象

TINYBLOB

最多255字节

TINYBLOB

BLOB

最多65535字节

BLOB

MEDIUMBLOB

最多16777215字节

MEDIUMBLOB

LONGBLOB

最多4294967295字节

LONGBLOB

日期时间类型

DATE

日期,YYYY-MM-DD

DATE

TIME

时间,HH:MM:SS

TIME

DATETIME

日期时间,YYYY-MM-DD HH:MM:SS

DATETIME

TIMESTAMP

时间戳,1970-01-01

2038-01-19

TIMESTAMP

YEAR

年份,1901到2155

YEAR

枚举类型

ENUM

从预定义列表选1个值

ENUM('男', '女')

集合类型

SET

从预定义列表选多个值

SET('阅读', '旅行')

JSON 类型

JSON

存储JSON格式数据

JSON

创建表

CREATE TABLE 表名 (列1 数据类型, 列2 数据类型); // 创建新表

删除表

DROP TABLE 表名;	// 删除表及其数据。

插入数据

INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);	// 向表中插入新数据。

更新数据

UPDATE 表名 SET 列1 = 值1 WHERE 条件;	// 更新表中符合条件的数据。

删除数据

DELETE FROM 表名 WHERE 条件;	 // 删除表中符合条件的数据。 

查询数据

SELECT 列1, 列2 FROM 表名 WHERE 条件;	// 查询表中符合条件的数据。 

查询所有列

SELECT * FROM 表名;	// 查询表中所有列的数据。 

过滤数据

SELECT * FROM 表名 WHERE 条件;		// 使用条件过滤数据。 

排序数据

SELECT * FROM 表名 ORDER BY 列1 ASC/DESC;	// 按指定列升序(ASC)或降序(DESC)排序。 

分组数据

SELECT 列1, COUNT(*) FROM 表名 GROUP BY 列1;	// 按列分组并聚合数据。 

连接表

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;	// 内连接两张表。 

左连接

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列;		// 左连接两张表(返回左表所有数据)。 

右连接

SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;	// 右连接两张表(返回右表所有数据)。 

联合查询

SELECT 列1 FROM 表1 UNION SELECT 列1 FROM 表2;	// 合并两个查询结果(去重)。 

联合所有查询

SELECT 列1 FROM 表1 UNION ALL SELECT 列1 FROM 表2;	// 合并两个查询结果(不去重)。 

去重查询

SELECT DISTINCT 列1 FROM 表名;		// 返回列中唯一的值。 

分页查询

SELECT * FROM 表名 LIMIT 数量 OFFSET 起始位置;	 // 分页查询数据。 

条件筛选

SELECT * FROM 表名 WHERE 列1 IN (值1, 值2);	// 检查列值是否在指定列表中。 

模糊查询

SELECT * FROM 表名 WHERE 列1 LIKE '%关键字%';	// 模糊查询(% 表示任意字符,_ 表示单个字符)。 

聚合函数

SELECT COUNT(*), SUM(列1), AVG(列1), MAX(列1), MIN(列1) FROM 表名;	// 计算聚合值。 

创建索引

CREATE INDEX 索引名 ON 表名 (列1);	// 为表中的列创建索引。 

删除索引

DROP INDEX 索引名 ON 表名;	 // 删除表中的索引。 

修改表结构

ALTER TABLE 表名 ADD 列名 数据类型;	// 向表中添加新列。 

删除列

ALTER TABLE 表名 DROP COLUMN 列名;	// 删除表中的列。 

修改列类型

ALTER TABLE 表名 MODIFY 列名 新数据类型;	// 修改表中列的数据类型。 

重命名表

ALTER TABLE 旧表名 RENAME TO 新表名;	// 重命名表。 

事务开始

BEGIN TRANSACTION;	// 开始一个事务。 

事务提交

COMMIT;		// 提交事务。 

事务回滚

ROLLBACK;	// 回滚事务。 

创建视图

CREATE VIEW 视图名 AS SELECT 列1, 列2 FROM 表名;	// 创建视图。 

删除视图

DROP VIEW 视图名;		// 删除视图。

创建存储过程

CREATE PROCEDURE 存储过程名 AS SQL语句;	// 创建存储过程。 

调用存储过程

CALL 存储过程名;	// 调用存储过程。 

创建用户

CREATE USER 用户名 IDENTIFIED BY '密码';	// 创建新用户。

授予权限

GRANT 权限 ON 表名 TO 用户名;	// 授予用户权限。

撤销权限

REVOKE 权限 ON 表名 FROM 用户名;	// 撤销用户权限。 

备份表

CREATE TABLE 新表名 AS SELECT * FROM 原表名;	// 通过查询备份表数据。 

数据库备份

mysqldump -u 用户名 -p 数据库名 > 备份文件.sql	// 备份整个数据库。

IF 函数

语法

描述

示例

IF(条件, 值1, 值2)

如果条件为真,返回值1;否则返回值2。

SELECT IF(score >= 60, '及格', '不及格') AS result FROM students;

嵌套使用

嵌套 IF

实现多条件判断。

SELECT IF(score >= 90, '优秀', IF(score >= 60, '及格', '不及格')) AS result FROM students;


CASE 函数

语法

描述

示例

简单 CASE:

CASE 字段
    WHEN 值1 THEN 结果1
    WHEN 值2 THEN 结果2
    ...
    ELSE 默认结果
END

比较字段值与指定值,返回对应结果。

SELECT CASE level WHEN 'A' THEN '优秀' WHEN 'B' THEN '良好' ELSE '其他' END AS result FROM students;

搜索 CASE

CASE
    WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2
    ...
    ELSE 默认结果
END

根据条件判断,返回对应结果。

SELECT CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS result FROM students;

求和

SELECT SUM(列名) FROM 表名;	// 计算某一列的总和。

平均值

SELECT AVG(列名) FROM 表名;	// 计算某一列的平均值。

最大值

SELECT MAX(列名) FROM 表名;	// 查找某一列的最大值。

最小值

SELECT MIN(列名) FROM 表名;	// 查找某一列的最小值。

计数

SELECT COUNT(列名) FROM 表名;	// 统计某一列的行数(非空值)。

去重计数

SELECT COUNT(DISTINCT 列名) FROM 表名;	// 统计某一列中唯一值的数量。

字符串连接

SELECT CONCAT(列1, ' ', 列2) AS 新列名 FROM 表名;	// 将两列或多列的值连接为一个字符串。

字符串长度

SELECT LENGTH(列名) AS 长度 FROM 表名;	// 计算字符串列的长度。

字符串截取

SELECT SUBSTRING(列名, 开始位置, 长度) FROM 表名;	// 截取字符串的一部分。

四舍五入

SELECT ROUND(列名, 小数位数) FROM 表名;	// 对数值进行四舍五入。

绝对值

SELECT ABS(列名) FROM 表名;	// 计算数值的绝对值。

日期差

SELECT DATEDIFF(日期列1, 日期列2) FROM 表名;	// 计算两个日期之间的天数差。

日期格式化

SELECT DATE_FORMAT(日期列, '格式') FROM 表名;		// 将日期格式化为指定格式。

条件求和

SELECT SUM(IF(条件, 列名, 0)) FROM 表名;	// 根据条件对某一列求和。

条件计数

SELECT COUNT(IF(条件, 1, NULL)) FROM 表名;	// 根据条件统计行数。

分组计算

SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1;		// 按某一列分组后计算其他列的聚合值。

分组过滤

SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1 HAVING SUM(列2) > 100;	// 对分组结果进行过滤。

技术水平有限,如有错误,欢迎指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值