一、数据库操作语句
1. 创建数据库
-- 基本创建
CREATE DATABASE database_name;
-- 指定字符集和校对规则
CREATE DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 如果不存在则创建
CREATE DATABASE IF NOT EXISTS database_name;
2. 删除数据库
DROP DATABASE database_name;
DROP DATABASE IF EXISTS database_name;
3. 选择/切换数据库
USE database_name;
4. 查看数据库
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库创建语句
SHOW CREATE DATABASE database_name;
-- 查看当前使用的数据库
SELECT DATABASE();
5. 修改数据库
ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
二、数据表操作语句
1. 创建表
-- 基本创建
CREATE TABLE table_name (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 0,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 带外键约束
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
amount DECIMAL(10, 2),
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
-- 创建临时表
CREATE TEMPORARY TABLE temp_table (
id INT,
value VARCHAR(100)
);
-- 从查询结果创建表
CREATE TABLE new_table AS
SELECT * FROM old_table WHERE condition;
-- 复制表结构
CREATE TABLE new_table LIKE old_table;
2. 删除表
DROP TABLE table_name;
DROP TABLE IF EXISTS table_name;
-- 快速清空表
TRUNCATE TABLE table_name;
3. 修改表结构
-- 添加列
ALTER TABLE table_name ADD column_name datatype;
ALTER TABLE table_name ADD column_name datatype AFTER existing_column;
ALTER TABLE table_name ADD column_name datatype FIRST;
-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;
-- 修改列
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;
-- 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name;
RENAME TABLE old_table TO new_table;
-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
-- 删除主键
ALTER TABLE table_name DROP PRIMARY KEY;
-- 添加外键
ALTER TABLE table_name
ADD CONSTRAINT fk_name
FOREIGN KEY (column_name)
REFERENCES other_table(other_column);
-- 删除外键
ALTER TABLE table_name DROP FOREIGN KEY fk_name;
-- 添加索引
ALTER TABLE table_name ADD INDEX index_name (column_name);
CREATE INDEX index_name ON table_name (column_name);
-- 添加唯一索引
ALTER TABLE table_name ADD UNIQUE (column_name);
CREATE UNIQUE INDEX index_name ON table_name (column_name);
-- 删除索引
ALTER TABLE table_name DROP INDEX index_name;
DROP INDEX index_name ON table_name;
4. 查看表信息
-- 查看所有表
SHOW TABLES;
SHOW TABLES LIKE 'pattern%';
-- 查看表结构
DESCRIBE table_name;
DESC table_name;
SHOW COLUMNS FROM table_name;
-- 查看表创建语句
SHOW CREATE TABLE table_name;
-- 查看表状态
SHOW TABLE STATUS LIKE 'table_name';
三、数据操作语句(DML)
1. 插入数据
-- 插入单行
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
-- 插入多行
INSERT INTO table_name (column1, column2)
VALUES
(value1, value2),
(value3, value4),
(value5, value6);
-- 插入所有列
INSERT INTO table_name VALUES (value1, value2, value3);
-- 从查询结果插入
INSERT INTO table_name (column1, column2)
SELECT column1, column2 FROM another_table WHERE condition;
-- 插入或替换
REPLACE INTO table_name (id, name) VALUES (1, 'John');
-- 插入或忽略
INSERT IGNORE INTO table_name (id, name) VALUES (1, 'John');
2. 更新数据
-- 基本更新
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
-- 使用子查询更新
UPDATE table_name
SET column1 = (
SELECT column2 FROM other_table WHERE condition
)
WHERE condition;
-- 批量更新
UPDATE table_name
SET status = 'active'
WHERE id IN (1, 2, 3, 4, 5);
-- 使用CASE更新
UPDATE table_name
SET grade = CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END;
-- 使用JOIN更新
UPDATE table1
JOIN table2 ON table1.id = table2.table1_id
SET table1.column = table2.new_value
WHERE condition;
3. 删除数据
-- 基本删除
DELETE FROM table_name WHERE condition;
-- 删除所有数据
DELETE FROM table_name;
TRUNCATE TABLE table_name; -- 更快,不能回滚
-- 使用子查询删除
DELETE FROM table_name
WHERE column IN (
SELECT column FROM other_table WHERE condition
);
-- 使用JOIN删除(MySQL)
DELETE t1 FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
WHERE condition;
-- 使用LIMIT删除
DELETE FROM table_name WHERE condition LIMIT 1000;
四、数据查询语句(DQL)
1. 基础查询
-- 查询所有列
SELECT * FROM table_name;
-- 查询特定列
SELECT column1, column2 FROM table_name;
-- 使用别名
SELECT column1 AS alias1, column2 AS alias2 FROM table_name;
SELECT column1 alias1 FROM table_name;
-- 去重查询
SELECT DISTINCT column_name FROM table_name;
-- 查询常量值
SELECT '固定值' AS constant, column_name FROM table_name;
-- 计算字段
SELECT column1, column2, column1 + column2 AS total FROM table_name;
SELECT column1, column2, column1 * column2 AS product FROM table_name;
-- 使用函数
SELECT COUNT(*) FROM table_name;
SELECT AVG(column_name) FROM table_name;
SELECT SUM(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
SELECT MIN(column_name) FROM table_name;
2. 条件查询
-- WHERE子句
SELECT * FROM table_name WHERE condition;
-- 比较运算符
SELECT * FROM table_name WHERE column = value;
SELECT * FROM table_name WHERE column > value;
SELECT * FROM table_name WHERE column < value;
SELECT * FROM table_name WHERE column >= value;
SELECT * FROM table_name WHERE column <= value;
SELECT * FROM table_name WHERE column <> value; -- 不等于
SELECT * FROM table_name WHERE column != value;
-- 逻辑运算符
SELECT * FROM table_name WHERE condition1 AND condition2;
SELECT * FROM table_name WHERE condition1 OR condition2;
SELECT * FROM table_name WHERE NOT condition;
-- BETWEEN
SELECT * FROM table_name WHERE column BETWEEN value1 AND value2;
-- IN
SELECT * FROM table_name WHERE column IN (value1, value2, value3);
-- NOT IN
SELECT * FROM table_name WHERE column NOT IN (value1, value2, value3);
-- LIKE
SELECT * FROM table_name WHERE column LIKE 'pattern%'; -- 以pattern开头
SELECT * FROM table_name WHERE column LIKE '%pattern'; -- 以pattern结尾
SELECT * FROM table_name WHERE column LIKE '%pattern%'; -- 包含pattern
SELECT * FROM table_name WHERE column LIKE '_pattern'; -- pattern在第二个字符
SELECT * FROM table_name WHERE column NOT LIKE 'pattern%';
-- NULL值判断
SELECT * FROM table_name WHERE column IS NULL;
SELECT * FROM table_name WHERE column IS NOT NULL;
-- EXISTS
SELECT * FROM table_name
WHERE EXISTS (SELECT 1 FROM other_table WHERE condition);
3. 排序查询
-- 单字段排序
SELECT * FROM table_name ORDER BY column_name;
SELECT * FROM table_name ORDER BY column_name ASC; -- 升序
SELECT * FROM table_name ORDER BY column_name DESC; -- 降序
-- 多字段排序
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
-- 使用字段位置排序
SELECT column1, column2 FROM table_name ORDER BY 1; -- 按第一列排序
-- 自定义排序
SELECT * FROM table_name
ORDER BY FIELD(column_name, 'value3', 'value1', 'value2');
4. 分组查询
-- 基本分组
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;
-- 分组过滤
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 1;
-- 多字段分组
SELECT column1, column2, AVG(column3)
FROM table_name
GROUP BY column1, column2;
-- 分组后排序
SELECT column1, COUNT(*) as count
FROM table_name
GROUP BY column1
ORDER BY count DESC;
-- 使用GROUP_CONCAT
SELECT department, GROUP_CONCAT(employee_name) as employees
FROM employees
GROUP BY department;
5. 分页查询
-- MySQL分页
SELECT * FROM table_name LIMIT 10; -- 前10条
SELECT * FROM table_name LIMIT 10 OFFSET 20; -- 跳过20条,取10条
SELECT * FROM table_name LIMIT 20, 10; -- 同上
-- SQL Server分页
SELECT * FROM table_name
ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
-- Oracle分页
SELECT * FROM (
SELECT t.*, ROWNUM rn
FROM table_name t
WHERE ROWNUM <= 30
) WHERE rn > 20;
-- PostgreSQL分页
SELECT * FROM table_name
ORDER BY id
LIMIT 10 OFFSET 20;
6. 连接查询
-- 内连接(INNER JOIN)
SELECT * FROM table1
INNER JOIN table2 ON table1.id = table2.table1_id;
-- 左连接(LEFT JOIN)
SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id;
-- 右连接(RIGHT JOIN)
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.table1_id;
-- 全外连接(FULL OUTER JOIN)
SELECT * FROM table1
FULL OUTER JOIN table2 ON table1.id = table2.table1_id;
-- 交叉连接(CROSS JOIN)
SELECT * FROM table1 CROSS JOIN table2;
-- 自连接
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.id;
-- 多表连接
SELECT * FROM table1
JOIN table2 ON table1.id = table2.table1_id
JOIN table3 ON table2.id = table3.table2_id;
-- USING简化连接(当列名相同时)
SELECT * FROM table1 JOIN table2 USING (id);
7. 子查询
-- WHERE子句中的子查询
SELECT * FROM table_name
WHERE column IN (SELECT column FROM other_table WHERE condition);
SELECT * FROM table_name
WHERE column = (SELECT MAX(column) FROM other_table);
-- FROM子句中的子查询
SELECT * FROM (
SELECT column1, COUNT(*) as count
FROM table_name
GROUP BY column1
) AS subquery WHERE count > 1;
-- SELECT子句中的子查询
SELECT column1,
(SELECT COUNT(*) FROM other_table WHERE id = table_name.id) as count
FROM table_name;
-- EXISTS子查询
SELECT * FROM table_name
WHERE EXISTS (SELECT 1 FROM other_table WHERE condition);
8. 联合查询
-- UNION(去重)
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;
-- UNION ALL(不去重)
SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;
-- 多表联合
SELECT column1 FROM table1
UNION
SELECT column2 FROM table2
UNION
SELECT column3 FROM table3;
9. 窗口函数(高级查询)
-- ROW_NUMBER
SELECT
id,
name,
salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
-- RANK 和 DENSE_RANK
SELECT
id,
name,
salary,
RANK() OVER (ORDER BY salary DESC) AS rank,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;
-- 分区窗口函数
SELECT
department,
name,
salary,
AVG(salary) OVER (PARTITION BY department) AS avg_salary
FROM employees;
-- 累计求和
SELECT
month,
revenue,
SUM(revenue) OVER (ORDER BY month) AS cumulative_revenue
FROM sales;
-- LAG 和 LEAD
SELECT
month,
revenue,
LAG(revenue) OVER (ORDER BY month) AS prev_month,
LEAD(revenue) OVER (ORDER BY month) AS next_month
FROM sales;
五、事务控制语句
1. 事务基本操作
-- 开始事务
START TRANSACTION;
BEGIN;
BEGIN WORK;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;
-- 设置保存点
SAVEPOINT savepoint_name;
-- 回滚到保存点
ROLLBACK TO savepoint_name;
-- 释放保存点
RELEASE SAVEPOINT savepoint_name;
2. 事务特性设置
-- 设置事务隔离级别
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 设置事务为只读
SET TRANSACTION READ ONLY;
-- 设置事务为读写
SET TRANSACTION READ WRITE;
六、索引操作语句
1. 创建索引
-- 创建普通索引
CREATE INDEX index_name ON table_name (column_name);
-- 创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_name);
-- 创建复合索引
CREATE INDEX index_name ON table_name (column1, column2, column3);
-- 创建全文索引
CREATE FULLTEXT INDEX index_name ON table_name (column_name);
-- 创建空间索引
CREATE SPATIAL INDEX index_name ON table_name (column_name);
-- 创建前缀索引
CREATE INDEX index_name ON table_name (column_name(10));
2. 查看索引
SHOW INDEX FROM table_name;
SHOW INDEXES FROM table_name;
SHOW KEYS FROM table_name;
3. 删除索引
DROP INDEX index_name ON table_name;
ALTER TABLE table_name DROP INDEX index_name;
七、视图操作语句
1. 创建视图
-- 基本视图
CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;
-- 可更新视图
CREATE VIEW updatable_view AS
SELECT id, name, department
FROM employees
WHERE active = 1;
-- 递归视图
CREATE RECURSIVE VIEW view_name (column_list) AS
SELECT ... -- 基础查询
UNION ALL
SELECT ... -- 递归查询
2. 修改视图
ALTER VIEW view_name AS
SELECT new_columns
FROM new_tables
WHERE new_conditions;
3. 删除视图
DROP VIEW view_name;
DROP VIEW IF EXISTS view_name;
4. 查看视图
SHOW FULL TABLES WHERE Table_type = 'VIEW';
SHOW CREATE VIEW view_name;
DESCRIBE view_name;
八、存储过程和函数
1. 创建存储过程
DELIMITER $$
CREATE PROCEDURE procedure_name(
IN param1 INT,
OUT param2 VARCHAR(100)
)
BEGIN
-- 存储过程体
SELECT column INTO param2 FROM table WHERE id = param1;
END $$
DELIMITER ;
2. 调用存储过程
CALL procedure_name(1, @result);
SELECT @result;
3. 删除存储过程
DROP PROCEDURE procedure_name;
DROP PROCEDURE IF EXISTS procedure_name;
4. 创建函数
DELIMITER $$
CREATE FUNCTION function_name(param INT)
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
DECLARE result VARCHAR(100);
-- 函数体
RETURN result;
END $$
DELIMITER ;
5. 调用函数
SELECT function_name(1);
九、触发器
1. 创建触发器
-- BEFORE INSERT 触发器
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END;
-- AFTER DELETE 触发器
CREATE TRIGGER trigger_name
AFTER DELETE ON table_name
FOR EACH ROW
BEGIN
INSERT INTO audit_table VALUES (OLD.id, 'DELETE', NOW());
END;
-- BEFORE UPDATE 触发器
CREATE TRIGGER trigger_name
BEFORE UPDATE ON table_name
FOR EACH ROW
BEGIN
IF NEW.column <> OLD.column THEN
SET NEW.updated_at = NOW();
END IF;
END;
2. 删除触发器
DROP TRIGGER trigger_name;
DROP TRIGGER IF EXISTS trigger_name;
3. 查看触发器
SHOW TRIGGERS;
SHOW TRIGGERS LIKE 'pattern%';
十、权限管理语句
1. 用户管理
-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
-- 修改用户密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
-- 重命名用户
RENAME USER 'old_username'@'localhost' TO 'new_username'@'localhost';
-- 删除用户
DROP USER 'username'@'localhost';
DROP USER IF EXISTS 'username'@'localhost';
2. 权限管理
-- 授予权限
GRANT SELECT, INSERT, UPDATE ON database.table TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
-- 撤销权限
REVOKE SELECT ON database.table FROM 'username'@'localhost';
REVOKE ALL PRIVILEGES ON database.* FROM 'username'@'localhost';
-- 查看权限
SHOW GRANTS FOR 'username'@'localhost';
3. 刷新权限
FLUSH PRIVILEGES;
十一、实用函数大全
1. 字符串函数
-- 连接字符串
SELECT CONCAT('Hello', ' ', 'World'); -- Hello World
SELECT CONCAT_WS(', ', 'John', 'Doe', 'Smith'); -- John, Doe, Smith
-- 截取字符串
SELECT SUBSTRING('Hello World', 1, 5); -- Hello
SELECT LEFT('Hello World', 5); -- Hello
SELECT RIGHT('Hello World', 5); -- World
-- 字符串长度
SELECT LENGTH('Hello'); -- 5
SELECT CHAR_LENGTH('Hello'); -- 5
-- 大小写转换
SELECT UPPER('hello'); -- HELLO
SELECT LOWER('HELLO'); -- hello
-- 去除空格
SELECT TRIM(' Hello '); -- Hello
SELECT LTRIM(' Hello'); -- Hello
SELECT RTRIM('Hello '); -- Hello
-- 替换字符串
SELECT REPLACE('Hello World', 'World', 'SQL'); -- Hello SQL
-- 查找位置
SELECT LOCATE('World', 'Hello World'); -- 7
SELECT POSITION('World' IN 'Hello World'); -- 7
-- 填充字符串
SELECT LPAD('123', 5, '0'); -- 00123
SELECT RPAD('123', 5, '0'); -- 12300
-- 反转字符串
SELECT REVERSE('Hello'); -- olleH
-- 格式化
SELECT FORMAT(123456.789, 2); -- 123,456.79
2. 数值函数
-- 基本运算
SELECT ABS(-10); -- 10
SELECT SIGN(-10); -- -1
SELECT CEIL(10.1); -- 11
SELECT FLOOR(10.9); -- 10
SELECT ROUND(10.567, 2); -- 10.57
-- 数学函数
SELECT SQRT(16); -- 4
SELECT POWER(2, 3); -- 8
SELECT EXP(1); -- 2.718281828459045
SELECT LOG(10); -- 2.302585092994046
SELECT LOG10(100); -- 2
-- 三角函数
SELECT SIN(RADIANS(30)); -- 0.5
SELECT COS(RADIANS(60)); -- 0.5
SELECT TAN(RADIANS(45)); -- 1
-- 随机数
SELECT RAND(); -- 0-1之间的随机数
SELECT RAND() * 100; -- 0-100之间的随机数
-- 取整
SELECT ROUND(10.5); -- 11
SELECT TRUNCATE(10.567, 2); -- 10.56
3. 日期时间函数
-- 当前时间
SELECT NOW(); -- 2023-10-01 12:00:00
SELECT CURDATE(); -- 2023-10-01
SELECT CURTIME(); -- 12:00:00
SELECT SYSDATE(); -- 2023-10-01 12:00:00
-- 提取日期部分
SELECT YEAR('2023-10-01'); -- 2023
SELECT MONTH('2023-10-01'); -- 10
SELECT DAY('2023-10-01'); -- 1
SELECT HOUR('12:30:45'); -- 12
SELECT MINUTE('12:30:45'); -- 30
SELECT SECOND('12:30:45'); -- 45
-- 日期加减
SELECT DATE_ADD('2023-10-01', INTERVAL 1 DAY); -- 2023-10-02
SELECT DATE_SUB('2023-10-01', INTERVAL 1 MONTH); -- 2023-09-01
-- 日期差
SELECT DATEDIFF('2023-10-01', '2023-09-01'); -- 30
SELECT TIMESTAMPDIFF(DAY, '2023-09-01', '2023-10-01'); -- 30
-- 日期格式化
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 2023-10-01
SELECT DATE_FORMAT(NOW(), '%H:%i:%s'); -- 12:00:00
-- 星期相关
SELECT DAYNAME('2023-10-01'); -- Sunday
SELECT DAYOFWEEK('2023-10-01'); -- 1
SELECT WEEK('2023-10-01'); -- 40
-- 时间戳转换
SELECT UNIX_TIMESTAMP(); -- 当前时间戳
SELECT FROM_UNIXTIME(1696147200); -- 2023-10-01 00:00:00
4. 条件函数
-- IF函数
SELECT IF(1 > 0, 'True', 'False'); -- True
-- CASE表达式
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM students;
-- COALESCE(返回第一个非NULL值)
SELECT COALESCE(NULL, NULL, 'default'); -- default
-- NULLIF(如果相等返回NULL)
SELECT NULLIF(10, 10); -- NULL
-- IFNULL(如果第一个为NULL,返回第二个)
SELECT IFNULL(NULL, 'default'); -- default
-- NVL(Oracle兼容)
SELECT NVL(column, 'default') FROM table;
5. 聚合函数
-- 基本聚合
SELECT COUNT(*) FROM table; -- 行数
SELECT COUNT(DISTINCT column) FROM table; -- 去重计数
SELECT SUM(column) FROM table; -- 求和
SELECT AVG(column) FROM table; -- 平均值
SELECT MAX(column) FROM table; -- 最大值
SELECT MIN(column) FROM table; -- 最小值
-- 分组聚合
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
-- 统计聚合
SELECT
COUNT(*) as total,
AVG(salary) as avg_salary,
MAX(salary) as max_salary,
MIN(salary) as min_salary
FROM employees;
-- GROUP_CONCAT
SELECT department, GROUP_CONCAT(name ORDER BY name SEPARATOR ', ')
FROM employees
GROUP BY department;
十二、备份与恢复
1. 数据库备份
# MySQL备份
mysqldump -u username -p database_name > backup.sql
# 备份所有数据库
mysqldump -u username -p --all-databases > all_backup.sql
# 备份特定表
mysqldump -u username -p database_name table1 table2 > tables_backup.sql
# 压缩备份
mysqldump -u username -p database_name | gzip > backup.sql.gz
2. 数据库恢复
# 恢复数据库
mysql -u username -p database_name < backup.sql
# 恢复压缩备份
gunzip < backup.sql.gz | mysql -u username -p database_name
3. 导出查询结果
-- 导出到文件
SELECT * INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM table_name;
-- 导出数据
EXPORT DATA
OPTIONS(uri='gs://bucket/*.csv', format='CSV')
AS SELECT * FROM table_name;
十三、性能优化语句
1. 查看执行计划
EXPLAIN SELECT * FROM table_name WHERE condition;
EXPLAIN FORMAT=JSON SELECT * FROM table_name WHERE condition;
EXPLAIN ANALYZE SELECT * FROM table_name WHERE condition;
2. 查看表锁状态
SHOW OPEN TABLES WHERE In_use > 0;
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
3. 优化表
ANALYZE TABLE table_name;
OPTIMIZE TABLE table_name;
CHECK TABLE table_name;
REPAIR TABLE table_name;
4. 索引使用情况
SHOW INDEX FROM table_name;
SHOW INDEX_STATISTICS;
十四、系统变量和状态
1. 查看系统变量
SHOW VARIABLES;
SHOW VARIABLES LIKE '%buffer%';
SELECT @@global.variable_name;
SELECT @@session.variable_name;
2. 修改系统变量
SET GLOBAL variable_name = value;
SET SESSION variable_name = value;
SET variable_name = value;
3. 查看系统状态
SHOW STATUS;
SHOW STATUS LIKE '%connections%';
SHOW GLOBAL STATUS;
十五、实用小技巧
1. 生成序列号
-- 使用变量生成序列号
SET @row_number = 0;
SELECT (@row_number:=@row_number + 1) AS row_number, column
FROM table_name;
-- 使用窗口函数
SELECT ROW_NUMBER() OVER (ORDER BY id) AS row_number, *
FROM table_name;
2. 分页查询优化
-- 使用索引覆盖
SELECT id, name FROM table_name
WHERE id > 1000
ORDER BY id
LIMIT 10;
-- 延迟关联
SELECT * FROM table_name t
JOIN (SELECT id FROM table_name ORDER BY id LIMIT 10000, 10) AS tmp
ON t.id = tmp.id;
3. 快速复制表
-- 复制表结构
CREATE TABLE new_table LIKE old_table;
-- 复制表结构和数据
CREATE TABLE new_table AS SELECT * FROM old_table;
-- 插入数据
INSERT INTO new_table SELECT * FROM old_table;
十六、常用正则表达式
-- MySQL正则表达式
SELECT * FROM table_name WHERE column REGEXP '^pattern';
SELECT * FROM table_name WHERE column REGEXP 'pattern$';
SELECT * FROM table_name WHERE column REGEXP '[0-9]+';
SELECT * FROM table_name WHERE column REGEXP '[A-Za-z]+';
-- PostgreSQL正则表达式
SELECT * FROM table_name WHERE column ~ 'pattern';
SELECT * FROM table_name WHERE column ~* 'pattern'; -- 不区分大小写
SELECT * FROM table_name WHERE column !~ 'pattern'; -- 不匹配
十七、JSON操作(MySQL 5.7+)
-- 创建JSON字段
CREATE TABLE products (
id INT PRIMARY KEY,
details JSON
);
-- 插入JSON数据
INSERT INTO products VALUES (1, '{"name": "Laptop", "price": 999.99}');
-- 查询JSON字段
SELECT details->>'$.name' AS name FROM products;
SELECT JSON_EXTRACT(details, '$.price') AS price FROM products;
-- 更新JSON字段
UPDATE products
SET details = JSON_SET(details, '$.price', 899.99)
WHERE id = 1;
-- JSON函数
SELECT JSON_ARRAY(1, 2, 3);
SELECT JSON_OBJECT('name', 'John', 'age', 30);
SELECT JSON_LENGTH('["a", "b", "c"]'); -- 3
SELECT JSON_TYPE('{"name": "John"}'); -- OBJECT
十八、空间数据(GIS)
-- 创建空间表
CREATE TABLE locations (
id INT PRIMARY KEY,
name VARCHAR(100),
point POINT NOT NULL,
SPATIAL INDEX(point)
);
-- 插入空间数据
INSERT INTO locations VALUES (1, 'Beijing', ST_GeomFromText('POINT(116.397 39.907)'));
-- 查询空间数据
SELECT * FROM locations
WHERE ST_Distance(point, ST_GeomFromText('POINT(116.397 39.907)')) < 1000;
-- 空间函数
SELECT ST_AsText(point) FROM locations;
SELECT ST_X(point), ST_Y(point) FROM locations;
SELECT ST_Distance(point1, point2);
SELECT ST_Contains(polygon, point);
总结表格
|-----------|----------------------------------------|--------------|
| 分类 | 常用语句 | 用途 |
| 数据库操作 | CREATE DATABASE, DROP DATABASE, USE | 数据库的创建、删除、切换 |
| 表操作 | CREATE TABLE, ALTER TABLE, DROP TABLE | 表的创建、修改、删除 |
| 数据操作 | INSERT, UPDATE, DELETE, SELECT | 数据的增删改查 |
| 事务控制 | BEGIN, COMMIT, ROLLBACK, SAVEPOINT | 事务管理 |
| 索引 | CREATE INDEX, DROP INDEX, SHOW INDEX | 索引管理 |
| 视图 | CREATE VIEW, ALTER VIEW, DROP VIEW | 视图管理 |
| 存储过程 | CREATE PROCEDURE, CALL, DROP PROCEDURE | 存储过程管理 |
| 触发器 | CREATE TRIGGER, DROP TRIGGER | 触发器管理 |
| 权限管理 | GRANT, REVOKE, CREATE USER | 用户和权限管理 |