中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL主鍵的定義和用法

發布時間:2021-08-18 10:20:40 來源:億速云 閱讀:179 作者:chen 欄目:MySQL數據庫

這篇文章主要講解了“MySQL主鍵的定義和用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL主鍵的定義和用法”吧!

主鍵沒有著明確的概念定義,其是索引的一種,并且是唯一性索引的一種,且必須定義為“PRIMARY KEY”,是只可意會不可言傳的東西。下面讓我用通俗,甚至有些低俗的語言為您簡單介紹一下MySQL的主鍵。

簡單描述:

主鍵不能重復,就像QQ的用戶名,有N個叫“蟲zi”的網友,可是他們的QQ號碼是不一樣的,也就是說真正標識一個QQ的身份是“QQ號碼”。還有那萬惡的身份證,無論“張三,李四,王二麻子”這些都不能代表一個人,真正能代表一個人確切身份的就是那個“天朝特色的萬惡的身份證”,相當于在殺豬的時候給豬蓋個章,說這頭是檢驗過的,有身份的豬,只不過人是生下來用“證”給你確定了,雖然要18歲才給你頒發。

不過主鍵和QQ號不一樣,因為一個表只能有一個主鍵,而一個人可以有多個QQ號,這也是為什么人們喜歡在虛擬世界里面互相忽悠,因為你真的不知道電腦那面坐的是一頭豬。

貌似扯的有點遠了,接著來看我們的mysql主鍵。

聲明主鍵的方法:

  • 您可以在創建表的時候就為表加上主鍵,如:
    CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

  • 也可以更新表結構時為表加上主鍵,如:
    ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);

主鍵示例:

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

/*
創建一個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'
);

/*
插入一條數據,qq號仍為10000,因為數據庫內已經存在其10000這樣的數據,
而且最最主要的是其QQ號為主鍵,所以報錯,信息如下
#1062 - Duplicate entry '10000' for key 'PRIMARY'
*/
INSERT INTO qq( qq_id, nick_name )
VALUES (
'10000', 'chongpig'
)

/*
雖然沒有將qq號字段設NOT NULL約束,可是因為其是主鍵,所以其不能為NULL
#1048 - Column 'qq_id' cannot be null
*/
INSERT INTO qq( qq_id, nick_name )
VALUES (
NULL , 'chongpig'
)

主鍵也是索引:

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

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

例子不寫自己想的了,書中舉的例子更是恰當,那就是一個防火墻,由host和port組合確定一個防火墻。代碼示例如下:

/*
創建防火墻表,將host 和port組合設為主鍵,注意我沒有將port設NOT 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'
);

/*
插入失敗,因為host 加port的主鍵值202.65.3.87-21已經存在了
#1062 - Duplicate entry '202.65.3.87-21' for key 'PRIMARY'
*/
INSERT INTO firewall (
host ,
port ,
access
)
VALUES (
'202.65.3.87', '21', 'allow'
);

/*
沒聲明NOT NULl port也不能為NULL
#1048 - Column 'port' cannot be null
*/
INSERT INTO firewall( host, port, access )
VALUES (
'192.168.0.1', NULL , 'deny'
)

在這個示例中,host和port都可以重復,但是不能同時重復,因為其是組合主鍵。且二者都不能被插入NULL,因為其是主鍵。

我們可以看一下phpmyadmin,看一下port字段的默認值為0,這和昨天我們講的索引規則是一樣的,NOT NULL并且給設了DEFAULT,因其是整型所以為0,如果其為字符串的話,默認值就是”

感謝各位的閱讀,以上就是“MySQL主鍵的定義和用法”的內容了,經過本文的學習后,相信大家對MySQL主鍵的定義和用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛浦县| 肇源县| 成安县| 砚山县| 高平市| 镇江市| 徐州市| 高淳县| 博乐市| 南郑县| 三台县| 枝江市| 抚顺县| 威信县| 龙泉市| 波密县| 泰宁县| 西盟| 株洲县| 房产| 南阳市| 怀仁县| 获嘉县| 綦江县| 吉木萨尔县| 固安县| 界首市| 京山县| 庆云县| 瑞安市| 抚远县| 阿城市| 普陀区| 遵化市| 怀仁县| 台东县| 若羌县| 尼玛县| 忻城县| 杭锦旗| 武威市|