ehi*_*ime 5 mysql mysql-insert-id
伙计们,由于某些原因,这段代码在插入到我的数据库时出现了重复的记录
$qry = "INSERT IGNORE INTO reports (". implode(", ",array_keys($reports)) .") VALUES (". implode(", ",array_values($reports)) .");";
if(!mysql_query(trim($qry), $link)) { die('Error: ' . mysql_error()); }
Run Code Online (Sandbox Code Playgroud)
实际声明是这样的
INSERT IGNORE INTO reports (`inspection_number`, `report_date`, `customer`) VALUES ('996', '10-21-2012', 'Jd Daniel');
Run Code Online (Sandbox Code Playgroud)
DB 现在看起来像
19 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
20 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
21 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
22 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
我认为这INSERT IGNORE应该忽略重复项?这是怎么回事?
编辑这是我的表结构,我试图inspection_number用作我的唯一索引进行比较。
--
-- Table structure for table `reports`
--
DROP TABLE IF EXISTS `reports`;
CREATE TABLE `reports` (
`key` INT UNSIGNED AUTO_INCREMENT,
`role` VARCHAR(70),
`region` VARCHAR(70),
`inspection_type` VARCHAR(70),
`inspection_number` VARCHAR(70),
`customer_number` VARCHAR(70),
`report_date` DATE DEFAULT NULL, -- Date field? Needs DATETIME instead? Needs DEFAULT NULL?
-- Does this need to be created on upload,
-- or is it uploaded from tablet?
`order_date` DATE DEFAULT NULL, -- Date field? Needs DATETIME instead? Needs DEFAULT NULL?
-- Ditto
`customer` VARCHAR(70),
`customer_division` VARCHAR(70),
`location` VARCHAR(70),
`memo` VARCHAR(255), -- Same as _comments? VARCHAR(255)??
`billing_key` VARCHAR(70),
PRIMARY KEY(`key`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
Run Code Online (Sandbox Code Playgroud)
INSERT IGNORE 将尝试将记录插入表中,并忽略来自数据库引擎的重复错误,以便您的脚本不会无法继续。
以避免表中出现重复数据。您需要在表上创建一个主键。下面的示例不允许有超过 1 行具有相同的 Inspection_number 数字
例子:
创建表报告( Inspection_number int(10) NOT NULL, 报告日期时间戳, 客户 VARCHAR(50), 主键(检查号) );