Mysql primary key when using INSERT INTO ... ON DUPLICATE KEY UPDATE -


my table structure is:

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 ; 

what trying is:

let want insert new entry, dont want duplicate, after google around, found format:

insert users_settings_temp(...) on duplicate key update data = '{$data}' 

i guess problem in table, primary key => id. how alter table, use the:

insert ... on duplicate key update 

can use user_id + type primary key? if yes, please show me how it?

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 ; 

when then

a) specifying id works

mysql> insert users_settings_temp values (1, 2, 'type1', 'keks', 5); query ok, 1 row affected (0.00 sec)  mysql> insert users_settings_temp values (1, 2, 'type2', 'keks', 5); query ok, 1 row affected (0.00 sec) 

b) of course primary key guaranteed unique

mysql> insert users_settings_temp values (1, 2, 'type2', 'keks', 5); error 1062 (23000): duplicate entry '1-type2' key 'primary' 

c) letting database pull new id works

mysql> insert users_settings_temp values (null, 2, 'type2', 'keks', 5); query ok, 1 row affected (0.00 sec)  mysql> insert users_settings_temp values (null, 2, 'type1', 'keks', 5); query ok, 1 row affected (0.00 sec) 

but increase them always

mysql> select * 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) 

notes:

you should think if id should still autoincrement or not. also, can not think of reason why date_created should int(11) instead of datetime


Comments

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -