2010-12-03 76 views
1

我的表结构是:mysql的主键使用INSERT INTO时...对重复密钥更新

CREATE TABLE IF NOT EXISTS `users_settings_temp` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `userid` int(10) unsigned DEFAULT NULL, 
    `type` enum('type1','type2') 
    `data` text, 
    `date_created` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

我所试图做的是:

让我们说,我要插入一个新条目,但我不希望它是重复的,此前谷歌的时候,我发现这个格式:

INSERT INTO users_settings_temp(...) 
ON DUPLICATE KEY UPDATE data = '{$data}' 

我想这个问题是在我的表中,主键=>id。如何更改表,这样我可以使用:

INSERT INTO ... ON DUPLICATE KEY UPDATE 

我可以使用USER_ID +型作为主键?如果是的话,你能告诉我怎么做吗?

+0

什么你想要发生重复?把它扔出去?将数据更改为某些内容? – 2010-12-03 08:53:39

+0

对不起,不具体。我想更新时它的重复。我会尽快更新我的问题。 – 2010-12-03 08:55:03

回答

5
CREATE TABLE IF NOT EXISTS `users_settings_temp` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `userid` int(10) unsigned DEFAULT NULL, 
    `type` enum('type1','type2'), 
    `data` text, 
    `date_created` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`, `type`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

当你不喜欢这样,然后

一)指定ID的工作

mysql> INSERT INTO users_settings_temp VALUES (1, 2, 'type1', 'keks', 5); 
Query OK, 1 row affected (0.00 sec) 

mysql> INSERT INTO users_settings_temp VALUES (1, 2, 'type2', 'keks', 5); 
Query OK, 1 row affected (0.00 sec) 

B)的过程中主键保证是唯一

mysql> INSERT INTO users_settings_temp VALUES (1, 2, 'type2', 'keks', 5); 
ERROR 1062 (23000): Duplicate entry '1-type2' for key 'PRIMARY' 

C)让数据库拉一个新的ID工程

mysql> INSERT INTO users_settings_temp VALUES (NULL, 2, 'type2', 'keks', 5); 
Query OK, 1 row affected (0.00 sec) 

mysql> INSERT INTO users_settings_temp VALUES (NULL, 2, 'type1', 'keks', 5); 
Query OK, 1 row affected (0.00 sec) 

反而会加重他们总是

mysql> SELECT * FROM users_settings_temp; 
+----+--------+-------+------+--------------+ 
| id | userid | type | data | date_created | 
+----+--------+-------+------+--------------+ 
| 1 |  2 | type1 | keks |   5 | 
| 1 |  2 | type2 | keks |   5 | 
| 2 |  2 | type2 | keks |   5 | 
| 3 |  2 | type1 | keks |   5 | 
+----+--------+-------+------+--------------+ 
4 rows in set (0.00 sec) 

注:

你应该想到,如果你的id仍然应该自动递增与否。 另外,不能想到为什么date_created应该是int(11)而不是datetime