故障分析 | MySQL 无法修改主键?原来是因为这个参数

作者:刘晨,网名 bisal ,具有十年以上的应用运维工作经验,目前主要从事数据库应用研发能力提升和技术管理相关的工作,Oracle ACE(Alumni),腾讯云TVP,拥有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等国际认证,国内首批 Oracle YEP 成员,OCMU 成员,《DevOps 最佳实践》中文译者之一,CSDN & ITPub 专家博主,公众号”bisal的个人杂货铺”,长期坚持分享技术文章,多次在线上和线下分享技术主题。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 800 字,预计阅读需要 2 分钟。


1问题背景

同事咨询了一个问题,TDSQL(for MySQL)中的某张表主键需要改为联合主键,是否必须先删除现有的主键?因为删除主键时,提示这个错误。

[test]> alter table test drop primary key;<br>ERROR 3750 (HY000): Unable to create or change a table without a primary key, <br>when the system variable 'sql_require_primary_key' is set. <br>Add a primary key to the table or unset this variable to avoid this message. <br>Note that tables without a primary key can cause performance problems in row-based replication, <br>so please consult your DBA before changing this setting.<br>

sql_require_primary_key 参数控制的是强制检查主键,可以动态修改。

参数名称:sql_require_primary_key<br>作用范围:Global & Session<br>动态修改:Yes<br>默认值:OFF<br>该参数设置为 ON 时,SQL 语句 create table 创建新表或者 alter 语句时,对已存在的表进行修改,将会强制检查表中是否包含主键,如果没有主键,则会报错。