我有一个设置表,我正在尝试为用户插入数据设置。
表:
id (userid)|keyword|data|flags (setting id) 33 |name |John|22 33 |sex |male|21 33 |userid |33 |1
我正在尝试使用此方法插入:
INSERT INTO users_settings
(id,keyword, data, flags)
VALUES
( '33','name', 'John', '22'),
( '33','sex', 'male', '21'),
( '33','userid', '33', '1'),
但我收到MySQL错误:
#1062 - 重复录入' 33-name'关键' PRIMARY'
id不是自动插入的(因为它用于保存用户ID)。
我的表架构:
CREATE TABLE IF NOT EXISTS `user_settings` (
`id` varchar(20) NOT NULL DEFAULT '-1',
`keyword` varchar(30) NOT NULL DEFAULT '',
`data` varchar(255) NOT NULL,
`flags` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
答案 0 :(得分:0)
由于列标志是int
INSERT INTO users_settings
(id,keyword, data, flags)
VALUES
( '31','name', 'John', 22),
( '32','sex', 'male', 21),
( '33','userid', '33', 1)
答案 1 :(得分:0)
好的,我认为这里有两个问题;
1)您的ID(使用的ID)字段可能是主键。
2)您正试图在国旗的INT字段中插入CHAR。
所以请尝试;
INSERT INTO user_settings
(id,keyword, data, flags)
VALUES
( '31','name', 'John', 22),
( '32','sex', 'male', 21),
( '33','userid', '33', 1);
修改强>
检查此SQL它是否完美,
只有一件事,创建表的名称为 user_settings ,并且您插入的表名为 users_settings 。否则它工作得很好...... !!
答案 2 :(得分:0)
我认为插入数据没有问题。
您已通过将两个字段组合作为主键来制作候选键。
当我们定义多于一个键时,则主键的组合总是被称为候选键,在这种情况下,您不能插入具有与之前插入的值相同的值的记录。
在回答了你的答案后,我可以说你之前必须插入相同的记录。
这一个 - > id = 33 - > keyword = name
因此,尝试另一种不同的值组合,我非常确定在插入时不会出现任何错误。
答案 3 :(得分:-1)
对我来说有用的是这种格式,由于某种原因,我必须通过FLAGS(1-22)订购它们
INSERT INTO users_settings
(id,keyword, data, flags)
VALUES
( '33','userid', '33', '1'),
( '32','sex', 'male', '21'),
( '31','name', 'John', '22')