mysql 复合 唯一 索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 复合 唯一 索引相关的知识,希望对你有一定的参考价值。
怎么避免插入相同的复合数据 ? 例:
id = 1, key_word = '汽车', data_id = 12345,
id = 2, key_word = '汽车', data_id = 54321,
id = 3, key_word = '汽车', data_id = 12345,
我想要的结果是:
当第 3 条数据插入的时候, 跳过当前插入. 因为与第 3 条数据与第 1 条数据重复了
key_word 与 data_id看成是一条复合数据, 不能出现重复的值
我创建了一个复合唯一索引(倒数第二排), 但是没有效果, 插入数据的时候同样可以插入相同的数据:
INSERT INTO `key_words`
(key_word, data_id) values
('飞机', 54321),
('汽车', 12345),
('汽车', 54321);
是我操作不当么?? 该怎么插入数据呢??
CREATE TABLE IF NOT EXISTS `key_words` (
`id` int unsigned PRIMARY KEY AUTO_INCREMENT NOT NULL,
`key_word` varchar(40) NOT NULL comment '关键字',
`data_id` int unsigned NOT NULL comment '数据id',
KEY `key_word` (`key_word`),
UNIQUE INDEX `key_word` (`key_word`, `data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
自己解决了:
CREATE TABLE IF NOT EXISTS `key_words` (
`id` int unsigned PRIMARY KEY AUTO_INCREMENT NOT NULL,
`key_word` varchar(40) NOT NULL comment '关键字',
`data_id` int unsigned NOT NULL comment '数据id',
KEY `key_word` (`key_word`),
UNIQUE INDEX (`key_word`, `data_id`) //修改的地方
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
插入用:
INSERT IGNORE INTO ...
(key_word,data_id) values
('飞机',54321),
('汽车',12345),
('汽车',54321);
改成下面这个 肯定就不能插入了
INSERT INTO `key_words`
(key_word,data_id) values
('飞机',54321),
('汽车',12345),
('飞机',54321);追问
我的意思是插入的时候不能与数据库中的值重复, 你写的这个是不可能出现的情况
以上是关于mysql 复合 唯一 索引的主要内容,如果未能解决你的问题,请参考以下文章