第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL Primary Key & Foreign Key

1. 定義

維基百科:主鍵(Primary Key)是數(shù)據(jù)表中每條記錄唯一且完整的標(biāo)識(shí);外鍵(Foreign Key),又稱外來鍵,是另一個(gè)數(shù)據(jù)表中的字段。

慕課解釋:主鍵十分重要,每一張表都應(yīng)有一個(gè)主鍵,且主鍵只能有一個(gè),主鍵不能為空;外鍵用來表示表與表之間的關(guān)系,是關(guān)系數(shù)據(jù)庫的核心,一般使用另一張表的主鍵作為外鍵。

2. 前言

本小節(jié),我們將學(xué)習(xí) SQL 中的主鍵外鍵。

在前面的學(xué)習(xí)中,我們一直聚焦在 SQL 增刪查改等操作。對(duì)于關(guān)系數(shù)據(jù)庫,最核心的東西莫過于關(guān)系二字,在開發(fā)中,表 A 的主鍵一般會(huì)作為表 B 的外鍵,來表示表 A 與表 B 之間的關(guān)系。

注意: 在前面的小節(jié)中,新建數(shù)據(jù)庫時(shí)均未指定主鍵,但實(shí)際上應(yīng)該為每一張表都指定一個(gè)主鍵,后面的例子中將踐行這條原則。

3. SQL Primary Key

SQL CREATE2 一節(jié)中,我們介紹了主鍵的基本用法。在實(shí)際的開發(fā)中,主鍵至關(guān)重要,所以一般還需加上其它約束,如 unsigned、auto_increment 等。

3.1 例1 創(chuàng)建用戶表

請(qǐng)書寫 SQL 語句,創(chuàng)建imooc_user表,共有 id,username 和 age 三個(gè)字段,其中 id 為主鍵,數(shù)據(jù)類型為 unsigned int 且自增,username 為 varchar 類型,age 表示年齡,為 int 類型。

分析

新建數(shù)據(jù)表使用 Create 指令,username 和 age 為基本類型字段,id 作為主鍵,字段類型為無符號(hào)整型,且自增,故該字段需要添加 auto_increment 約束。

語句

整理可得語句如下:

CREATE TABLE imooc_user
(
  id int unsigned PRIMARY KEY AUTO_INCREMENT,
  username varchar(20),
  age int
);

(MySQL數(shù)據(jù)庫)創(chuàng)建成功后,imooc_user表信息如下:

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | <null>  | auto_increment |
| username | varchar(20)      | YES  |     | <null>  |                |
| age      | int(11)          | YES  |     | <null>  |                |
+----------+------------------+------+-----+---------+----------------+

不同的數(shù)據(jù)庫對(duì)于自增的支持是不同的,有些數(shù)據(jù)庫甚至不支持自增主鍵,PostgreSQL 中使用 serial 類型來支持自增,如下:

CREATE TABLE imooc_user
(
  id serial PRIMARY KEY,
  username varchar(20),
  age int
);

4. SQL Foreign Key

外鍵是一類頗為特殊的字段,既可以像其它普通字段一樣存儲(chǔ)數(shù)據(jù),更可以用來表示表與表之間的聯(lián)系,這正是關(guān)系數(shù)據(jù)庫的核心所在。

因?yàn)橹麈I可以唯一標(biāo)識(shí)一條記錄,所以一張表的外鍵字段一般是另一張表的主鍵。

外鍵是一種約束,其語法如下:

FOREIGN KEY ([col1]) REFERENCES [table_name]([col2])

其中col1表示當(dāng)前表的外鍵字段名,table_name是另一張數(shù)據(jù)表名稱,col2表示另一張表的字段名稱。

4.1 例2 創(chuàng)建用戶積分表

請(qǐng)書寫 SQL 語句,創(chuàng)建imooc_user_score表,共有 id,user_score 和 user_id 三個(gè)字段,其中 id 字段為主鍵且自增,user_score 表示用戶積分,數(shù)據(jù)類型為整形,user_id為外鍵指向 imooc_user 的主鍵 id。

分析

新建數(shù)據(jù)表使用 Create 指令,user_score 為基本類型字段,id 作為主鍵,user_id 為外鍵。

語句

整理可得語句如下:

CREATE TABLE imooc_user_score
(
  id int unsigned PRIMARY KEY AUTO_INCREMENT,
  user_score int,
  user_id int unsigned,
  FOREIGN KEY (user_id) REFERENCES imooc_user(id)
);

SQL 語句中,user_id 是 imooc_user_score 的字段,同時(shí)它也是外鍵,它的值來源于表 imooc_user 的 id 字段。

(MySQL)新建成功后,信息如下:

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | <null>  | auto_increment |
| user_score | int(11)          | YES  |     | <null>  |                |
| user_id    | int(10) unsigned | YES  | MUL | <null>  |                |
+------------+------------------+------+-----+---------+----------------+

若使用 PostgreSQL,新建語句如下:

CREATE TABLE imooc_user_score
(
  id serial PRIMARY KEY,
  user_score int,
  user_id int,
  FOREIGN KEY (user_id) REFERENCES imooc_user(id)
);

5. 小結(jié)

  • PostgreSQL 的整型字段不支持 unsigned 無符號(hào),且無自增約束,但有自增數(shù)據(jù)類型 serial。
  • 大部分場(chǎng)景中,主鍵一般都為自增字段,當(dāng)然也有選擇uuid作為主鍵的,但自增主鍵性能更加優(yōu)異。
  • 外鍵是體現(xiàn)數(shù)據(jù)表關(guān)系的核心功能點(diǎn),但主流的外鍵方式卻都是弱外鍵。