傢伙我得到的插入重複記錄到我的數據庫由於某種原因,這個代碼MYSQL如果不存在插入數據
$qry = "INSERT IGNORE INTO reports (". implode(", ",array_keys($reports)) .") VALUES (". implode(", ",array_values($reports)) .");";
if(!mysql_query(trim($qry), $link)) { die('Error: ' . mysql_error()); }
實際的說法是這樣的
INSERT IGNORE INTO reports (`inspection_number`, `report_date`, `customer`) VALUES ('996', '10-21-2012', 'Jd Daniel');
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
我以爲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;
這也可能是有用的:http://stackoverflow.com/questions/548541/insert-ignore-vs -insert-on-duplicate-key-update – Dan 2012-02-16 18:19:56
除此之外,它還會導致主鍵違例被視爲警告。因此,如果19,22恰好是一個汽車公司,例如,沒有重複... – 2012-02-16 18:24:22
但結構說'inspection_number'是*不*唯一索引? – JJJ 2012-02-16 18:39:47