首先,我是MySQL的新手,我试着去学习它.
我有一个在页面加载上运行的脚本,它检索联合类型数据并将其添加到MySQL数据库表中.
我想要做的就是将找到的新数据添加到数据库表中,而不添加从上一页加载中找到的重复项.
我的数据库表如下:
// Creates a Database Table only if the Table does not already exist
mysql_query("CREATE TABLE IF NOT EXISTS $TableName(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
Field_2 varchar(255) NOT NULL default '',
Post_Date int(11) NOT NULL default '0',
Field_4 varchar(10) NOT NULL default '',
Field_5 varchar(12) NOT NULL default '',
Field_6 longtext NOT NULL default '',
Field_7 longtext NOT NULL default '',
Field_8 longtext NOT NULL default '') ") or die(mysql_error()
);
Run Code Online (Sandbox Code Playgroud)
有一个索引如下所示:
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Drop PRIMARY BTREE Yes No id 830 A
Run Code Online (Sandbox Code Playgroud)
所述POST_DATE字段总是唯一的(UNIX格式),因此它可以在确定重复使用.
我目前正在使用以下代码将数据输入数据库表,然后删除重复项:
// Enter the $sql Data into the MySQL Database Table
mysql_query("INSERT INTO $TableName (id, Field_2, Post_Date, Field_4, Field_5, Field_6, Field_7, Field_8) VALUES ".implode(',', $sql));
// Removes Duplicates from the MySQL Database Table based on the 'Post_Date' field
mysql_query("Alter IGNORE table $TableName add unique key (Post_Date)");
// Deletes the added index key created by the Removes Duplicates function
mysql_query("ALTER TABLE $TableName DROP INDEX Post_Date");
Run Code Online (Sandbox Code Playgroud)
问题是如果网页被多次命中并导致创建了许多索引,则DROP INDEX查询将失败.
虽然我有一个删除附加索引的解决方案,但其他用户告诉我完全避免使用此方法并尝试另一种类似于INSERT的方法... ON DUPLICATE KEY UPDATE http://dev.mysql.com/doc/refman/ 5.0/EN /插入式,duplicate.html
但我不知道如何构建查询以使其工作.
我做了我的研究,发现了以下网页,该网页说明了如何将数据输入到没有重复的表中:http://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm
该网页说明了这个例子:
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas');
Run Code Online (Sandbox Code Playgroud)
但我不知道如何修改我的查询代码使其工作.
我尝试将IGNORE添加到查询中,但它也允许在表中重复输入:
mysql_query("INSERT IGNORE INTO $TableName (id, Field_2, Post_Date, Field_4, Field_5, Field_6, Field_7, Field_8) VALUES ".implode(',', $sql));
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢.
设置您的唯一索引以防止重复记录,并通过添加忽略关键字来执行插入查询,以免出现错误(如果您的插入是重复的),说明文档说明您可以这样做。
如果您向表中插入一条记录,该记录与定义索引的列中的现有记录重复,则表中存在唯一索引通常会导致发生错误。
使用 INSERT IGNORE 而不是 INSERT。如果一条记录与现有记录不重复,MySQL 将照常插入它。如果记录是重复的,IGNORE 关键字会告诉 MySQL 默默地丢弃它,而不会产生错误。
编辑:
在 sqlfiddle 检查示例:
http://sqlfiddle.com/#!2/4ad8a/3
编辑2:
CREATE TABLE IF NOT EXISTS TestTable(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`Field_2` VARCHAR(255) NOT NULL DEFAULT '',
`Post_Date` INT(11) NOT NULL DEFAULT '0',
`Field_4` VARCHAR(10) NOT NULL DEFAULT '',
`Field_5` VARCHAR(12) NOT NULL DEFAULT '',
`Field_6` LONGTEXT NOT NULL,
`Field_7` LONGTEXT NOT NULL,
`Field_8` LONGTEXT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `Post_Date` (`Post_Date`)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4687 次 |
| 最近记录: |