MySQL插入多行

时间:2014-07-12 04:32:43

标签: php mysql sql

我有一个设置表,我正在尝试为用户插入数据设置。

表:

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;

4 个答案:

答案 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')