2013-08-24 76 views
0

我需要您的幫助有條件!我不能確定是什麼問題... 我認爲這一切都是正確的,但MySQL的拋出一個錯誤1005,SQL狀態HY000:無法創建表「cpis.cpis_sudent_profile」(錯誤:150)MySQL錯誤代碼1005,SQL狀態HY000:無法創建表'cpis.cpis_sudent_profile'(errno:150)

DROP TABLE IF EXISTS `cpis_users`; 
CREATE TABLE `cpis_users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(20) NOT NULL, 
    `password` varchar(128) NOT NULL, 
    `email` varchar(128) NOT NULL, 
    `activkey` varchar(128) NOT NULL DEFAULT '', 
    `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `lastvisit_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `status` boolean NOT NULL DEFAULT false, 
    `user_type` varchar(128) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`), 
    UNIQUE KEY `email` (`email`), 
    KEY `status` (`status`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `cpis_countries`; 
CREATE TABLE `cpis_countries` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `code` varchar(3) NOT NULL, 
    `title_ru` varchar(100) DEFAULT NULL, 
    `title_en` varchar(100) DEFAULT NULL, 
    `title_cz` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `cpis_programs`; 
CREATE TABLE `cpis_programs` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title_ru` varchar(100) DEFAULT NULL, 
    `description_ru` text DEFAULT NULL, 
    `title_en` varchar(100) DEFAULT NULL, 
    `description_en` text DEFAULT NULL, 
    `title_cz` varchar(100) DEFAULT NULL, 
    `description_cz` text DEFAULT NULL, 
    `publicated` boolean DEFAULT false, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `cpis_sudent_profile`; 
CREATE TABLE `cpis_sudent_profile` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `fname` varchar(100) NOT NULL, 
    `pname` varchar(100) NOT NULL, 
    `lname` varchar(100) NOT NULL, 
    `birthday` date NOT NULL, 
    `citizenship` int(11) NOT NULL, 
    `sex` varchar(30) NOT NULL, 
    `program_id` varchar(100) NOT NULL, 
    `owner` int(11) DEFAULT NULL, 
    `member` int(11) DEFAULT NULL, 
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `spfk_1` FOREIGN KEY (`user_id`) REFERENCES `cpis_users` (`id`), 
    CONSTRAINT `spfk_2` FOREIGN KEY (`citizenship`) REFERENCES `cpis_countries` (`id`), 
    CONSTRAINT `spfk_3` FOREIGN KEY (`program_id`) REFERENCES `cpis_programs` (`id`), 
    CONSTRAINT `spfk_4` FOREIGN KEY (`owner`) REFERENCES `cpis_users` (`id`), 
    CONSTRAINT `spfk_5` FOREIGN KEY (`member`) REFERENCES `cpis_users` (`id`) 
) ENGINE=InnoDB CHARSET=utf8; 
+1

簡化代碼,直到錯誤消失。然後檢查你最後的變化。這將幫助你發現錯誤。 - 對於Stackoverflow,要求實際上是,你給的減少,因爲沒有進一步的可以減少的例子,說明問題。粘貼SQL查詢的文本牆只是將其他人放在臉上而經常被認爲是粗魯的。請參閱幫助部分。 – hakre

+0

雖然同意以上所述,但您引用的具體錯誤是由於形成不正確的約束。有關詳細信息,請參閱http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html。也許問題在於你在創建cpis_student_profile表的部分中有三個不同的FK引用了一個PK(cpis_users('id'))。嘗試刪除最後兩個約束,然後每次將它們重新放回一個約束。另請參閱所有類似的問題 - >>>> –

+0

之前我已經解決了這個問題,我感謝你爲我分配了寶貴的時間! – UliXiS

回答

1

program_id varchar(100)應該與cpis_programs (id int(11))具有相同的數據類型。通過擁有不同類型的數據,無法確定約束條件。示例SQL Fiddle

... 
DROP TABLE IF EXISTS `cpis_sudent_profile`; 

CREATE TABLE `cpis_sudent_profile` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `fname` varchar(100) NOT NULL, 
    `pname` varchar(100) NOT NULL, 
    `lname` varchar(100) NOT NULL, 
    `birthday` date NOT NULL, 
    `citizenship` int(11) NOT NULL, 
    `sex` varchar(30) NOT NULL, 
    /*`program_id` varchar(100) NOT NULL,*/ 
    `program_id` int(11) NOT NULL, 
    `owner` int(11) DEFAULT NULL, 
    `member` int(11) DEFAULT NULL, 
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `spfk_1` FOREIGN KEY (`user_id`) REFERENCES `cpis_users` (`id`), 
    CONSTRAINT `spfk_2` FOREIGN KEY (`citizenship`) REFERENCES `cpis_countries` (`id`), 
    CONSTRAINT `spfk_3` FOREIGN KEY (`program_id`) REFERENCES `cpis_programs` (`id`), 
    CONSTRAINT `spfk_4` FOREIGN KEY (`owner`) REFERENCES `cpis_users` (`id`), 
    CONSTRAINT `spfk_5` FOREIGN KEY (`member`) REFERENCES `cpis_users` (`id`) 
) ENGINE=InnoDB CHARSET=utf8; 
+0

謝謝兄弟! – UliXiS

相關問題