Maison > base de données > tutoriel mysql > le corps du texte

MySQL 零散笔记--主键_MySQL

WBOY
Libérer: 2016-06-01 13:51:33
original
1009 Les gens l'ont consulté

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

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal