MySQL - 添加约束一次添加两次不同的情况
Posted
技术标签:
【中文标题】MySQL - 添加约束一次添加两次不同的情况【英文标题】:MySQL - adding constraint once adds it twice with diffent case 【发布时间】:2013-08-15 04:17:12 【问题描述】:当我向 mysql 表添加约束时,我有这种奇怪的行为:
[...] add constraint qrtz_blob_triggers_ibfk_1 foreign key [...]
现在 SHOW CREATE TABLE 显示约束两次:
CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY [...]
CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY [...]
这是完整的会话:
mysql> DROP DATABASE IF EXISTS my_test; CREATE DATABASE my_test 默认字符集 utf8 collate utf8_bin; 查询正常,2 行受影响(0.07 秒) 查询正常,1 行受影响(0.00 秒) mysql> 使用 my_test; 数据库已更改 mysql> mysql> DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; 查询正常,0 行受影响,1 个警告(0.00 秒) mysql> mysql> 创建表`QRTZ_TRIGGERS` ( `TRIGGER_NAME` varchar(80) NOT NULL, `TRIGGER_GROUP` varchar(80) 非空, 主键(`TRIGGER_NAME`、`TRIGGER_GROUP`) ) 引擎=InnoDB 默认字符集=utf8; 查询正常,0 行受影响(0.08 秒) mysql> mysql> DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; 查询正常,0 行受影响,1 个警告(0.00 秒) mysql> mysql> 创建表 `QRTZ_BLOB_TRIGGERS` (`TRIGGER_NAME` varchar(80) not null, `TRIGGER_GROUP` varchar(80) not null, `BLOB_DATA` longblob, 主键 (`TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET =utf8; 查询正常,0 行受影响(0.08 秒) mysql> mysql> 改变表 `QRTZ_BLOB_TRIGGERS` 添加索引 qrtz_blob_triggers_ibfk_1 (`TRIGGER_NAME`, `TRIGGER_GROUP`), 添加约束 qrtz_blob_triggers_ibfk_1 外键 (`TRIGGER_NAME`, `TRIGGER_GROUP`) 引用`QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`) ON UPDATE删除限制; 查询正常,0 行受影响(0.18 秒) 记录:0 重复:0 警告:0 mysql> mysql> 显示创建表 QRTZ_BLOB_TRIGGERS \G ****************************** 1. 行 ************************ ******* 表:QRTZ_BLOB_TRIGGERS 创建表:CREATE TABLE `QRTZ_BLOB_TRIGGERS`( `TRIGGER_NAME` varchar(80) NOT NULL, `TRIGGER_GROUP` varchar(80) 非空, `BLOB_DATA` 长块, 主键(`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `qrtz_blob_triggers_ibfk_1`(`TRIGGER_NAME`,`TRIGGER_GROUP`), 约束`qrtz_blob_triggers_ibfk_1`外键(`TRIGGER_NAME`,`TRIGGER_GROUP`)参考`QRTZ_TRIGGERS`(`TRIGGER_NAME`,`TRIGGER_GROUP`), 约束`QRTZ_BLOB_TRIGGERS_ibfk_1`外键(`TRIGGER_NAME`,`TRIGGER_GROUP`)参考`QRTZ_TRIGGERS`(`TRIGGER_NAME`,`TRIGGER_GROUP`) ) 引擎=InnoDB 默认字符集=utf8 一组中的 1 行(0.00 秒)使用
[...] add constraint QRTZ_BLOB_TRIGGERS_ibfk_1 foreign key [...]
工作正常。
我正在使用带有 MySQL 5.5 的 Ubuntu 12.04 LTS:
mysql-server-5.5 5.5.32-0ubuntu0.12.04.1
有人知道那里发生了什么吗?
【问题讨论】:
我厌倦了它......并且没有观察到相同的行为?!? 可能与lower_case_table_names
有关?
也许你添加了两次?使用两个名称删除它。
按照 MySQL 手册的建议,我有 lower_case_table_names=0:“在 Unix 和 [...] 上使用 lower_case_table_names=0”
也许您使用的是不区分大小写的文件系统? (我什至不确定 this 是否会以某种方式影响约束标识符...:°)
【参考方案1】:
这是一个known bug,固定在upcoming release:
InnoDB 将重命名用户定义的外键约束,其名称中包含字符串“ibfk”,从而导致重复约束。”
错误报告建议在 5.1.72、5.5.32、5.6.14、5.7.2 版本中进行修复,但我怀疑 5.5 分支存在拼写错误。考虑到发布日期,我希望在 v5.5.34 中进行修复。
【讨论】:
以上是关于MySQL - 添加约束一次添加两次不同的情况的主要内容,如果未能解决你的问题,请参考以下文章