数据库中如何设置mysql主键?
MySQL中很重要的是要设置好主键,主键不能重复,而且主键的重要性在于可以区分外键,在一个数据表中主键只能是唯一的,那么如何设置主键呢?
主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARYKEY”,主键不能重复,一个表只能有一个主键。
1、声明主键的方法:
您可以在创建表的时候就为表加上主键,如:
CREATETABLEtbl_name([字段描述省略…],PRIMARYKEY(index_col_name));
也可以更新表结构时为表加上主键,如:
ALTERTABLEtbl_nameADDPRIMARYKEY(index_col_name,…);
/*
创建一个qq表,将qq_id设为主键,且没有对其进行NOTNULl约束
*/
createtableqq(
qq_idint(10),
nick_namevarchar(255)notnull,
primarykey(qq_id))
/*
插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为”simaopig”
*/
INSERTINTOqq(qq_id,nick_name)
VALUES(
'10000','simaopig');
2、示例
主键被认为是NOTNULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOTNULL,MySQL会隐含地定义这些列。
3、主键也是索引:
刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。
举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOTNULL约束,且其二者加在一起被定义了UNIQUE惟一约束。
/*
创建防火墙表,将host和port组合设为主键,注意我没有将port设NOTNULL约束
*/
createtablefirewall(
hostvarchar(11)notnull,
portsmallint(4),
Accessenum('deny','allow')notnull,
primarykey(host,port))
/*
插入一条新的记录,没有啥问题
1row(s)inserted.
*/
INSERTINTOfirewall(
host,
port,
access)
VALUES(
'202.65.3.87','21','deny');