gpt4 book ai didi

mysql - 我的 Sql 批量插入通过截断加载数据

转载 作者:行者123 更新时间:2023-11-30 21:39:12 24 4
gpt4 key购买 nike

我正在尝试通过批量插入选项将数据从 CSV 文件加载到 MYSql 数据库。以下是创建表语法和 CSV 文件

CREATE TABLE discounts (
id INT NOT NULL ,
title VARCHAR(10) NOT NULL,
expired_date DATE NOT NULL,
amount VARCHAR(255 ) NOT NULL

);

CSV 文件格式:

"475","Back","20140401","FFFF"
"476","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","20140901","DDD"

SQL 查询:

LOAD DATA  INFILE 'C:\Users\karthick\Desktop\data.csv' 
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

在上面的创建表语法中,我将“标题”列的数据长度指定为“10”。但是第二行的数据文件中的值超过了长度 10。

当我执行 SQL 查询时,数据已成功加载到 MySQL 数据库,这里是以下输出 & 我在第二行中的值因字段“标题”而被截断。您能否建议如何在不截断行的情况下停止加载该行。如果数据合适,它还应该加载下一个连续行而不终止。请建议

数据库输出:

'475', 'Back', '2014-04-01', 'FFFF'
'476', 'bbbbbbbbbb', '2014-09-01', 'DDD'

最佳答案

这里是你可以使用的技巧。假设您要保留的最大宽度 title 是 100 个字符,您可以按如下方式创建表格:

CREATE TABLE discounts (
id INT NOT NULL,
title VARCHAR(101) NOT NULL, -- slightly larger than desired max width
expired_date DATE NOT NULL,
amount VARCHAR(255 ) NOT NULL
);

然后像您一样加载您的数据。标题超过宽度为 100 的记录实际上在数据库表中的宽度为 101。然后,您可以将此类记录作为删除目标:

DELETE
FROM discounts
WHERE LENGTH(title) > 100;

如果需要,您现在还可以将 title 列的宽度调整为恰好 100:

ALTER TABLE discounts MODIFY COLUMN title VARCHAR(100);

可能可以通过LOAD DATA 执行此操作,但通常此工具相当简单,旨在盲目地将数据加载到 MySQL 表中。 LOAD DATA 确实具有在读取数据时转换数据的能力,但我不确定它是否可以阻止它。

关于mysql - 我的 Sql 批量插入通过截断加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com