天天看點

SQL學習之foreign key限制參考源SQL foreign key 限制FOREIGN KEY 作用create table 時的 SQL foreign key 限制給 foreign key 命名alter table 時的 SQL foreign key 限制删除 foreign key 限制

目錄

  • 參考源
  • 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 作用

  1. FOREIGN KEY 限制用于預防破壞表之間連接配接的行為
    當删除一個 FOREIGN KEY 指向的主表 (lession) 記錄時,如果 FOREIGN KEY 所在的表 (lession_views) 存在記錄,那麼會删除失敗
  2. 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

關鍵字

MySQL

SQL Server / Oracle / MS Access