mysql 增删查改如何实现-MySQL 增删查改实操
比如想拉取用户列表,别说“SELECT users WHERE id > 1000"这种教科书式写法,直接 `SELECT FROM users WHERE id > 1000;` 敲上去,顺便加个 `LIMIT 100 20`。
为啥?出于 MySQL 存的是行,不是逻辑,你写 `SELECT ` 实际上是想连电脑屏幕都拉满,但这玩意儿在细粒度的表里就是灾难。更次一点的,别总想着先建个索引 `CREATE INDEX idx_id ON users(id);`,那样我你得先意识到索引存有,然后手动建,最终再启用,流程忒绕。我们直接 `CREATE INDEX idx_users_id ON users(id);` 一行搞定,顺便让 `ORDER BY` 和 `LIMIT` 都跑得飞快,性能提升那是物理意义上的拉满。 有些场景下我就连懒得查文档,凭直觉就写 `DROP TABLE some_table;` 要么 `DELETE FROM users WHERE status = 0;`。为了省事我就连会把表名拼了,要么干脆写死成 `DELETE FROM users WHERE 1=0;`,反正数据得清空。
这种操作的底层逻辑实际上挺好办:只要数据库账号有权限,只要表在数据库目录里就能删,不需求算复杂的逻辑。自然,要是是造环境里的核心表,我就得对得起铁律,老老实实建索引、设约束,哪怕是为了防止别人半夜偷偷删库。 有时候数据更新比查询还关键。刚入职的时候我总想先把所有数据导入 CSV,然后写个脚本批量处理。结局导入完才发现表结构乱了,字段名都不对,最终还得重新建表,数据还得重跑。目前的流程是,我只需求写个 SQL,比如 `UPDATE my_table SET status = 'active' WHERE created_at < '2023-01-01';`。我直接 ` update_status` 给个命令,数据一变,后端自动感知,我再拿个报告看看,是不是只有这一条数据变了?要是变的多了,我再查表确认,这样既快又准,还能顺便排查有没有写错。 别看我认定这种“暴力”方式挺高效,但间或还是需求一点点仪式感。
比如要加个外键约束,我会先写个 `ALTER TABLE users ADD CONSTRAINT fk_user_role FOREIGN KEY (role_id) REFERENCES roles(id);`。
这话听起来像是在念咒,实际上就是在告诉数据库两个表之间要建立联系。删完表数据没了,重新建表还得写一段代码去清理旧数据、重建索引,那费事大了。
故此,我一般不删表,只改约束,要不就是那种脏数据务必清理的时候。 还有时候我得面对一些“伪代码”,也就是看起来像 SQL 实际上没啥用处的语句。
比如 `SET @temp_user_id = 999;` 这种,我嘴上说是为了测试,实际上是想混个脸熟。配合 `SELECT FROM users WHERE id = @temp_user_id;` 一查,嘿,系统提示“未知变量”,这就能立马告诉架构师“这数据库没预备好”。
要么写点 `SELECT FROM users WHERE id = 12345 OR invalid;`,反正有时候我就想看看能不能用逻辑守卫,结局数据库直接报错说 `Invalid argument`,别看这玩意儿在旧版本里常见,但在 MySQL 新版里根本没用,还是老老实实用参数化查询吧。 最终,我也得提个坏心情。
有时候数据忒脏了,我干脆直接 `TRUNCATE TABLE users;`,不管历史数据留没留,反正删除它就是空的,然后 `INSERT INTO new_table ...` 再补上。
要么干脆 `ALTER TABLE users ADD COLUMN age INT NOT NULL;` 加完列,数据务必得迁,还得跑迁移脚本,那时候我恨不得把数据库字符集一起改,不然全表都是乱码。 总的来说,我的数据库日常就是:查就查,删就删,改就改,少思索。
只要数据在数据库里,我就得把它当物理内存来管,别总想着在逻辑层加一堆复杂的包装。
毕竟,数据库是死的,人是活的,我只要给点指令,数据自然就出来了。
要是哪天忘了建索引,下次查表还得忍着一下排序慢的尴尬,但起码不会像老师那样说“起初、其次”了,那忒假了。
注意事项:
部分资源可能会出现广告/收费服务/VIP课程等内容,请自行甄别,以免上当受骗。
本篇资源由【静秋百科网】收集自互联网,仅供学习参考使用,请勿用于其他用途!
转载请标明出处,谢谢。