【问题标题】:While Insert Records To MySQL, get in Error Code 1054向 MySQL 插入记录时,出现错误代码 1054
【发布时间】:2022-07-29 13:23:38
【问题描述】:

我是 MySQL 新手,我尝试在 mysql 表中输入记录。我收到以下错误

插入广告.discountauthorizationrequst SET DARDateTime=cast('2003-01-13 16:50:32' as datetime), `DARPubCode`=trim('DD'), `DARPubDate`=cast('2022-05 -08' 作为日期),`DARAutUser`=trim("U0001"),`DARDeviceID`=trim('123456789ABCDEFGHIJKL987456'),`DARMessage`=trim("这是测试消息"),`DARGranted`=("0 "), `DARUser`=trim("DATAENTRYUSERNAME") 错误代码:1054。“字段列表”中的未知列“DARDateTime”

我在下面列出了我的 INSERT 语句。有人请帮我解决这个问题。我正在使用 mysql 工作台 8.0。

列:

    DARDateTime datetime PK 
    DARPubCode varchar(3) PK 
    DARPubDate date PK 
    DARAutUser varchar(5) 
    DARDeviceID varchar(50) 
    DARMessage varchar(100) 
    DARGranted varchar(1) 
    DARUser varchar(50) PK

这是脚本

    INSERT INTO `advertising`.`discountauthorizationrequst` 
    SET 
       `DARDateTime`=cast('2003-01-13 16:50:32' as datetime), 
       `DARPubCode`=trim('DD'), 
       `DARPubDate`=cast('2022-05-08' as date), 
       `DARAutUser`=trim("U0001"),
       `DARDeviceID`=trim('123456789ABCDEFGHIJKL987456'), 
       `DARMessage`=trim("This Is Test Message"), 
       `DARGranted`=("0"), 
       `DARUser`=trim("DATAENTRYUSERNAME");

已编辑.. 表检查器 - DDL

    CREATE TABLE `discountauthorizationrequst` (
  `DARDateTime` datetime NOT NULL,
  `DARPubCode` varchar(3) NOT NULL,
  `DARPubDate` date NOT NULL,
  `DARAutUser` varchar(5) DEFAULT NULL,
  `DARDeviceID` varchar(50) DEFAULT NULL,
  `DARMessage` varchar(100) DEFAULT NULL,
  `DARGranted` varchar(1) DEFAULT NULL,
  `DARUser` varchar(50) NOT NULL,
  PRIMARY KEY (`DARDateTime`,`DARPubCode`,`DARPubDate`,`DARUser`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

【问题讨论】:

  • 如果要插入,请使用INSERT INTO ... VALUES w3schools.com/mysql/mysql_insert.asp
  • @D-Shih MySQL 支持这种替代语法。
  • INSERT INTO .... SET UPDATEs 一起使用更有用
  • 您可以将此信息添加到您的问题中吗?右键单击表格 (discountauthorizationrequst),选择 Table inspector,转到选项卡 DDL,复制在那里找到的信息,然后将其(作为文本)粘贴到您的问题中。
  • @Luuk 为什么这对语法错误很重要?

标签: mysql


【解决方案1】:

您实际上是在混淆 SQL 命令并想出它们的混合体。 INSERT 命令最常以两种方式完成。

insert into SomeTable 
   ( these, columns ) 
   values 
   ( oneValue, anotherValue)

insert into SomeTable( these, columns )
   select oneColumn, secondColumn
      from SomeOtherTable
      where SomeCondition

UPDATE 命令基于您要更改的现有记录

Update SomeTable set
      thisColumn = SomeValue,
      anotherColumn = SomeOtherValue
   where SomeCondition

所以,你似乎在做的事情会写成

INSERT INTO advertising.discountauthorizationrequst
   (  DARDateTime,
      DARPubCode,
      DARPubDate,
      DARAutUser,
      DARDeviceID,
      DARMessage,
      DARGranted, 
      DARUser
   )
   values
   (
      cast('2003-01-13 16:50:32' as datetime), 
      'DD', 
      '2022-05-08', 
      'U0001', 
      '123456789ABCDEFGHIJKL987456', 
      'This Is Test Message', 
      '0', 
      'DATAENTRYUSERNAME'
   )

请注意格式化的可读性,您可以看到所需的每一列后跟显式值(可以在稍后的代码中参数化)处于相同的序数上下文中。因此,如果您需要在插入中添加一个新列,可以轻松地在第二个提供的值中使用相同的序号位置。

至于第 3 列,通过在 YYYY-MM-DD 中提供字符串,SQL 通常会自动转换为日期格式。其他字段,您不需要显式 TRIM() 一切。如果参数化,当您到达开发的那个点时,您将传递修剪后的 VALUE。

【讨论】:

    【解决方案2】:

    我发现了我犯的错误。我为上表创建了触发器。在我删除这些触发器后,它的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2016-01-04
      • 2016-10-18
      • 2021-03-31
      • 2016-12-26
      • 2016-11-15
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多