標籤:
Messages表:
mysql>create table Messages(
->message_id int auto_increment primary key,
->user_name varchar(50) not null,
->author_id int not null,
->body text,
->forum_id int not null);
Forums表:
mysql>create table Forums(
->forum_id int auto_increment primary key,
->name varchar(150),
->description text,
->owner_id int);
兩種最常見的引擎是MyISAM和InnDB。(MyIsAm更快並且表格儲存體所需空間更少,,InnoDB 支援SQL交易處理所需的更加健壯的表和記錄鎖定);
在SQL中使用create table 語句時可以指定儲存引擎:
mysql>create table Messages(
->message_id int auto_increment primary key,
->user_name varchar(50) not null,
->author_id int not null,
->body text,
->forum_id int not null
->)engine InnoDB;
對於某個表,比如Messages表,我們常常希望有效搜尋這個表,在只給定使用者名稱(user_name)的條件下尋找記錄。
我們可以通過把索引添加到create table語句中完成這一操作:
mysql>create table Messages(
->message_id int auto_increment primary key,
->user_name varchar(50) not null,
->author_id int not null,
->body text,
->forum_id int not null
->index(user_name)
->)engine InnoDB;
如果我們後來又發現需要頻繁的搜尋author_id欄位,那麼使用create index 語句 我們可以在建立表之後建立索引:
create index author_id on Messages (author_id);
外鍵和串聯刪除::::
前面的連個表中,我們發現用於訊息的表具有引用forums表的外鍵,:forums_id int not null
這表示我們希望messages中的forums_id只能是來自forums表中的forums_id 的合法標示符,雖然可以在使用者添加訊息時候添加一下代碼驗證forums_id是合法的,但是我們可以讓資料庫伺服器通過強制外鍵來替我們完成這個工作,:
foreign key (formus_id) references Forums (forums_id);
如果試圖把forums_id欄位添加不表示來自適當表的合法標示符到Messages表,就會導致錯誤。
當我們想刪除一個表時例如Forums 就會導致Messages表中有一行指向不在的Forums表,我們在設計Web應用程式時候,希望資料庫自動刪除所有屬於這個表的訊息,那麼可以進一步修改foreign key約束,讓他執行串聯刪除。當父表(Forums)中的記錄被刪除時候,子表(Messages)中外鍵引用的的被設定為剛被刪除的父記錄的Id(例如forums_id)的任何記錄也被資料庫引擎刪除。
通過在外鍵聲明中添加on delete cascade :
foreign key (forums_id) references Forums (forum_id)
on delete cascade
刪除資料庫和表:
在SQL中,使用drop database和drop table 查詢執行這些任務。這兩個查詢都使用要刪除的實體的名稱作為參數:
drop database 資料庫名;
drop table 表名;
MySQL外鍵及串聯刪除 && 表的儲存引擎與建立索引 && 刪除資料庫和表