MySQL 零散笔记--主键_MySQL

WBOY
Lepaskan: 2016-06-01 13:51:33
asal
1010 orang telah melayarinya

Reference: 《浅谈MySQL主键》 作者:simaopig


主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”。

声明方法:

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

或者

    CREATE TABLE tbl_name( id INT(10) PRIMARY KEY |…);

或者更新表结构:

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

主键被认为是NOT NULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。

同时,主键也是索引。索引可以用于多字段,主键也一样,既可以作用于单独的字段,又可以作用于多个字段。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束

例子代码:一个防火墙,由host和port组合确定一个防火墙

<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #fbfbfb;">/*
Salin selepas log masuk
创建防火墙表,将host 和port组合设为主键,注意我没有将port设NOT NULL约束
Salin selepas log masuk
*/
Salin selepas log masuk
create table firewall(
Salin selepas log masuk
host varchar(11) not null,
Salin selepas log masuk
port smallint(4),
Salin selepas log masuk
access enum('deny', 'allow') not null,
Salin selepas log masuk
primary key (host,port)
Salin selepas log masuk
)
Salin selepas log masuk
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #fbfbfb;">/* 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
插入一条新的记录,没有啥问题 
Salin selepas log masuk
1 row(s) inserted. 
Salin selepas log masuk
*/ 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO firewall ( 
Salin selepas log masuk
Salin selepas log masuk
host , 
Salin selepas log masuk
Salin selepas log masuk
port , 
Salin selepas log masuk
Salin selepas log masuk
access 
Salin selepas log masuk
Salin selepas log masuk
) 
Salin selepas log masuk
Salin selepas log masuk
VALUES ( 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
'202.65.3.87', '21', 'deny' 
Salin selepas log masuk
);
Salin selepas log masuk
Salin selepas log masuk
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #fbfbfb;">/* 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
插入失败,因为host 加port的主键值202.65.3.87-21已经存在了 
Salin selepas log masuk
#1062 - Duplicate entry '202.65.3.87-21' for key 'PRIMARY' 
Salin selepas log masuk
*/ 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO firewall ( 
Salin selepas log masuk
Salin selepas log masuk
host , 
Salin selepas log masuk
Salin selepas log masuk
port , 
Salin selepas log masuk
Salin selepas log masuk
access 
Salin selepas log masuk
Salin selepas log masuk
) 
Salin selepas log masuk
Salin selepas log masuk
VALUES ( 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
'202.65.3.87', '21', 'allow' 
Salin selepas log masuk
);
Salin selepas log masuk
Salin selepas log masuk
<pre style="font-size: 12px; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; background-color: #fbfbfb;">/* 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
没声明NOT NULl port也不能为NULL 
Salin selepas log masuk
#1048 - Column 'port' cannot be null 
Salin selepas log masuk
*/ 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
INSERT INTO firewall( host, port, access ) 
Salin selepas log masuk
VALUES ( 
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
'192.168.0.1', NULL , 'deny' 
Salin selepas log masuk
)
Salin selepas log masuk

host和port都可以重复,但是不能同时重复,因为其是组合主键。且二者都不能被插入NULL,因为其是主键。

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan