MySQL如何改主键_MySQL主键修改与约束调整教程

那天晚上我在加班,在整理服务器日志的时候,突然发现了一个奇怪的主键重复错误。
该数据库是2 01 9 年双十一上线的一个小型电商系统,表结构设计得比较随机,主键始终采用INT自增。
现在我需要将其更改为 UUID 类型。
经过一个周末的努力,我终于弄清楚了这些细节。
等等,还有别的事。
花了好几页才找到外键依赖项。
information_schema 表确实是一个宝藏。

删除旧主键时遇到的最大陷阱是自增属性。
必须先手动将AUTO_INCRMENT=1 替换为普通的INT,否则ALTER TABLE会报错,提示存在语法冲突。
重置自增值时,因为表中有百万条数据,直接执行ALTER TABLE your_table AUTO_INCRMENT=1 001 卡了半个小时。
后来我改用 pt-online-schema-change 来解决这个问题。
数据类型转换中最麻烦的部分是varchar列。
本来是用业务代码作为主键的。
更改UUID后,所有相关表的引用字段必须同时更改。
花了十几次才弄对。

大表优化策略中,测试时INPLACE算法占用CPU 9 0%,锁表五分钟导致前端查询超时。
最后使用pt-online-schema-change的--lock-timeout=1 0秒参数批量更改,每批只添加三个字段的主键约束。
分区操作原定在周一进行,但监控发现晚高峰期间QPS峰值可达8 000,所以临时改在凌晨3 点到5 点之间,恢复计划准备了三个版本的SQL。
最后发现只需重建原来的主键,外键约束就自动恢复了。

现在我突然想到,如果当时使用MySQL 8 .0,可能根本就不会出现这样的问题。
重命名原始表的 CTAS+ 就足够了。
架构师表示下个月将推广分布式架构,看来这笔技术债必须提前还清了。

如何在MySQL中设置外键约束以及外键的作用

记得有一次,我负责一个电商项目,表结构包括用户信息和订单信息。
用户信息表(users)具有主键user_id,订单信息表(orders)具有外键order_user_id,该外键引用用户信息表的主键。
有一次,我尝试插入一条命令记录,但是用户数据表中没有匹配的user_id。
结果,数据库拒绝了我的工作。
那个时候我才真正明白了外键约束的重要性。
它充当看门人的角色,确保数据的准确性和一致性。
等等,还有一件事,我突然想到,如果a表的数据量很大,b表的查询性能会不会受到影响?

了解MySQL中的外键作用

2 02 3 年,朋友的公司使用MySQL,表之间使用外键,保证数据的一致性和完整性。
数据关联约束,例如example2 的stu_id和course_id必须存在于example1 中,否则更新将失败。
限制机制,如RESTRICT/NOACTION,禁止删除原表数据,以及后续的CASCADE删除。
设置空/默认值。
例如,如果父表发生变化,子表可以设置为NULL或默认值。
应用场景很多,比如学生选课系统,防止学生信息和选课记录一起被删除。
但需要注意的是,国外交换机会增加操作复杂度和性能负担,因此应合理使用。
我发现,外键非常有趣。