2011-07-13 15 views
1

オリジナル質問:Database Design: need composite key + foreign keyデータベース設計:外部キーパート+複合キーを必要とする2

は、ここで私は必要なものです:

  • として処理されるべきId
  • abの自動インクリメント値複合キー

SQL:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

この挿入べき仕事に対する値、bが異なるため:

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

ないのはなぜSQLの仕事?

答えて

3

あなたは使用する必要があります。

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の前後にバッククォート( `)を付けるだけでエスケープすることができます。

関連する問題