Mysql 键自动递增时插入忽略?
我有一个非常基本的表,由一个自动递增的id列(主键)和一个包含各种文本的文本列组成 我需要在此表中插入数据,但我不想插入重复的行。我想使用Mysql 键自动递增时插入忽略?,mysql,Mysql,我有一个非常基本的表,由一个自动递增的id列(主键)和一个包含各种文本的文本列组成 我需要在此表中插入数据,但我不想插入重复的行。我想使用INSERT IGNORE-INTO,但显然IGNORE使用表的键来确定行是否重复。由于我的表中的键字段是自动递增的,这意味着不会出现重复项 我的桌子设计有更好的方法吗?文本列也需要是键吗?为文本列创建唯一索引: 错误将被忽略 请参见为文本列创建唯一索引: 错误将被忽略 请参见编辑:只需按照本教程进行操作,就可以进行设置 您已经掌握的要点,只需将文本设置为主
INSERT IGNORE-INTO
,但显然IGNORE
使用表的键来确定行是否重复。由于我的表中的键字段是自动递增的,这意味着不会出现重复项
我的桌子设计有更好的方法吗?文本列也需要是键吗?为文本列创建唯一索引: 错误将被忽略
请参见为文本列创建唯一索引: 错误将被忽略
请参见编辑:只需按照本教程进行操作,就可以进行设置
您已经掌握的要点,只需将文本设置为主键,您就不必担心,只要您像前面所说的那样执行插入忽略操作。编辑:只需按照本教程进行操作,您就可以进行设置
您已经有了一些要点,只需将文本设置为主键,您就不必担心,只要您像前面所述那样执行插入忽略操作。我建议使用插入前触发器,并使用前255个字符的散列(MD5) 运行此示例
drop database if exists jakobud;
create database jakobud;
use jakobud
create table mytext
(
id int not null auto_increment,
txt text not null,
txtmd5 char(32) not null default '',
primary key (id),
unique key (txtmd5)
);
DELIMITER $$ CREATE TRIGGER mytext_bi
BEFORE INSERT ON mytext
FOR EACH ROW
BEGIN
DECLARE found_count INT;
SELECT COUNT(1) INTO found_count
FROM mytext WHERE txtmd5 = MD5(LEFT(new.txt,10));
IF found_count = 1 THEN
SELECT COUNT(1) INTO found_count FROM table_that_does_not_exist;
END IF;
SET new.txtmd5 = MD5(LEFT(new.txt,10));
END; $$
DELIMITER ;
然后将一组数据加载到mytext中
这将忽略前255个字符中MD5的重复项
我是这样写的,所以您不需要在txt字段本身上创建索引
有什么好处?自动增量不会跳过,因为如果输入的文本前255个字符中的MD5不唯一,我会故意导致触发器中断
试试看 我建议使用插入前触发器,并使用前255个字符的散列(MD5) 运行此示例
drop database if exists jakobud;
create database jakobud;
use jakobud
create table mytext
(
id int not null auto_increment,
txt text not null,
txtmd5 char(32) not null default '',
primary key (id),
unique key (txtmd5)
);
DELIMITER $$ CREATE TRIGGER mytext_bi
BEFORE INSERT ON mytext
FOR EACH ROW
BEGIN
DECLARE found_count INT;
SELECT COUNT(1) INTO found_count
FROM mytext WHERE txtmd5 = MD5(LEFT(new.txt,10));
IF found_count = 1 THEN
SELECT COUNT(1) INTO found_count FROM table_that_does_not_exist;
END IF;
SET new.txtmd5 = MD5(LEFT(new.txt,10));
END; $$
DELIMITER ;
然后将一组数据加载到mytext中
这将忽略前255个字符中MD5的重复项
我是这样写的,所以您不需要在txt字段本身上创建索引
有什么好处?自动增量不会跳过,因为如果输入的文本前255个字符中的MD5不唯一,我会故意导致触发器中断
试试看 这有助于防止重复插入?哦,我以为你指的是重复的密钥。如果你的意思是重复文本,那么我会说另一种解决方案可能有效。除此之外,只需在DB中查询要插入的文本,以防止它们重复。这通常是在创建用户名和帐户的数据库时所做的。是的,这就是我所做的,只是想看看是否有一种方法可以在每次插入时不进行2次查询。ThanksHow这有助于避免插入重复的密钥吗?哦,我以为你指的是重复的密钥。如果你的意思是重复文本,那么我会说另一种解决方案可能有效。除此之外,只需在DB中查询要插入的文本,以防止它们重复。这通常是在创建用户名和帐户的数据库时所做的。是的,这就是我所做的,只是想看看是否有一种方法可以在每次插入时不进行2次查询。谢谢