gpt4 book ai didi

mysql - 关于 INSERT IGNORE mysql 的帮助

转载 作者:行者123 更新时间:2023-11-29 14:53:29 25 4
gpt4 key购买 nike

查询是:

$sql="CREATE TABLE IF NOT EXISTS prod_day(

id int(11) NOT NULL AUTO_INCREMENT,
heading TEXT,
image TEXT,
text LONGTEXT,
PRIMARY KEY (id)
)TYPE=InnoDB";

我不想允许任何与标题、图像和文本列重复的条目。同时我希望 id 列自动递增,请告诉我该怎么做。我在网上搜索,但找不到任何我可以理解的解决方案。

谢谢

最佳答案

I don't want to allow any entry that is duplicate with respect to heading , image and text column

您想要的是所有这些列上的 UNIQUE 键 - 但是 MySQL 只会为每个 TEXTLONGTEXT 索引前 767 个字节> 栏目。 (这是字节而不是字符 - 每个字符将在键空间中使用多个字节)。这意味着在 heading 上使用 UNIQUE KEY 两个非常长但不同的字符串将导致重复键错误:

-- Even though the complete strings are different, MySQL isn't indexing the whole string. 
-- These two statements will result in a duplicate key error.
INSERT INTO prod_day (heading) VALUES ('a very long string the same in the first 767 bytes ..... asdfjkl');
INSERT INTO prod_day (heading) VALUES ('a very long string the same in the first 767 bytes ..... 1234567');

您有几个选择:

重构您的数据库架构以使用较小的列类型:

CREATE TABLE prod_day(
id int(11) PRIMARY KEY AUTO_INCREMENT,
heading VARCHAR(256),
image VARCHAR(256),
text VARCHAR(256),
UNIQUE (heading, image, text)
) ENGINE=InnoDB

如果这不是一个选择,那么:

使用列数据的 MD5 哈希作为唯一键

CREATE TABLE prod_day(
id int(11) PRIMARY KEY AUTO_INCREMENT,
heading TEXT,
image TEXT,
text LONGTEXT,
heading_md5 VARCHAR(50),
image_md5 VARCHAR(50),
text_md5 VARCHAR(50),
UNIQUE (heading_md5, image_md5, text_md5)
) ENGINE=InnoDB

然后,要么让 PHP 脚本计算文本字段的 md5 哈希值,要么让 MySQL 执行以下操作:

INSERT IGNORE INTO prod_day
(heading, image, `text`, heading_md5, image_md5, text_md5)
VALUES (
'HEADING Lorem ipsum dolor sit amet, ... truncated ...',
'IMAGE Lorem ipsum dolor sit amet, ... truncated ...',
'TEXT Lorem ipsum dolor sit amet, ... truncated ...',
MD5('HEADING Lorem ipsum dolor sit amet, ... truncated ...'),
MD5('IMAGE Lorem ipsum dolor sit amet, ... truncated ...'),
MD5('TEXT Lorem ipsum dolor sit amet, ... truncated ...')
);
Query OK, 1 row affected (0.03 sec)

INSERT IGNORE INTO prod_day
(heading, image, `text`, heading_md5, image_md5, text_md5)
VALUES (
'HEADING Lorem ipsum dolor sit amet, ... truncated ...',
'IMAGE Lorem ipsum dolor sit amet, ... truncated ...',
'TEXT Lorem ipsum dolor sit amet, ... truncated ...',
MD5('HEADING Lorem ipsum dolor sit amet, ... truncated ...'),
MD5('IMAGE Lorem ipsum dolor sit amet, ... truncated ...'),
MD5('TEXT Lorem ipsum dolor sit amet, ... truncated ...')
);
Query OK, 0 rows affected (0.02 sec) -- 0 rows, duplicate avoided!

关于mysql - 关于 INSERT IGNORE mysql 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com