2013-12-08 24 views
0

我收到錯誤1215(hy000):無法添加外鍵約束,然後運行下面的.sql文件。下面的代碼也沒有創建文檔表,可能是因爲它無法創建它的外鍵。誰能告訴我如何解決下面的代碼,以便它會創建的文件表包括它的外鍵未拋出錯誤:mysql無法添加外鍵:錯誤1215(hy000)

CREATE DATABASE IF NOT EXISTS petclinic; 
GRANT ALL PRIVILEGES ON petclinic.* TO [email protected] IDENTIFIED BY 'pc'; 

USE petclinic; 

CREATE TABLE IF NOT EXISTS types (
    id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(80), 
    INDEX(name) 
) engine=InnoDB; 

CREATE TABLE IF NOT EXISTS documenttypes (
    id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(80), 
    INDEX(name) 
) engine=InnoDB; 

CREATE TABLE IF NOT EXISTS owners (
    id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    first_name VARCHAR(30), 
    last_name VARCHAR(30), 
    address VARCHAR(255), 
    city VARCHAR(80), 
    telephone VARCHAR(20), 
    INDEX(last_name) 
) engine=InnoDB; 

CREATE TABLE IF NOT EXISTS pets (
    id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(30), 
    birth_date DATE, 
    type_id INT(4) UNSIGNED NOT NULL, 
    owner_id INT(4) UNSIGNED NOT NULL, 
    INDEX(name), 
    FOREIGN KEY (owner_id) REFERENCES owners(id), 
    FOREIGN KEY (type_id) REFERENCES types(id) 
) engine=InnoDB; 

CREATE TABLE IF NOT EXISTS documents (
    id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    client_id int(4) NOT NULL, 
    type_id INT(4), 
    name varchar(200) NOT NULL, 
    description text NOT NULL, 
    filename varchar(200) NOT NULL, 
    content mediumblob NOT NULL, 
    content_type varchar(255) NOT NULL, 
    created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    FOREIGN KEY (client_id) REFERENCES owners(id), 
    FOREIGN KEY (type_id) REFERENCES documenttypes(id) 
) engine=InnoDB; 

我試過的建議at this link,但沒有這些建議有此代碼的工作。有人能告訴我一些可以用這個代碼的東西嗎?

回答

2

外鍵列必須與原始列完全相同的數據類型。

試試這個:

CREATE TABLE IF NOT EXISTS documents (
    id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    client_id int(4) UNSIGNED NOT NULL, 
    type_id INT(4) UNSIGNED NOT NULL, 
    name varchar(200) NOT NULL, 
    description text NOT NULL, 
    filename varchar(200) NOT NULL, 
    content mediumblob NOT NULL, 
    content_type varchar(255) NOT NULL, 
    created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    FOREIGN KEY (client_id) REFERENCES owners(id), 
    FOREIGN KEY (type_id) REFERENCES documenttypes(id) 
) engine=InnoDB; 

新增UNSIGNEDclient_idUNSIGNED NOT NULLtype_id(在NOT NULL的部分是不是強制性的,雖然)

sqlfiddle demo

+0

雖然,'NOT NULL'不需要匹配'type_id'的類型。只是'INT(4)UNSIGNED'。 –

+0

這是真的。我會在我的回答中添加一個註釋。 –

相關問題