【问题标题】:How to Read a text file and insert into mysql tabel if not exist如果不存在,如何读取文本文件并插入到 mysql 表中
【发布时间】:2018-11-25 07:07:57
【问题描述】:

我有这样的值的文本文件:

9001,20180501,08:30,12:30;
9002,20180501,08:30,14:00;
9003,20180501,08:30,12:25;
9004,20180501,08:15,12:30;
9001,20180502,08:11,12:32;
9002,20180502,08:24,12:34;
9003,20180502,07:51,13:52;
9004,20180502,08:30,12:30;
9001,20180503,08:30,12:30;
9002,20180503,08:30,12:30;
9003,20180503,08:30,12:30;
9004,20180503,08:30,12:30;

我有一个名为“Person”的表,其值如下:

id (INT, PK, A_I)      |   Code   |    Date   |   In   |   Out   |
1                          9001      20180501    08:30    12:30
2                          9002      20180501    08:30    14:00

现在我想逐行读取文本文件并在“代码”和“日期”列不存在时插入表中

我可以将带有 LUA 的文本文件逐行读取到变量中并使用此代码:

INSERT INTO Person (id, Code, Date, In, Out) 
VALUES (null, 9001, 20180501, '08:30', '12:30') 
WHERE NOT EXIST (SELECT Code,Date FROM Person WHERE Code=9001 AND Date=20180501)

但它不起作用!

是否仍然使用 MYSQL 读取文本文件并插入?

【问题讨论】:

  • 删除值中的空值。您在插入语句中指定了要填充的 4 个字段,而 id 不是其中之一。

标签: mysql lua


【解决方案1】:

您的代码违反了主键 约束:它为id 提供NULL 值。

由于id 是自动递增的,您根本不必指定它:

INSERT INTO Person (Code, Date, In, Out) 
VALUES (9001, 20180501, '08:30', '12:30') 
WHERE NOT EXISTS (SELECT Code,Date FROM Person WHERE Code=9001 AND Date=20180501)

编辑: 上面的语句对于 MySQL 来说似乎是不正确的。你可以试试这个查询:

INSERT INTO Person (Code, Date, In, Out) 
SELECT Code, Date, In, Out
FROM 
(
   SELECT 9001 AS Code, 20180501 AS Date , '08:30' AS In, '12:30' AS Out
) as t
WHERE NOT EXISTS (SELECT Code,Date FROM Person WHERE Code=9001 AND Date=20180501)

【讨论】:

  • @SRR 你能再具体一点吗?您收到任何错误消息吗?您是否插入了意外的数据?其他一些不受欢迎的行为?
  • 在“SELECT Code,Date FROM Person WHERE Code=9001 AND Date=20180501)”附近出现语法错误
  • @SRR 你看到我做的编辑了吗? MySQL 中的第一个查询在语法上不正确。
  • 对不起,我犯了一个错误。现在是工作。谢谢。
【解决方案2】:

使用字段创建唯一索引

然后运行插入忽略查询它不会允许重复数据

ALTER TABLE Person ADD UNIQUE unique_index'(CodeDateInOut

INSERT IGNORE INTO Person(代码、日期、输入、输出) 值(9001、20180501、'08:30'、'12:30')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2020-09-09
    • 2011-01-14
    相关资源
    最近更新 更多