一、唯一索引:
一是简化了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
;