mysql - 来自单父表的两个外键约束不起作用

标签 mysql

我正在尝试从单个父表创建两个具有两个外键约束的表。

这两个父子表有什么问题吗?

我的数据库中只有这两个表(我删除了所有其他表):

-- -----------------------------------------------------
-- Table `db_test`.`tbl_test_monitoring_type`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `db_test`.`tbl_test_monitoring_type` (
  `id` SMALLINT NOT NULL AUTO_INCREMENT COMMENT 'Synthetic ID for an Order Status.',
  `monitoring_type` VARCHAR(1) NOT NULL,
  `message_type` VARCHAR(1) NOT NULL,
  `description` VARCHAR(255) NOT NULL,
  `creared_by` VARCHAR(10) NULL COMMENT 'staff PK number',
  `modified_by` VARCHAR(10) NULL COMMENT 'staff PK number',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `ukidx_monitoring_type` (`monitoring_type` ASC, `message_type` ASC))
ENGINE = InnoDB
COMMENT = 'Lookup table for storing monitorying types.';

-- -----------------------------------------------------
-- Table `db_test`.`tbl_test_monitoring`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `db_test`.`tbl_test_monitoring` (
  `id` SMALLINT NOT NULL AUTO_INCREMENT COMMENT 'Synthetic ID for an Order Status.',
  `monitoring_type` VARCHAR(1) NOT NULL,
  `message_type` VARCHAR(1) NOT NULL,
  `date` TIMESTAMP NOT NULL COMMENT 'Date of monitoring recorded.',
  `message` VARCHAR(500) NULL COMMENT 'More information attached by the user.' ,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `ukidx_monitoring_type_message_type` (`monitoring_type` ASC, `message_type` ASC),
  CONSTRAINT `fk_test_message_type_monitoring`
    FOREIGN KEY (`message_type`)
    REFERENCES `db_test`.`tbl_test_monitoring_type` (`message_type`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Table to store complete information about monitoring';

我在第二个外键约束中遇到问题。 IE。如果我添加第二个外部,则不会创建表 tbl_test_monitoring。第二个约束

CONSTRAINT `fk_test_message_type_monitoring`
    FOREIGN KEY (`message_type`)
    REFERENCES `db_test`.`tbl_test_monitoring_type` (`message_type`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

这两个是两个数据库,依赖于任何现有的数据库。 我尝试删除所有其他表,即使出现上述错误。

最佳答案

引用的列需要建立索引。尝试这样:

CREATE TABLE IF NOT EXISTS `tbl_test_monitoring_type` (
  `id` SMALLINT NOT NULL AUTO_INCREMENT COMMENT 'Synthetic ID for an Order Status.',
  `monitoring_type` VARCHAR(1) NOT NULL,
  `message_type` VARCHAR(1) NOT NULL,
  `description` VARCHAR(255) NOT NULL,
  `creared_by` VARCHAR(10) NULL COMMENT 'staff PK number',
  `modified_by` VARCHAR(10) NULL COMMENT 'staff PK number',
  PRIMARY KEY (`id`),
  INDEX idx_messagetype (message_type),
  UNIQUE INDEX `ukidx_monitoring_type` (`monitoring_type` ASC, `message_type` ASC))
ENGINE = InnoDB
COMMENT = 'Lookup table for storing monitorying types.';

关于mysql - 来自单父表的两个外键约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202061/

相关文章:

MySQL 查询域名和帖子编号

MySQL 索引 |与 LIKE 一起使用

php - 如何在 PHP 中计算多个到期日期

mysql连接查询

php - 我无法在 nginx 中测试 PHP

mysql - 如何从MySQL表中删除重复值

mysql - 查找第一次出现的连续开始/结束列

mysql - 如何使用查询在 mysql 中添加额外的 5 分钟

java - 在 spring boot schema.sql 文件中执行过程的问题

mysql - Count If MySql 具有不同