Mysql 键自动递增时插入忽略?

Mysql 键自动递增时插入忽略?,mysql,Mysql,我有一个非常基本的表,由一个自动递增的id列(主键)和一个包含各种文本的文本列组成 我需要在此表中插入数据,但我不想插入重复的行。我想使用INSERT IGNORE-INTO,但显然IGNORE使用表的键来确定行是否重复。由于我的表中的键字段是自动递增的,这意味着不会出现重复项 我的桌子设计有更好的方法吗?文本列也需要是键吗?为文本列创建唯一索引: 错误将被忽略 请参见为文本列创建唯一索引: 错误将被忽略 请参见编辑:只需按照本教程进行操作,就可以进行设置 您已经掌握的要点,只需将文本设置为主

我有一个非常基本的表,由一个自动递增的id列(主键)和一个包含各种文本的文本列组成

我需要在此表中插入数据,但我不想插入重复的行。我想使用
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次查询。谢谢