本文讲解 SQL 基础语句、索引、视图、触发器核心用法,基于 MySQL 环境,极简实操。
一、基础 SQL 语句
1. 库表操作
sql
-- 创建数据库
CREATE DATABASE test_db;
-- 使用数据库
USE test_db;
-- 创建用户表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
age INT,
create_time DATETIME DEFAULT NOW()
);
-- 查看表结构
DESC user;
-- 删除表
DROP TABLE user;
-- 删除数据库
DROP DATABASE test_db;
2. 增删改查(CRUD)
sql
-- 插入单条数据
INSERT INTO user(username, age) VALUES('zhangsan', 22);
-- 插入多条数据
INSERT INTO user(username, age) VALUES('lisi', 25),('wangwu', 23);
-- 查询全表
SELECT * FROM user;
-- 条件查询
SELECT username,age FROM user WHERE age>22;
-- 排序+分页
SELECT * FROM user ORDER BY age DESC LIMIT 2;
-- 聚合查询
SELECT COUNT(*) AS total,AVG(age) AS avg_age FROM user;
-- 修改数据
UPDATE user SET age=26 WHERE username='lisi';
-- 删除数据
DELETE FROM user WHERE id=1;
3. 高级查询
sql
-- 去重
SELECT DISTINCT age FROM user;
-- 模糊查询
SELECT * FROM user WHERE username LIKE 'z%';
-- 分组筛选
SELECT age,COUNT(*) FROM user GROUP BY age HAVING COUNT(*)>1;
-- 内连接
CREATE TABLE order_tb(
oid INT PRIMARY KEY AUTO_INCREMENT,
uid INT,
money DECIMAL(10,2),
FOREIGN KEY(uid) REFERENCES user(id)
);
SELECT u.username,o.money FROM user u INNER JOIN order_tb o ON u.id=o.uid;
-- 左连接
SELECT u.username,o.money FROM user u LEFT JOIN order_tb o ON u.id=o.uid;
二、索引
1. 索引类型与创建
sql
-- 普通索引
CREATE INDEX idx_username ON user(username);
-- 唯一索引
CREATE UNIQUE INDEX idx_age ON user(age);
-- 主键索引(建表时自动创建)
-- 复合索引
CREATE INDEX idx_name_age ON user(username,age);
-- 全文索引
CREATE FULLTEXT INDEX idx_ft_username ON user(username);
2. 索引管理
sql
-- 查看表索引
SHOW INDEX FROM user;
-- 删除索引
DROP INDEX idx_username ON user;
-- 执行计划(查看是否使用索引)
EXPLAIN SELECT * FROM user WHERE username='zhangsan';
3. 索引使用规则
sql
-- 生效:索引列直接查询
SELECT * FROM user WHERE username='zhangsan';
-- 失效:索引列运算/函数/模糊查询前置%
SELECT * FROM user WHERE age+1=23;
SELECT * FROM user WHERE username LIKE '%zhang';
SELECT * FROM user WHERE SUBSTRING(username,1,1)='z';
三、视图
1. 视图创建与查询
sql
-- 创建单表视图
CREATE VIEW v_user AS SELECT id,username,age FROM user WHERE age>20;
-- 查询视图
SELECT * FROM v_user;
-- 创建多表联合视图
CREATE VIEW v_user_order AS
SELECT u.id,u.username,o.money FROM user u
LEFT JOIN order_tb o ON u.id=o.uid;
2. 视图管理
sql
-- 修改视图
CREATE OR REPLACE VIEW v_user AS SELECT id,username FROM user;
-- 删除视图
DROP VIEW v_user;
-- 查看视图定义
SHOW CREATE VIEW v_user;
3. 视图更新
sql
-- 简单视图可更新
UPDATE v_user SET username='zhangsan_new' WHERE id=1;
-- 复杂视图(聚合/分组/连接)不可更新
四、触发器
1. 插入触发器
sql
-- 创建日志表
CREATE TABLE user_log(
lid INT PRIMARY KEY AUTO_INCREMENT,
info VARCHAR(50),
create_time DATETIME DEFAULT NOW()
);
-- 插入后触发
DELIMITER //
CREATE TRIGGER tri_user_after_insert
AFTER INSERT ON user FOR EACH ROW
BEGIN
INSERT INTO user_log(info) VALUES(CONCAT('新增用户:',NEW.username));
END //
DELIMITER ;
-- 测试
INSERT INTO user(username,age) VALUES('zhaoliu',24);
SELECT * FROM user_log;
2. 更新 / 删除触发器
sql
-- 更新后触发
DELIMITER //
CREATE TRIGGER tri_user_after_update
AFTER UPDATE ON user FOR EACH ROW
BEGIN
INSERT INTO user_log(info)
VALUES(CONCAT('修改用户:旧名',OLD.username,'->新名',NEW.username));
END //
-- 删除前触发
CREATE TRIGGER tri_user_before_delete
BEFORE DELETE ON user FOR EACH ROW
BEGIN
INSERT INTO user_log(info) VALUES(CONCAT('删除用户:',OLD.username));
END //
DELIMITER ;
-- 测试
UPDATE user SET username='zhaoliu_new' WHERE id=4;
DELETE FROM user WHERE id=4;
3. 触发器管理
sql
-- 查看触发器
SHOW TRIGGERS;
-- 删除触发器
DROP TRIGGER IF EXISTS tri_user_after_insert;
总结
- SQL 基础:库表操作 + 增删改查 + 连接查询,核心数据操作基础
- 索引:提升查询速度,避免索引失效,按需创建
- 视图:简化复杂查询,保障数据安全,简单视图可更新
- 触发器:自动触发业务逻辑,基于表增删改事件联动操作