MySQL如何改变值_MySQL数据更新与字段值修改教程

说实话,当我第一次接手这个项目时,在更改 MySQL 数据方面我做了很多变通办法。
UPDATE看似简单,但确实需要避免错误。
这里面有很多技巧。
我们以上面的文档为例。
有几件事需要记住。

例如,过程“先选择,然后更新”。
我曾经有一个项目。
当我半夜做作业时,我突然发现我纠正了错误的分类条件,于是我立即更改了整个表中的5 000个数据点。
差点第二天运维就收到性能警告了。
后来我就养成了在更改之前必须先选择的习惯,即使只是运行“WHERE条件”来确认,我也感到平静。
老实说,这比记住任何语法规则更有用。

有趣的是计算公式的更新。
我曾经帮我的老板改变过促销价格。
如果我分两步完成此操作 - 首先检查库存 <1>后来我直接用“stock<1>老板还夸我技术好。
但这里需要注意的是,在SQL中嵌套过多的表达式会导致混乱。
我的一位同事写了这样的声明:“price=price1 .1 +CASE WHEN stock<1>最后我看不懂,所以我把它分成了两句话。

说到 JOIN 更新,这是我遇到过的最烦人的情况。
有一个旧系统,其表结构非常混乱。
用户表和订单表通过电子邮件链接。
结果JOIN条件写反了,三个城市的订单全部改为上海。
这个数据量将直接向服务器处理器发出警报。
因此,现在在编写 JOIN 更新时,我必须添加“EXPLAIN”并首先运行计划以查看哪个表已建立索引以及哪个表已完全建立索引已扫描。
我自己没有运行这个。
我记得数据是关于X的,但我建议你查看MySQL手册中关于JOIN成本管理的部分。

最后,我们来谈谈生意。
我有一个朋友的公司。
更新操作失败,数据库突然崩溃。
结果,所有更改的数据都丢失了。
后来我改用了 START TRANSACTION;...COMMIT;,这有点复杂,但至少如果出现问题我可以回滚。
老实说,这几十秒的延迟是值得的。

现在,当更改数据时,我通常遵循以下流程:首先,我在本地开发环境中运行 SELECT+UPDATE 以确保逻辑正确;然后使用mysqldump导出表结构,这样如果发生严重的情况我可以快速恢复;最后,使用事务在生产中执行,并在更改后立即发出 COMMIT。
虽然缓慢,但心却很踏实。

python mysql自增字段AUTO_INCREMENT值的修改方式

说白了,修改MySQL表的AUTO_INCRMENT值需要三个步骤:看现在、改变未来、等待结果。

我们先来说最重要的事情,现在让我们看看这个值是如何工作的。
去年我们实施了一个电子商务项目。
插入用户数据后,我们直接使用user SHOW CREATE TABLE;要求。
表结构中的字符串AUTO_INCRMENT=...可以看到当前值。
该值是下一个用户注册时自动填写的 ID。
例如,如果您看到它是 9 9 9 ,那么数据将从 1 000 条增加到 1 000 条。

另一点需要记住的是更改将来时的陷阱。
去年改配置表的时候,直接运行ALTER TABLE config AUTO_INCRMENT=5 000;,但是MySQL直接给我报错“新值不能小于等于当前最大值”。
当时我很困惑,但后来我发现我必须 SELECT MAX(id) FROM config;找到最大值并在更改之前加 1 很多人都没有注意到这一点,说实话,这是一个很大的陷阱。

还有另一个重要的细节。
删除表后,AUTO_INCREMENT值不会自动返回0。
例如删除所有订单数据,直接插入新订单,ID仍会从原来的最大值继续增加。
您必须首先更改新值,然后执行 TRUNCATE TABLE 命令;删除它,最后插入数据。

一开始我以为清空表就足够了,但后来我发现这是错误的,我使用了DELETE FROM命令;它根本不起作用。
等等,还有一件事。
如果表中除自增ID外还有其他索引,最好使用ALTER TABLE DISABLE KEYS语句;在更改值之前禁用索引,然后使用 ALTER TABLE 命令 ENABLE KEYS;更改值后恢复,否则会影响性能。

建议使用pymysql直接在Python中执行这四个步骤。
记得尝试一下...除了处理 SQL 错误。
您认为哪种方法风险较小,使用ALTER TABLE更改值还是临时删除并重建表?