Heim > Datenbank > MySQL-Tutorial > MySQL 零散笔记--主键_MySQL

MySQL 零散笔记--主键_MySQL

WBOY
Freigeben: 2016-06-01 13:51:33
Original
1032 Leute haben es durchsucht

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

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage