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
Post a Comment