目錄
- 參考源
- SQL foreign key 限制
- FOREIGN KEY 作用
- create table 時的 SQL foreign key 限制
-
- MySQL
- SQL Server / Oracle / MS Access
- 給 foreign key 命名
- alter table 時的 SQL foreign key 限制
-
- MySQL / SQL Server / Oracle / MS Access
- 删除 foreign key 限制
-
- MySQL
- SQL Server / Oracle / MS Access
參考源
- 簡單教程
- https://www.twle.cn/l/yufei/sql/sql-basic-foreignkey.html
- 菜鳥教程
- https://www.runoob.com/sql/sql-foreignkey.html
SQL foreign key 限制
什麼是
foreign key
? 就是一個表中存儲另一個表的主鍵 ( PRIMARY KEY )
CREATE TABLE lesson (
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name varchar(32) default '',
views int(11) NOT NULL default '0',
created_at DATETIME
);
CREATE TABLE lesson_views (
uniq bigint(20) primary key NOT NULL default '0' ,
lession_name varchar(32) default '',
lession_id int(11) default '0',
date_at int(11) NOT NULL default '0',
views int(11) NOT NULL default '0'
);
中的
lesson_views
就是
lesson_id
表中的主鍵
lesson
很多人都會有疑問,那我們一般不都是這麼建表的? 難道添加的就是
id
就是
lesson_id
FOREIGN KEY
不是的。我們這麼添加,是因為我們開發團隊有共識,但是,這種共識資料庫系統不認識啊
如果不給
添加
lesson_id
限制,資料庫系統會以為
FOREIGN KEY
lesson_id
隻不過是一個普通的 int(11) 字段
——簡單教程https://www.twle.cn/l/yufei/sql/sql-basic-foreignkey.html
FOREIGN KEY 作用
- FOREIGN KEY 限制用于預防破壞表之間連接配接的行為
當删除一個 FOREIGN KEY 指向的主表 (lession) 記錄時,如果 FOREIGN KEY 所在的表 (lession_views) 存在記錄,那麼會删除失敗
- FOREIGN KEY 限制也能防止非法資料插入外鍵列,因為它必須是它指向的那個表中的值之一
當在 FOREIGN KEY 表 ( lession_views ) 插入或更新一條記錄,如果 FOREIGN KEY 指向的主表 ( lession ) 不存在該記錄,那麼插入或者更新失敗
create table 時的 SQL foreign key 限制
給一個表添加
foreign key
限制可以使用
foreign key
關鍵字
MySQL
CREATE TABLE lesson_views (
uniq bigint(20) primary key NOT NULL default '0' ,
lession_name varchar(32) default '',
lession_id int(11) default '0',
date_at int(11) NOT NULL default '0',
views int(11) NOT NULL default '0',
FOREIGN KEY (lesson_id) REFERENCES lesson(id)
);
SQL Server / Oracle / MS Access
CREATE TABLE lesson_views (
uniq bigint(20) primary key NOT NULL default '0' ,
lession_name varchar(32) default '',
lession_id int(11) FOREIGN KEY REFERENCES lesson(id),
date_at int(11) NOT NULL default '0',
views int(11) NOT NULL default '0'
);
給 foreign key 命名
如果想要給
foreign key
限制命名,可以使用
constraint
關鍵字
CREATE TABLE lesson_views (
uniq bigint(20) primary key NOT NULL default '0' ,
lesson_name varchar(32) default '',
lesson_id int(11) default '0',
date_at int(11) NOT NULL default '0',
views int(11) NOT NULL default '0',
CONSTRAINT fk_lesson_id FOREIGN KEY (lesson_id) REFERENCES lesson(id)
);
alter table 時的 SQL foreign key 限制
如果一個表已經被建立,我們仍然可以使用
alter table add foreign key
來添加外鍵限制
MySQL / SQL Server / Oracle / MS Access
如果還想給
foreign key
限制命名,則可以像下面這樣使用
删除 foreign key 限制
如果想要删除一個已經命名的
foreign key
限制,可以使用
drop
關鍵字