主键和唯一索引区别?

主键和唯一索引都是确保数据唯一性的手段,但主键是一种约束,每张表只能有一个,不可为NULL且能作为外键。唯一索引是一种索引,可以有多个,允许NULL值。唯一索引主要提升查询效率,而主键还有数据完整性保障的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、唯一索引:

一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;

二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

 

CREATE TABLE `redpacket_monitoring` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `redpacket_number` INT(11) NOT NULL COMMENT '每天红包数量',
    `readeridauthor` INT(11) NOT NULL COMMENT '送红包作者的readerid',
    `paystartdate` DATE NOT NULL COMMENT '充值开始时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `redpacket` (`readeridauthor`, `paystartdate`)
)  
COMMENT='签约作者通过非文下评论的方式发红包的每日监控'
COLLATE='gbk_chinese_ci'
ENGINE=MyISAM;

唯一索引: $sql = "/* " . __FILE__ . ",Line:" . __LINE__ . "*/" . "REPLACE INTO redpacket_monitoring (readeridauthor, paystartdate, redpacket_number)  VALUES({$value['readerid']}, '{$value['paystartdate']}', {$value['counts']})";

即:当readeridauthor,paystartdate值相同时,redpacket_number发生变化,需要改变它,就可以把这两字段建立唯一索引。

扩展: replace into 插入时1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

 

 

 

 

二、主键和唯一索引都要求值唯一,它们区别:

①.主键是一种约束,唯一索引是一种索引;
②.一张表只能有一个主键,但可以创建多个唯一索引;
③.主键创建后一定包含一个唯一索引,唯一索引并一定是主键;
④.主键不能为null,唯一索引可以为null;
⑤.主键可以做为外键,唯一索引不行;

主键唯一,可作为外表外键。唯一索引主要是查询索引作用。

CREATE TABLE `series` (
    `authorid` INT(11) NOT NULL DEFAULT '0',
    `seriesid` INT(11) NOT NULL AUTO_INCREMENT,
    `seriesname` VARCHAR(50) NOT NULL DEFAULT '',
    `seriesindex` INT(11) NOT NULL DEFAULT '0',
    `identity` TINYINT(2) NULL DEFAULT '0' COMMENT '是否是作者,0为作者,1为译者',
    PRIMARY KEY (`seriesid`),
    UNIQUE INDEX `authorid` (`authorid`, `seriesname`),
    INDEX `authorid_seriesindex` (`authorid`, `seriesindex`)
)
COMMENT='authorid=0,series=0表示“无所属系列”,不要删除'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1061
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值