12、淺談MySQL主鍵


以下內容摘引轉自[1]

主鍵沒有着明確的概念定義,其是索引的一種,並且是唯一性索引的一種,且必須定義為“PRIMARY KEY”,主鍵不能重復,一個表只能有一個主鍵。

1、聲明主鍵的方法:

您可以在創建表的時候就為表加上主鍵,如:

CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

也可以更新表結構時為表加上主鍵,如:

ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);

/*

創建一個qq表,將qq_id設為主鍵,且沒有對其進行NOT NULl約束

*/

create table qq(

qq_id int(10),

nick_name varchar(255) not null,

primary key (qq_id))

/*

插入一條數據,將qq號設為10000(咱也幻想一下),昵稱設為"simaopig"

*/

INSERT INTO qq( qq_id, nick_name )

VALUES (

'10000', 'simaopig');

2、示例

主鍵被認為是NOT NULLUNIQUE約束最好的結合。如果這些列沒有被明確地定義為NOT NULLMySQL會隱含地定義這些列。

3、主鍵也是索引:

剛才已經說了,主鍵其實也是索引,甚至在MySQL的術語里面“鍵”就等於“索引”,所以“外鍵”一定要先設為“索引”。所以主鍵也應該和索引一樣,既可以作用於單獨的字段,又可以作用於多個字段。

舉個簡的例子吧,我住3單元,501室,我叫小小子,那么只有3單元501室才能在本小區表里面唯一確定我家。因為2單元,501室住着的可能也是個小小子,所以只有兩個字段才能唯一確定我,也就是說可以二者組合作為主鍵。組合的主鍵,每個列都會隱含定義NOT NULL約束,且其二者加在一起被定義了UNIQUE 惟一約束。

/*

創建防火牆表,將host port組合設為主鍵,注意我沒有將portNOT NULL約束

*/

create table firewall(

host varchar(11) not null,

port smallint(4),

access enum('deny', 'allow') not null,

primary key (host,port))

/*

插入一條新的記錄,沒有啥問題

1 row(s) inserted.

*/

INSERT INTO firewall (

host ,

port ,

access)

VALUES (

'202.65.3.87', '21', 'deny');

原文:

[1] 淺談MySQL主鍵 http://zhumeng8337797.blog.163.com/blog/static/100768914201110245101552/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM