gpt4 book ai didi

mysql - 数据库设计 : need composite key + foreign key Part 2

转载 作者:行者123 更新时间:2023-11-29 05:41:17 24 4
gpt4 key购买 nike

原始问题:Database Design: need composite key + foreign key

这是我需要的:

  • Id 的自动递增值
  • ab 被视为复合键

SQL:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`foo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`foo` (
`id` INT NOT NULL AUTO_INCREMENT ,
`a` VARCHAR(45) NOT NULL ,
`b` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `a_UNIQUE` (`a` ASC) ,
UNIQUE INDEX `b_UNIQUE` (`b` ASC) )
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

此插入应该有效,因为 a、b 的值不同:

INSERT INTO `mydb`.`foo`
(`id`, `a`, `b`)
VALUES
(NULL, 'hello world', '1' ),
(NULL, 'hello world', '2' )

为什么 SQL 不起作用?

最佳答案

你需要使用:

CREATE  TABLE IF NOT EXISTS `mydb`.`foo` (
`id` INT NOT NULL AUTO_INCREMENT ,
`a` VARCHAR(45) NOT NULL ,
`b` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `a_UNIQUE` (`a` ASC, b ASC)
ENGINE = InnoDB;

您的 CREATE TABLE 语句正在创建独立的唯一约束——您需要一个复合约束,就像您在我的回答中看到的那样,能够使对成为唯一的。

您只需要在 MySQL reserved words 周围加上反引号 (`)逃避他们。

关于mysql - 数据库设计 : need composite key + foreign key Part 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com