【问题标题】:MySQL Insert multiple rowsMySQL插入多行
【发布时间】:2015-12-14 23:52:04
【问题描述】:

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

表:

id (userid)|keyword|data|flags (设置 id) 33 |姓名|约翰|22 33 |性别|男性|21 33 |用户标识 |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 - 键“PRIMARY”的重复条目“33-name”

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;

【问题讨论】:

  • 你的表架构是什么? id 是 auto_increment 吗?
  • 除非id 是一个字符(CHARVARCHAR)列,否则不要引用这些值。
  • 我认为是Primary,因为错误与Primary有关
  • 你能给出你的表架构吗?
  • id varchar(20) latin1_swedish_ci keyword varchar(30) latin1_swedish_ci data varchar(255) latin1_swedish_ci flags int(1)

标签: php mysql sql


【解决方案1】:

好的,我认为这里有两个问题;

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。否则它工作得很好......!!

【讨论】:

  • 插入insert CHAR in INT filed of flag.没有任何问题。
  • 我从插入中删除了 id 列(仅用于测试),也从标志中删除了 '',正如你所建议的,我现在遇到不同的错误 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''keyword', 'data','flags') VALUES ('name', 'John', 22), ('sex', 's' at line 2
  • 好的,请您展示一下表格架构吗?
  • @Sadikhasan,如果你已经检查过,我可能从未尝试过......!!
  • @user2767299 我已经发布了我的表架构,id 和关键字是主要的,这到底意味着什么?
【解决方案2】:

由于列标志是 int

INSERT INTO users_settings
  (id,keyword, data, flags)
VALUES
 ( '31','name', 'John', 22),
 ( '32','sex', 'male', 21),
 ( '33','userid', '33', 1)

【讨论】:

  • 我仍然收到#1062 - Duplicate entry '33-name' for key 'PRIMARY'
  • 然后使用不同的主键
【解决方案3】:

我认为插入你的数据没有问题。

您通过将两个字段的组合作为主键来制作候选键。

当我们定义超过 1 个键时,主键的组合总是被称为候选键,在这种情况下,您不能插入与之前插入的值相同的记录。

在分析完你的答案后,我可以说你之前一定插入过相同的记录。

这个 -> id = 33 -> 关键字 = 名称

所以,尝试另一种不同的值组合,我非常确定插入时不会出现任何错误。

【讨论】:

    【解决方案4】:

    对我有用的是这种格式,出于某种原因,我不得不按 FLAGS (1-22) 订购它们

    INSERT INTO users_settings
      (id,keyword, data, flags)
    VALUES
     ( '33','userid', '33', '1'),
     ( '32','sex', 'male', '21'),
     ( '31','name', 'John', '22')
    

    【讨论】:

    • 什么?为什么需要订购 FLAGS ?没有任何意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2014-09-25
    • 2015-08-12
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多