Mysql常见的SQL语句格式
一、常用语法汇总
数据库(database) | 表(table) | 记录 | |
---|---|---|---|
增 | CREATE DATABASE [IF NOT EXISTS] database_name; | CREATE TABLE [IF NOT EXISTS] table_name ( column1 datatype [constraint], column2 datatype [constraint], ... [PRIMARY KEY (column_list)] ); | -- 插入记录(单条)
-- 插入多条记录 |
删 | DROP DATABASE [IF EXISTS] database_name; | DROP TABLE [IF EXISTS] table_name; | DELETE FROM table_name WHERE condition; |
改 | -- 切换数据库 USE database_name; | -- 修改表结构(示例:添加列) ALTER TABLE table_name ADD column_name datatype; | UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; |
查 | SHOW DATABASES; | -- 查看所有表 -- 查看表结构 | -- 查询记录(全量)
-- 查询特定字段
-- 条件查询
-- 排序查询
-- 分页查询(LIMIT 从 0 开始) |
常用约束与修饰符
-- 主键约束(唯一标识)
PRIMARY KEY (column)
-- 唯一约束(值不能重复)
UNIQUE (column)
-- 非空约束
NOT NULL
-- 默认值
DEFAULT value
-- 自增(整数类型)
AUTO_INCREMENT
二、示例
1.数据库操作
-- 创建数据库(存在则跳过)
CREATE DATABASE IF NOT EXISTS db_name;-- 删除数据库(谨慎使用)
DROP DATABASE IF EXISTS db_name;-- 查看所有数据库
SHOW DATABASES;-- 切换数据库
USE db_name;
2.表操作
(1)创建表
CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT DEFAULT 18,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
(2)修改表结构
-- 添加列
ALTER TABLE users ADD COLUMN phone VARCHAR(20);-- 修改列类型
ALTER TABLE users MODIFY COLUMN age TINYINT;-- 重命名列
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20);-- 删除列
ALTER TABLE users DROP COLUMN mobile;
(3)删除表
DROP TABLE IF EXISTS users;
(4)查看表信息
-- 查看表结构
DESCRIBE users;-- 查看建表语句
SHOW CREATE TABLE users;
3.记录操作
(1)插入数据
-- 单条插入
INSERT INTO users (name, age, email)
VALUES ('Alice', 25, 'alice@example.com');-- 批量插入
INSERT INTO users (name, age)
VALUES ('Bob', 30), ('Charlie', 22);-- 插入查询结果
INSERT INTO users_backup (name, age)
SELECT name, age FROM users WHERE age > 25;
(2)查询数据
-- 基础查询
SELECT * FROM users;-- 条件查询
SELECT name, age FROM users WHERE age > 25 AND name LIKE 'A%';-- 去重查询
SELECT DISTINCT age FROM users;-- 排序与分页
SELECT * FROM users ORDER BY age DESC LIMIT 10 OFFSET 20;-- 聚合函数
SELECT COUNT(*), AVG(age), MAX(age) FROM users;-- 分组查询
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;
(3)更新数据
-- 单条件更新
UPDATE users SET age = age + 1 WHERE name = 'Alice';-- 多字段更新
UPDATE users SET age = 30, email = 'bob@new.com' WHERE id = 2;-- 批量更新(基于子查询)
UPDATE users u
JOIN user_scores s ON u.id = s.user_id
SET u.age = s.age + 5;
(4)删除数据
-- 按条件删除
DELETE FROM users WHERE age < 18;-- 清空表(保留结构)
TRUNCATE TABLE users;
4.高级查询
(1)多表关联
-- 内连接
SELECT u.name, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id;-- 左连接
SELECT u.name, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
(2)子查询
SELECT * FROM users
WHERE age > (SELECT AVG(age) FROM users);
(3)联合查询
SELECT name FROM users
UNION
SELECT product_name FROM products;
三、实用技巧
1.避免全表扫描:为查询字段添加索引
CREATE INDEX idx_age ON users (age);
2.事务处理:保证数据一致性
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 或 ROLLBACK
3.临时表:提升查询效率与隔离性,会话内有效,会话关闭自动删除。
-- 创建临时表并填充数据
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, user_id, amount
FROM orders
WHERE create_time > '2023-01-01';-- 使用临时表进行后续查询
SELECT user_id, SUM(amount)
FROM temp_orders
GROUP BY user_id;