我發現innodb很煩人,當我試圖設計一個數據庫結構,至少與MyIsam相比,似乎有更少的限制爲什麼表格創建失敗時,一切都innodb,但不是當一個表是MyIsam?
說,如果我想創建一個簡單的圖書館系統。 而我有四張桌子。
1,表book_item
,其中記錄了BOOK_NAME,作者,出版時間和有關書籍
2,表book
這些基本信息,它代表了書項目的具體實物。因此,book_item對象可以與許多書對象相關聯。
3,表tag
,其代表書籤。像科學,文學,建築等。
4,表tag_book_item_relation
,它將標籤與book_items關聯。
所以,關係如下。
1,我們有一個書項目到書是一個一對多關係
2,book_item到標籤是許多一對多關係。
注意這裏,發動機爲表都InnoDB的 如果我嘗試創建表,它將會失敗:
Error:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'yet_another_test.book' (errno: 121)
但是,如果我改變的book
或tag_book_item_relation
發動機的MyISAM,一切都會好起來的。
所以,我想知道是怎麼回事錯的,如果我用發動機InnoDB的爲表book
和tag_book_item_relation
SQL腳本是在這裏(在MySQL工作臺正向工程):
CREATE TABLE IF NOT EXISTS `yet_another_test`.`tag` (
`id` INT NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `yet_another_test`.`book_item` (
`id` INT NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `yet_another_test`.`tag_book_item_relation` (
`book_item_id` INT NOT NULL ,
`tag_id` INT NOT NULL ,
PRIMARY KEY (`book_item_id`, `tag_id`) ,
INDEX `fk_tag` (`tag_id` ASC) ,
INDEX `fk_book_item` (`book_item_id` ASC) ,
CONSTRAINT `fk_tag`
FOREIGN KEY (`tag_id`)
REFERENCES `yet_another_test`.`tag` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_book_item`
FOREIGN KEY (`book_item_id`)
REFERENCES `yet_another_test`.`book_item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `yet_another_test`.`book` (
`id` INT NOT NULL AUTO_INCREMENT ,
`book_item_id` INT NOT NULL ,
PRIMARY KEY (`id`, `book_item_id`) ,
INDEX `fk_book_item` (`book_item_id` ASC) ,
UNIQUE INDEX `id_UNIQUE` (`id` ASC) ,
CONSTRAINT `fk_book_item`
FOREIGN KEY (`book_item_id`)
REFERENCES `yet_another_test`.`book_item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
主鍵已經是唯一的,所以不需要在'tag'和'book_item'中添加唯一索引。 –
咦? InnoDB真棒,MyISAM是魔鬼。爲什麼一個不理解事務概念的數據庫引擎甚至被支持,更不用說默認情況下MySQL使用的數據庫引擎了。充其量,非交易型數據庫就是一種玩具。 – aroth
我同意InnoDb更好地執行 – xiaohan2012