一、数据库的核心概念
二、SQL 语句分类
ALTER TABLE users ADD INDEX idx_created_at (created_at); -- 添加索引
UPDATE users SET status = 'inactive' WHERE last_login < '2023-01-01';
GRANT SELECT, INSERT ON sales.* TO 'report_user'@'%';
三、数据库操作
CREATE DATABASE database_name;
DROP DATABASE database_name;
USE database_name;
四、表操作
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DROP TABLE users;
-- 添加列
ALTER TABLE users ADD COLUMN address VARCHAR(200);
-- 删除列
ALTER TABLE users DROP COLUMN age;
-- 修改列类型
ALTER TABLE users MODIFY COLUMN name VARCHAR(100);
DESC users;
五、数据操作(CRUD)
INSERT INTO users (name, email, age)
VALUES ('张三', '[email protected]', 25);
-- 查询所有字段
SELECT * FROM users;
-- 条件查询
SELECT name, email FROM users WHERE age > 20;
-- 排序
SELECT * FROM users ORDER BY created_at DESC;
-- 分页
SELECT * FROM users LIMIT 10 OFFSET 0; -- 第1页,每页10条
-- 聚合函数
SELECT COUNT(*) AS total_users FROM users;
SELECT AVG(age) FROM users;
-- 多表连接(JOIN)
SELECT orders.id, users.name
FROM orders
LEFT JOIN users ON orders.user_id = users.id;
UPDATE users
SET age = 26, email = '[email protected]'
WHERE id = 1;
DELETE FROM users WHERE id = 1;
-- 清空表(谨慎使用!)
TRUNCATE TABLE users;
六、索引优化
CREATE INDEX idx_name ON users(name);
CREATE UNIQUE INDEX idx_email ON users(email);
DROP INDEX idx_name ON users;
七、事务管理
START TRANSACTION;
-- 执行操作(如插入、更新)
INSERT INTO orders (user_id, amount) VALUES (1, 100);
UPDATE users SET balance = balance - 100 WHERE id = 1;
-- 提交或回滚
COMMIT; -- 确认操作
ROLLBACK; -- 撤销操作
八.用户与权限
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON database_name.* TO 'new_user'@'localhost';
REVOKE DELETE ON database_name.* FROM 'user'@'localhost';
九.备份与恢复
mysqldump -u username -p database_name > backup.sql
mysql -u username -p database_name < backup.sql
十、进阶操作
DELIMITER //
CREATE PROCEDURE GetUser(IN userId INT)
BEGIN
SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;
-- 调用存储过程
CALL GetUser(1);
CREATE VIEW user_summary AS
SELECT id, name, email FROM users WHERE age > 18;