MySQL 备忘单
SQL 备忘单为您提供了最常用的 SQL 语句供您参考。
开始
连接 MySQL
mysql -u <user> -p
mysql [db_name]
mysql -h <host> -P <port> -u <user> -p [db_name]
mysql -h <host> -u <user> -p [db_name]
公共部分
数据库
create database db ; |
创建数据库 |
show databases; |
列出数据库 |
use db; |
切换到数据库 |
drop database db; |
删除数据库 |
数据表
show tables; |
列出当前数据库的表 |
show fields from t; |
列出表的字段 |
desc t; |
显示表结构 |
show create table t ; |
显示创建表sql |
truncate table t ; |
删除表中的所有数据 |
drop table t ; |
删除表 |
进程
show processlist; |
列出进程 |
kill 进程号; |
杀死进程 |
其他
exit 或者 \q |
退出 MySQL 会话 |
备份
创建备份
mysqldump -u user -p db_name > db.sql
导出没有架构的数据库
mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql
恢复备份
mysql -u user -p db_name < db.sql
MySQL 示例
管理表
创建一个包含三列的新表
CREATE TABLE t (
id INT PRIMARY KEY,
name VARCHAR NOT NULL,
price INT DEFAULT 0
);
从数据库中删除表
DROP TABLE t ;
向表中添加一个新列
ALTER TABLE t ADD column;
从表中删除列 c
ALTER TABLE t DROP COLUMN c ;
添加约束
ALTER TABLE t ADD constraint;
删除约束
ALTER TABLE t DROP constraint;
将表从 t1 重命名为 t2
ALTER TABLE t1 RENAME TO t2;
将列 c1 重命名为 c2
ALTER TABLE t1 RENAME c1 TO c2 ;
删除表中的所有数据
TRUNCATE TABLE t;
从表中查询数据
从表中查询 c1、c2 列中的数据
SELECT c1, c2 FROM t
查询表中的所有行和列
SELECT * FROM t
查询数据并使用条件过滤行
SELECT c1, c2 FROM t
WHERE condition
从表中查询不同的行
SELECT DISTINCT c1 FROM t
WHERE condition
按升序或降序对结果集进行排序
SELECT c1, c2 FROM t
ORDER BY c1 ASC [DESC]
跳过行的偏移量并返回接下来的 n 行
SELECT c1, c2 FROM t
ORDER BY c1
LIMIT n OFFSET offset
使用聚合函数对行进行分组
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
使用 HAVING 子句过滤组
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
HAVING condition
从多个表查询
内连接 t1 和 t2
SELECT c1, c2
FROM t1
INNER JOIN t2 ON condition
左连接 t1 和 t1
SELECT c1, c2
FROM t1
LEFT JOIN t2 ON condition
右连接 t1 和 t2
SELECT c1, c2
FROM t1
RIGHT JOIN t2 ON condition
执行全外连接
SELECT c1, c2
FROM t1
FULL OUTER JOIN t2 ON condition
生成表中行的笛卡尔积
SELECT c1, c2
FROM t1
CROSS JOIN t2
另一种执行交叉连接的方法
SELECT c1, c2
FROM t1, t2
使用 INNER JOIN 子句将 t1 连接到自身
SELECT c1, c2
FROM t1 A
INNER JOIN t1 B ON condition
使用 SQL 运算符组合来自两个查询的行
SELECT c1, c2 FROM t1
UNION [ALL]
SELECT c1, c2 FROM t2
返回两个查询的交集
SELECT c1, c2 FROM t1
INTERSECT
SELECT c1, c2 FROM t2
从另一个结果集中减去一个结果集
SELECT c1, c2 FROM t1
MINUS
SELECT c1, c2 FROM t2
使用模式匹配 %, _ 查询行
SELECT c1, c2 FROM t1
WHERE c1 [NOT] LIKE pattern
查询列表中的行
SELECT c1, c2 FROM t
WHERE c1 [NOT] IN value_list
查询两个值之间的行
SELECT c1, c2 FROM t
WHERE c1 BETWEEN low AND high
检查表中的值是否为 NULL
SELECT c1, c2 FROM t
WHERE c1 IS [NOT] NULL
使用 SQL 约束
将 c1 和 c2 设置为主键
CREATE TABLE t(
c1 INT, c2 INT, c3 VARCHAR,
PRIMARY KEY (c1,c2)
);
将 c2 列设置为外键
CREATE TABLE t1(
c1 INT PRIMARY KEY,
c2 INT,
FOREIGN KEY (c2) REFERENCES t2(c2)
);
使 c1 和 c2 中的值唯一
CREATE TABLE t(
c1 INT, c1 INT,
UNIQUE(c2,c3)
);
确保 c1 > 0 和 c1 >= c2 中的值
CREATE TABLE t(
c1 INT, c2 INT,
CHECK(c1> 0 AND c1 >= c2)
);
在 c2 列中设置值不为 NULL
CREATE TABLE t(
c1 INT PRIMARY KEY,
c2 VARCHAR NOT NULL
);
修改数据
在表格中插入一行
INSERT INTO t(column_list)
VALUES(value_list);
在表中插入多行
INSERT INTO t(column_list)
VALUES (value_list),
(value_list), …;
将 t2 中的行插入到 t1
INSERT INTO t1(column_list)
SELECT column_list
FROM t2;
为所有行更新 c1 列中的新值
UPDATE t
SET c1 = new_value;
更新 c1、c2 列中与条件匹配的值
UPDATE t
SET c1 = new_value,
c2 = new_value
WHERE condition;
删除表中的所有数据
DELETE FROM t;
删除表中的行子集
DELETE FROM t
WHERE condition;
管理视图
创建一个包含 c1 和 c2 的新视图
CREATE VIEW v(c1,c2)
AS
SELECT c1, c2
FROM t;
使用检查选项创建新视图
CREATE VIEW v(c1,c2)
AS
SELECT c1, c2
FROM t;
WITH [CASCADED | LOCAL] CHECK OPTION;
创建递归视图
CREATE RECURSIVE VIEW v
AS
select-statement -- anchor part
UNION [ALL]
select-statement; -- recursive part
创建临时视图
CREATE TEMPORARY VIEW v
AS
SELECT c1, c2
FROM t;
删除视图
DROP VIEW view_name;
管理触发器
创建或修改触发器
CREATE OR MODIFY TRIGGER trigger_name
WHEN EVENT
ON table_name TRIGGER_TYPE
EXECUTE stored_procedure;
什么时候调用
BEFORE |
在事件发生之前调用 |
AFTER |
事件发生后调用 |
事件
INSERT |
调用 INSERT |
UPDATE |
调用更新 |
DELETE |
调用删除 |
触发器类型
FOR EACH ROW |
|
FOR EACH STATEMENT |
管理索引
在 t 表的 c1 和 c2 上创建索引
CREATE INDEX idx_name
ON t(c1,c2);
在t表的c3、c4上创建唯一索引
CREATE UNIQUE INDEX idx_name
ON t(c3,c4)
删除索引
DROP INDEX idx_name;
MySQL 数据类型
字符串
CHAR |
字符串 (0 - 255) |
VARCHAR |
字符串 (0 - 255) |
TINYTEXT |
字符串 (0 - 255) |
TEXT |
字符串 (0 - 65535) |
BLOB |
字符串 (0 - 65535) |
MEDIUMTEXT |
字符串 (0 - 16777215) |
MEDIUMBLOB |
字符串 (0 - 16777215) |
LONGTEXT |
字符串 (0 - 4294967295) |
LONGBLOB |
字符串 (0 - 4294967295) |
ENUM |
预设选项之一 |
SET |
预设选项的选择 |
日期时间
DATE |
yyyy-MM-dd |
TIME |
hh:mm:ss |
DATETIME |
yyyy-MM-dd hh:mm:ss |
TIMESTAMP |
yyyy-MM-dd hh:mm:ss |
YEAR |
yyyy |
数值
TINYINT x |
整数(-128 到 127) |
SMALLINT x |
整数(-32768 到 32767) |
MEDIUMINT x |
整数(-8388608 到 8388607) |
INT x |
整数(-2147483648 到 2147483647) |
BIGINT x |
整数(-9223372036854775808 到 9223372036854775807) |
FLOAT |
十进制(精确到 23 位) |
DOUBLE |
十进制(24 到 53 位) |
DECIMAL |
“DOUBLE”存储为字符串 |
MySQL 函数和运算符
字符串
- ASCII()
- BIN()
- BIT_LENGTH()
- CHAR()
- CHARACTER_LENGTH()
- CHAR_LENGTH()
- CONCAT()
- CONCAT_WS()
- ELT()
- EXPORT_SET()
- FIELD()
- FIND_IN_SET()
- FORMAT()
- FROM_BASE64()
- HEX()
- INSERT()
- INSTR()
- LCASE()
- LEFT()
- LENGTH()
- LIKE
- LOAD_FILE()
- LOCATE()
- LOWER()
- LPAD()
- LTRIM()
- MAKE_SET()
- MATCH
- MID()
- NOT LIKE
- NOT REGEXP
- OCT()
- OCTET_LENGTH()
- ORD()
- POSITION()
- QUOTE()
- REGEXP
- REGEXP_INSTR()
- REGEXP_LIKE()
- REGEXP_REPLACE()
- REGEXP_SUBSTR()
- REPEAT()
- REPLACE()
- REVERSE()
- RIGHT()
- RLIKE
- RPAD()
- RTRIM()
- SOUNDEX()
- SOUNDS LIKE
- SPACE()
- STRCMP()
- SUBSTR()
- SUBSTRING()
- SUBSTRING_INDEX()
- TO_BASE64()
- TRIM()
- UCASE()
- UNHEX()
- UPPER()
- WEIGHT_STRING()
日期和时间
- ADDDATE()
- ADDTIME()
- CONVERT_TZ()
- CURDATE()
- CURRENT_DATE()
- CURRENT_TIME()
- CURRENT_TIMESTAMP()
- CURTIME()
- DATE()
- DATE_ADD()
- DATE_FORMAT()
- DATE_SUB()
- DATEDIFF()
- DAY()
- DAYNAME()
- DAYOFMONTH()
- DAYOFWEEK()
- DAYOFYEAR()
- EXTRACT()
- FROM_DAYS()
- FROM_UNIXTIME()
- GET_FORMAT()
- HOUR()
- LAST_DAY
- LOCALTIME()
- LOCALTIMESTAMP()
- MAKEDATE()
- MAKETIME()
- MICROSECOND()
- MINUTE()
- MONTH()
- MONTHNAME()
- NOW()
- PERIOD_ADD()
- PERIOD_DIFF()
- QUARTER()
- SEC_TO_TIME()
- SECOND()
- STR_TO_DATE()
- SUBDATE()
- SUBTIME()
- SYSDATE()
- TIME()
- TIME_FORMAT()
- TIME_TO_SEC()
- TIMEDIFF()
- TIMESTAMP()
- TIMESTAMPADD()
- TIMESTAMPDIFF()
- TO_DAYS()
- TO_SECONDS()
- UNIX_TIMESTAMP()
- UTC_DATE()
- UTC_TIME()
- UTC_TIMESTAMP()
- WEEK()
- WEEKDAY()
- WEEKOFYEAR()
- YEAR()
- YEARWEEK()
- GET_FORMAT()
数字
统计
JSON
- ->
- ->>
- JSON_ARRAY()
- JSON_ARRAY_APPEND()
- JSON_ARRAY_INSERT()
- JSON_CONTAINS()
- JSON_CONTAINS_PATH()
- JSON_DEPTH()
- JSON_EXTRACT()
- JSON_INSERT()
- JSON_KEYS()
- JSON_LENGTH()
- JSON_MERGE()(已弃用)
- JSON_MERGE_PATCH()
- JSON_MERGE_PRESERVE()
- JSON_OBJECT()
- JSON_OVERLAPS()(8.0.17 引入)
- JSON_PRETTY()
- JSON_QUOTE()
- JSON_REMOVE()
- JSON_REPLACE()
- JSON_SCHEMA_VALID()(8.0.17 引入)
- JSON_SCHEMA_VALIDATION_REPORT()(8.0.17 引入)
- JSON_SEARCH()
- JSON_SET()
- JSON_STORAGE_FREE()
- JSON_STORAGE_SIZE()
- JSON_TABLE()
- JSON_TYPE()
- JSON_UNQUOTE()
- JSON_VALID()
- JSON_VALUE()(8.0.21 引入)
- MEMBER OF()(8.0.17 引入)
信息
加密和压缩
另见
- MySQL 中的正则表达式 (quickref.me)