mysql如何设置共享主键_数据库中如何设置mysql主键?

MySQL中很重要的是要设置好主键,主键不能重复,而且主键的重要性在于可以区分外键,在一个数据表中主键只能是唯一的,那么如何设置主键呢?

主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARYKEY”,主键不能重复,一个表只能有一个主键。

f190988eaa78a3063f03699d6c94263e.png

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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值