目录
一、数据定义语言(DDL)
DDL用于定义或修改数据库结构,包括创建、修改和删除数据库对象(如表、索引、视图等)。
1. 创建数据库和表
-- 创建数据库
CREATE DATABASE my_database;
-- 使用数据库
USE my_database;
-- 创建表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 修改表结构
-- 添加列
ALTER TABLE users ADD COLUMN age INT;
-- 修改列类型
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);
-- 删除列
ALTER TABLE users DROP COLUMN age;
3. 删除表和数据库
-- 删除表
DROP TABLE users;
-- 删除数据库
DROP DATABASE my_database;
二、数据操作语言(DML)
DML用于对数据库中的数据进行操作,包括插入、更新和删除。
1. 插入数据
-- 单行插入
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
-- 多行插入
INSERT INTO users (username, email) VALUES
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
2. 更新数据
-- 更新单行
UPDATE users SET email = 'alice_new@example.com' WHERE username = 'Alice';
-- 更新多行
UPDATE users SET email = 'no_email@example.com' WHERE email IS NULL;
3. 删除数据
-- 删除指定行
DELETE FROM users WHERE username = 'Bob';
-- 删除所有行(保留表结构)
TRUNCATE TABLE users;
三、数据查询语言(DQL)
DQL的核心是SELECT
语句,用于从数据库中检索数据。
1. 基本查询
-- 查询所有列
SELECT * FROM users;
-- 查询指定列
SELECT username, email FROM users;
2. 条件查询
-- 使用WHERE过滤
SELECT * FROM users WHERE email LIKE '%example.com';
-- 使用逻辑运算符
SELECT * FROM users WHERE age > 25 AND email IS NOT NULL;
3. 排序和限制
-- 按列排序
SELECT * FROM users ORDER BY created_at DESC;
-- 限制返回行数
SELECT * FROM users LIMIT 10;
4. 聚合函数
-- 统计行数
SELECT COUNT(*) FROM users;
-- 计算平均值
SELECT AVG(age) FROM users;
5. 分组查询
-- 按列分组并统计
SELECT email, COUNT(*) AS user_count FROM users GROUP BY email;
-- 使用HAVING过滤分组
SELECT email, COUNT(*) AS user_count FROM users GROUP BY email HAVING user_count > 1;
6. 连接查询
-- 内连接,返回符合条件的记录
SELECT u.username, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id;
-- 左连接,返回左表所有记录和右表符合条件的记录
SELECT u.username, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
四、数据控制语言(DCL)
DCL用于控制数据库的访问权限,包括用户管理和权限分配。
1. 创建用户
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
2. 分配权限
GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';
-- 授予特定权限
GRANT SELECT, INSERT ON my_database.users TO 'new_user'@'localhost';
3. 撤销权限
REVOKE ALL PRIVILEGES ON my_database.* FROM 'new_user'@'localhost';
4. 删除用户
DROP USER 'new_user'@'localhost';
五、事务控制语言(TCL)
TCL用于管理事务,确保数据的一致性和完整性。
1. 基本事务操作
-- 开启事务
START TRANSACTION;
INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
COMMIT; -- 提交事务
-- ROLLBACK; -- 回滚事务
2. 设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
六、索引与优化
索引是提高查询性能的关键,MySQL支持多种索引类型。
1. 创建索引
-- 创建普通索引
CREATE INDEX idx_username ON users (username);
-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);
2. 查看索引
SHOW INDEX FROM users;
3. 删除索引
DROP INDEX idx_username ON users;