通俗易懂之MySQL外鍵首启、主鍵的使用

MySQL supports foreign keys, which let you cross-reference related data across tables, and foreign key constraints, which help keep this spread-out data consistent. --引用官方

簡單說罚攀,外鍵約束就是把兩張表的數(shù)據(jù)通過某種條件關(guān)聯(lián)起來, 作用是保持?jǐn)?shù)據(jù)完整性和一致性

語法如下
[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION
Adding foreign keys
ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]
Dropping Foreign Keys
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

例子,
有一個parent表,含一個字段id(int)
有一個child表猫态,含兩個字段分別是 id(int) 和 parent_id(int)
現(xiàn)在為child表增加刪除聯(lián)動(delete cascade)外鍵该园,當(dāng) parent 表 的 id=2 的記錄被刪除時,如果對應(yīng) child 表有相對應(yīng)的parent_id=2 ,那么 child 表的該行記錄也會被刪除拉馋。

//創(chuàng)建表parent,并插入數(shù)據(jù)
CREATE TABLE `parent` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

insert into parent values(1),(2),(3);

// 創(chuàng)建表child,并插入數(shù)據(jù)
CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `parent_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1

insert into child values(10,1),(20,2),(30,3);  

// 為child表添加一個外鍵,與parent表的關(guān)系是刪除聯(lián)動
// 當(dāng)parent表的記錄被刪除時埠巨,如果指定的外鍵parent_id=id時双妨,child表的相對應(yīng)的記錄也同時被刪除
ALTER TABLE child ADD CONSTRAINT child_parent FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE;

//刪除parent表id=2的記錄
delete from parent where id=2;

// 發(fā)現(xiàn)child表parent_id=2的記錄也被刪除掉了
select * from child;

詳情請看Using FOREIGN KEY Constraints

順帶說說主鍵(Primary key)

A primary key is a column or a set of columns that uniquely identifies each row in the table. You must follow the rules below when you define a primary key for a table:

  • A primary key must contain unique values. If the primary key consists of multiple columns, the combination of values in these columns must be unique.
  • A primary key column cannot contain NULL values. It means that you have to declare the primary key column with the NOT NULL attribute. If you don’t, MySQL will force the primary key column as NOT NULL implicitly.
  • A table has only one primary key.

簡單而言,主鍵就是一個或多個字段蔓腐,用來唯一標(biāo)識表中的每行記錄
主鍵的值必須是唯一的矩乐,非空的,每個表只有一個主鍵
主鍵的數(shù)據(jù)類型,最好是 int 類型散罕,Because MySQL works faster with integers
主鍵通常設(shè)為 auto_increment分歇,自動生成唯一的序列值

添加主鍵
ALTER TABLE table_name ADD PRIMARY KEY(primary_key_column);
Primary key vs. unique key vs. key
  • key 的同義詞就是index索引,當(dāng)你想為字段創(chuàng)建索引create an index的時候欧漱,用到key關(guān)鍵詞
  • unique keyPrimary key相似职抡,要求值是唯一的,不同的是:允許為NULL值误甚,mysql也允許可以設(shè)定多個unique indexs

Introduction to MySQL primary key
MySQL Managing Database Index

額外提一下好用的replace()

簡單而言缚甩,就是替換掉你想更改的東西
應(yīng)用場景,表t1里的url字段里的所有記錄中窑邦,要把http改成https

UPDATE t1 SET url=REPLACE(url,'http','https');

詳情請看replace()用法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擅威,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奕翔,更是在濱河造成了極大的恐慌裕寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派继,死亡現(xiàn)場離奇詭異宾袜,居然都是意外死亡,警方通過查閱死者的電腦和手機驾窟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門庆猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绅络,你說我怎么就攤上這事月培。” “怎么了恩急?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵杉畜,是天一觀的道長。 經(jīng)常有香客問我衷恭,道長此叠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任随珠,我火速辦了婚禮灭袁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窗看。我一直安慰自己茸歧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布显沈。 她就那樣靜靜地躺著软瞎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铜涉,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天智玻,我揣著相機與錄音,去河邊找鬼芙代。 笑死吊奢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纹烹。 我是一名探鬼主播页滚,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铺呵!你這毒婦竟也來了裹驰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤片挂,失蹤者是張志新(化名)和其女友劉穎幻林,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體音念,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡沪饺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷愤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片整葡。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讥脐,靈堂內(nèi)的尸體忽然破棺而出遭居,到底是詐尸還是另有隱情,我是刑警寧澤旬渠,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布俱萍,位于F島的核電站,受9級特大地震影響告丢,放射性物質(zhì)發(fā)生泄漏鼠次。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一芋齿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧成翩,春花似錦觅捆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春赢赊,著一層夾襖步出監(jiān)牢的瞬間乙漓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工释移, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叭披,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓玩讳,卻偏偏與公主長得像涩蜘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子熏纯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容