CRUD就是Create、Read、Update、Delete,对应SQL里的INSERT、SELECT、UPDATE、DELETE。掌握了这四个操作,日常80%的数据库需求都能搞定。
先建个表做实验,假设有个用户表:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
字段说明:id自增主键,name不能为空,email唯一约束,age默认0,created_at自动记录插入时间。
CREATE – 插入数据
单条插入:
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);
values顺序必须和前面指定的字段顺序一致。如果不指定字段,就要按表结构顺序写全所有字段(包括id和created_at),容易出错,不推荐。
批量插入多条数据:
INSERT INTO users (name, email, age) VALUES
('李四', 'lisi@example.com', 30),
('王五', 'wangwu@example.com', 22),
('赵六', 'zhaoliu@example.com', 28);
一次插入多条比逐条插入快很多,因为减少了SQL解析和网络往返。
插入时忽略重复数据(基于唯一约束):
INSERT IGNORE INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 26);
如果email已存在,这条语句不会报错,只是跳过。想更新已存在的数据用ON DUPLICATE KEY UPDATE,后面讲。
READ – 查询数据
查全部:
SELECT * FROM users;
生产环境慎用*,只查需要的字段更高效:
SELECT name, email FROM users;
条件查询:
SELECT * FROM users WHERE age > 25;
多个条件用AND/OR:
SELECT * FROM users WHERE age > 25 AND name LIKE '张%';
LIKE的%是通配符,匹配任意字符。注意LIKE性能差,数据量大时考虑全文索引。
排序:
SELECT * FROM users ORDER BY age DESC;
DESC降序,ASC升序(默认)。
分页:
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20;
LIMIT是返回条数,OFFSET是跳过多少条。OFFSET越大越慢,因为数据库还是要扫描前面的行。深分页优化要用游标或子查询。
UPDATE – 更新数据
一定要带WHERE条件,否则全表更新:
UPDATE users SET age = 26 WHERE name = '张三';
更新多个字段:
UPDATE users SET age = 27, email = 'zhangsan_new@example.com' WHERE id = 1;
UPDATE支持表达式,比如年龄加1:
UPDATE users SET age = age + 1 WHERE id = 2;
之前提到的INSERT … ON DUPLICATE KEY UPDATE,当插入冲突时执行更新:
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 30)
ON DUPLICATE KEY UPDATE age = VALUES(age);
VALUES(age)取的是你插入语句里的值,这里就是30。
DELETE – 删除数据
同样要带WHERE,不然删全表:
DELETE FROM users WHERE id = 4;
删除所有数据但保留表结构:
DELETE FROM users;
或者用TRUNCATE更快,但无法回滚:
TRUNCATE TABLE users;
TRUNCATE会重置自增ID,DELETE不会。TRUNCATE相当于drop重建表,DELETE是逐行删除。
软删除建议:实际业务很少真删数据,加个is_deleted字段标记:
ALTER TABLE users ADD is_deleted TINYINT DEFAULT 0;
UPDATE users SET is_deleted = 1 WHERE id = 5;
查询时过滤掉已删除的:`WHERE is_deleted = 0`。
几个实用技巧
查看表结构:
DESC users;
查看建表语句:
SHOW CREATE TABLE users;
查看当前数据库所有表:
SHOW TABLES;
事务处理:CRUD组合操作时,保证要么全成功要么全失败:
START TRANSACTION;
UPDATE users SET age = age - 1 WHERE id = 1;
UPDATE users SET age = age + 1 WHERE id = 2;
COMMIT;
-- 如果中间出错,执行 ROLLBACK;
事务只在InnoDB引擎下有效,MyISAM不支持事务。
关于数据库部署,如果自己搭服务器嫌麻烦,可以用雨云的MySQL云数据库,性价比高、稳定、好用,省去运维时间,直接连上就能跑CRUD。
提醒一句:写UPDATE和DELETE之前,先跑SELECT确认WHERE条件是对的。我见过太多人把整表数据改没了。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容