MySQL 外键 - 创建表时出现错误 150

标签 mysql sql foreign-keys foreign-key-relationship

我编写了一些 SQL 代码来创建五个具有多个关系(外键)的表。

第一个外键关系工作正常,创建的表没有任何错误,但是当我尝试创建 gasten_url_toegangscodes 时,出现以下错误:

#1005 - Can't create table 'dbname.gasten_url_toegangscodes' (errno: 150).

我已经阅读了有关外键的文档,但仍然找不到问题..最奇怪的是它在前三个表中工作..

有人可以帮我吗?

我的完整 SQL 代码是:

CREATE TABLE IF NOT EXISTS `groepen` (
  `id` tinyint(3) NOT NULL AUTO_INCREMENT,
  `naam` varchar(50) NOT NULL DEFAULT '',
  `status` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `gasten` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `bedrijf` varchar(100) NOT NULL DEFAULT '',
  `uniek` varchar(64) NOT NULL,
  `groepid` tinyint(3) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (groepid) REFERENCES `groepen` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `passen` (
  `id` tinyint(3) NOT NULL AUTO_INCREMENT,
  `naam` varchar(30) NOT NULL DEFAULT '',
  `color` varchar(7) NOT NULL DEFAULT '#FFFFFF',
  `bekend` tinyint(1) NOT NULL DEFAULT '0',
  `welkom` tinyint(1) NOT NULL DEFAULT '0',
  `aantal` tinyint(1) NOT NULL DEFAULT '0',
  `nummer` int(11) NOT NULL DEFAULT '0',
  `begrens` tinyint(1) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '1',
  `priority` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `naam` (`naam`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `gasten_url_toegangscodes` (
  `uniek` varchar(64) NOT NULL,
  `unieke_url_code` char(64) NOT NULL,
  `salt` char(16) NOT NULL,
  FOREIGN KEY (uniek) REFERENCES `gasten` (`uniek`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `gasten_tickets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pas_id` tinyint(3) NOT NULL,
  `uniek` varchar(64) NOT NULL,
  `barcode` char(16) NOT NULL,
  `secret_key` char(32) NOT NULL,
  `download_count` int(11) NOT NULL DEFAULT '0',
  `last_download_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `scanned` enum('N','Y') NOT NULL,
  `scanned_datetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  FOREIGN KEY (uniek) REFERENCES `gasten` (`uniek`) ON DELETE CASCADE ON UPDATE NO ACTION,
  FOREIGN KEY (pas_id) REFERENCES `passen` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB;

提前致谢!

最佳答案

gasten.uniek 上创建索引

CREATE TABLE IF NOT EXISTS `gasten` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `bedrijf` varchar(100) NOT NULL DEFAULT '',
  `uniek` varchar(64) NOT NULL,
  `groepid` tinyint(3) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `idx_uniek` (`uniek`),
  FOREIGN KEY (groepid) REFERENCES `groepen` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB;

并将gasten_url_toegangscodes中FK的字符集设置为与gasten中相关列的字符集相同。

假设 gasten 是 UTF-8:

CREATE TABLE IF NOT EXISTS `gasten_url_toegangscodes` (
  /* use same charset for this column */
  `uniek` varchar(64) NOT NULL CHARSET UTF-8,
  `unieke_url_code` char(64) NOT NULL,
  `salt` char(16) NOT NULL,
  FOREIGN KEY (uniek) REFERENCES `gasten` (`uniek`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

关于MySQL 外键 - 创建表时出现错误 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647044/

相关文章:

mysql - 如何使用 MySQL OUTFILE 从表中获取所有行

SQL:计算日复一日的重复用户百分比

mysql - Access : Search and Update Query

java - Hibernate - 外键而不是实体

mysql - 当同时连接到同一个表时,如何按 Rails 中的聚合计数进行排序?

c# - 从 mysql 数据库中的 EdmGem.exe 生成实体类(ssdl、csdl、msl 等)时出错

mysql - 使用事件调度程序更新多行

php - laravel DB,获取表中的所有数据

mysql - 如何解决 MySQL 错误,因为错误 1215,无法添加外键约束?

laravel - 一般错误 : 1824 Failed to open the referenced table