翻译 InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order. Hidden columns that InnoDB adds to an index are also considered (see Section 14.6.2.1, “Clustered and Secondary Indexes”).
时间: 2023-03-13 18:51:10 浏览: 60
答:InnoDB允许外键引用任何索引列或列组。但是,在被引用的表中,必须有一个索引,其中被引用的列必须以相同的顺序作为第一列。 InnoDB添加到索引的隐藏列也是如此(参见14.6.2.1节“聚簇索引和二级索引”)。
相关问题
Incorrect table definition; there can be only one auto column and it must be defined as a key
这个错误提示意味着在建表语句中有错误,表中只能包含一个自增列,且该列必须为主键。有两种常规解决方法:一是取消自增约束,使用程序控制序号递增;二是将自增列设为主键。如果不想将自增列设为主键,还可以使用第三种解决方法:给非主键的自增列增加唯一性索引。具体的SQL语句如下:
```sql
-- 取消自增约束,使用程序控制序号递增
CREATE TABLE `example_table` (
`id` int NOT NULL COMMENT '本条记录的序号',
`real_id` int NOT NULL DEFAULT 0 COMMENT '真正的主键',
PRIMARY KEY (`real_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- 将自增列设为主键
CREATE TABLE `example_table` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '本条记录的序号',
`real_id` int NOT NULL COMMENT '真正的主键',
PRIMARY KEY (`real_id`, `id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- 给非主键的自增列增加唯一性索引
CREATE TABLE `example_table` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '本条记录的序号',
`real_id` int NOT NULL DEFAULT 0 COMMENT '真正的主键',
PRIMARY KEY (`real_id`),
UNIQUE KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
```
ENGINE=InnoDB3780 Referencing column 'm id' and referenced column 'm id' in foreign key constraint 'm id' are incompatible.
这个错误通常发生在 MySQL 数据库中,它表示在创建外键时,引用列和参考列的数据类型或属性不兼容。在您的情况中,您正在创建一个名为 `m id` 的外键,但是参考表中的列 `m id` 和当前表中的列 `m id` 的数据类型或属性不匹配。这可能是由于以下原因之一引起的:
1. 数据类型不匹配:参考表中的列和当前表中的列的数据类型不一致,例如一个是 `INT`,另一个是 `BIGINT`。
2. 字段属性不匹配:参考表中的列和当前表中的列的属性不一致,例如一个是 `UNSIGNED`,另一个是 `SIGNED`。
为了解决这个问题,您需要检查参考表和当前表中的列的数据类型和属性,并确保它们匹配。如果列的类型不同,您可以尝试将它们都更改为相同的类型。如果列的属性不同,您可以尝试将它们都更改为相同的属性。