是否可以为每个数据库禁用“sql_require_primary_key”?

Posted

技术标签:

【中文标题】是否可以为每个数据库禁用“sql_require_primary_key”?【英文标题】:Is it possible to disable `sql_require_primary_key` per database? 【发布时间】:2021-05-30 18:00:04 【问题描述】:

我有一个由 Digital Ocean 管理的 mysql 数据库。为了防止跨节点的数据复制问题,DO 自动将您的实例设置为sql_require_primary_key。理论上这很好,只是有各种 WordPress 插件,尤其是 WP Cerber,它们不支持该设置。

我可以要求 Digital Ocean 为我禁用该设置,但我冒着无法正确复制数据的风险。所以我想知道的是,有没有办法为特定的数据库甚至表禁用该设置,或者该设置是否仅限于连接设置和服务器范围的设置?

【问题讨论】:

您也可以为没有它的表创建一个 PRIMARY KEY。 我试过了。遗憾的是,该插件不允许这样做。请参阅上面的链接。 【参考方案1】:

您引用的页面上的第一个表是这样创建的:

CREATE TABLE IF NOT EXISTS cerber_log ( 
    ip varchar(39) CHARACTER SET ascii NOT NULL, 
    user_login varchar(60) NOT NULL, 
    user_id bigint(20) unsigned NOT NULL DEFAULT '0', 
    stamp bigint(20) unsigned NOT NULL, 
    activity int(10) unsigned NOT NULL DEFAULT '0', 
    KEY ip (ip) 
    ) DEFAULT CHARSET=utf8;

添加主键:

ALTER TABLE cerber_log ADD COLUMN primaryKey int primary key auto_increment;

您可以为字段 primaryKey 使用任何名称,只要它不是现有字段即可。

这不应该干扰插件。如果确实如此,那么您可能根本不应该(想要)使用该插件。

【讨论】:

以上是关于是否可以为每个数据库禁用“sql_require_primary_key”?的主要内容,如果未能解决你的问题,请参考以下文章

在每个文件(不是文件类型)的基础上禁用自动填充模式

UITouch - 是不是可以禁用多次点击

是否可以在颤动的可重新排序的列表视图中禁用对单个项目的重新排序?

使用 GCC,我可以在每个功能的基础上禁用 -Wframe-larger-than 吗?

Primefaces:禁用数据缓冲区的ajaxStatus

是否可以在 tslint.json 中禁用 TSLint?