MySQL主键的定义和用法

  介绍

这篇文章主要讲解了“MySQL主键的定义和用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL主键的定义和用法”吧!

<强>主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“主键”强,是只可意会不可言传的东西。下面让我用通俗,甚至有些低俗的语言为您简单介绍一下MySQL的主键。

<强>简单描述:

<强>主键不能重复强,就像QQ的用户名,有N个叫“虫子”的网友,可是他们的QQ号码是不一样的,也就是说真正标识一个QQ的身份是“QQ号码”。还有那万恶的身份证,无论”张三,李四,王二麻子”这些都不能代表一个人,真正能代表一个人确切身份的就是那个“天朝特色的万恶的身份证”,相当于在杀猪的时候给猪盖个章,说这头是检验过的,有身份的猪,只不过人是生下来用“证”给你确定了,虽然要18岁才给你颁发。

  不过主键和QQ号不一样,因为<强>一个表只能有一个主键强,而一个人可以有多个QQ号,这也是为什么人们喜欢在虚拟世界里面互相忽悠,因为你真的不知道电脑那面坐的是一头猪。

  貌似扯的有点远了,接着来看我们的mysql主键。

<>强声明主键的方法:

<李>

  您可以在创建表的时候就为表加上主键,如:
创建表tbl_name([字段描述省略……),主键(index_col_name));李李

<>

  也可以更新表结构时为表加上主键,如:
ALTER TABLE tbl_name添加主键(index_col_name…);

<强>主键示例:

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

/*
创建一个qq表,将qq_id设为主键,且没有对其进行NOT NULl约束
*/
create  table  qq (
qq_id  int (10),
nick_name  varchar (255), not  NULl,
主要key  (qq_id)

/*
插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为“simaopig"
*/
INSERT  INTO  qq (qq_id的不同之处是,nick_name )
VALUES  (
& # 39; 10000 & # 39;,, & # 39; simaopig& # 39;
);

/*
插入一条数据,qq号仍为10000年,因为数据库内已经存在其10000年这样的数据,
而且最最主要的是其qq号为主键,所以报错,信息如下
# 1062 -重复条目& # 39;10000 & # 39;关键& # 39;主要# 39;
*/
INSERT  INTO  qq (qq_id的不同之处是,nick_name )
VALUES  (
& # 39; 10000 & # 39;,, & # 39; chongpig& # 39;
)

/*
虽然没有将qq号字段设NOT NULL约束,可是因为其是主键,所以其不能为空
# 1048 -列& # 39;qq_id& # 39;不能空
*/
INSERT  INTO  qq (qq_id的不同之处是,nick_name )
VALUES  (
NULL ,, & # 39; chongpig& # 39;
)

<强>主键也是索引:

  刚才已经说了,主键其实也是索引,<强>甚至在MySQL的术语里面“键”就等于“索引”强,所以“外键”一定要先设为“索引”,这个咱们下篇日志再来讨论,所以<强>主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段

  举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单501元室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。<强>组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了独特的惟一约束。

  例子不写自己想的了,书中举的例子更是恰当,那就是一个防火墙,由主机和端口组合确定一个防火墙。代码示例如下:

/*
创建防火墙表,将主机和端口组合设为主键,注意我没有将端口设NOT NULL约束
*/
create  table 防火墙(
host  varchar (11), not  NULL,

port 短整型(4),

access  enum(& # 39;否认# 39;,,& # 39;允许# 39;),not  NULL,

主要key (主机、端口)

/*
插入一条新的记录,没有啥问题
1行(s)插入。
*/
INSERT  INTO  firewall  (
host ,
port ,
访问
)
VALUES  (
& # 39; 202.65.3.87& # 39;,, & # 39; 21 & # 39;,, & # 39;否认# 39;
);

/*
插入失败,因为主机加端口的主键值202.65.3.87-21已经存在了
# 1062 -重复条目& # 39;202.65.3.87-21& # 39;关键& # 39;主要# 39;

MySQL主键的定义和用法