Mysql 跳过加载数据填充的第一列
我有这样一张桌子:Mysql 跳过加载数据填充的第一列,mysql,Mysql,我有这样一张桌子: mysql> show create table final\G; *************************** 1. row *************************** Table: final Create Table: CREATE TABLE `final` ( `id` int(4) NOT NULL AUTO_INCREMENT, `cdatetime` varchar(255) NOT NULL, `addr
mysql> show create table final\G;
*************************** 1. row ***************************
Table: final
Create Table: CREATE TABLE `final` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`cdatetime` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`district` varchar(255) NOT NULL,
`beat` varchar(255) NOT NULL,
`grid` varchar(255) NOT NULL,
`crimedescr` varchar(255) NOT NULL,
`ucr_ncic_code` varchar(255) NOT NULL,
`latitude` varchar(255) NOT NULL,
`longitude` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
我得到的csv文件如下所示:
cdatetime,address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude
1/1/06 0:00,3108 OCCIDENTAL DR,3,3C ,1115,10851(A)VC TAKE VEH W/O OWNER,2404,38.55042047,-121.3914158
1/1/06 0:00,2082 EXPEDITION WAY,5,5A ,1512,459 PC BURGLARY RESIDENCE,2204,38.47350069,-121.4901858
1/1/06 0:00,4 PALEN CT,2,2A ,212,10851(A)VC TAKE VEH W/O OWNER,2404,38.65784584,-121.4621009
1/1/06 0:00,22 BECKFORD CT,6,6C ,1443,476 PC PASS FICTICIOUS CHECK,2501,38.50677377,-121.4269508
load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
我要做的是将CSV文件加载到final表中。问题是csv文件没有ID列,所以我想是否可以告诉mysql跳过列ID并将数据加载到其余列中,但必须使用ID。因此,理想情况下,它将如下所示:
cdatetime,address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude
1/1/06 0:00,3108 OCCIDENTAL DR,3,3C ,1115,10851(A)VC TAKE VEH W/O OWNER,2404,38.55042047,-121.3914158
1/1/06 0:00,2082 EXPEDITION WAY,5,5A ,1512,459 PC BURGLARY RESIDENCE,2204,38.47350069,-121.4901858
1/1/06 0:00,4 PALEN CT,2,2A ,212,10851(A)VC TAKE VEH W/O OWNER,2404,38.65784584,-121.4621009
1/1/06 0:00,22 BECKFORD CT,6,6C ,1443,476 PC PASS FICTICIOUS CHECK,2501,38.50677377,-121.4269508
load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
“1/1/06 0:003108 OCCIDENTAL DR,3,3C,111510851(A)VC TAKE VEH W/O OWNER,2404,38.55042047,-121.3914158”被加载到列中,mysql自动向列ID添加1,然后“1/1/06 0:002082探险路,5,5A,1512459 PC防盗住宅,2204,38.47350069,-121.4901858”加载mysql并将2添加到ID列等
最近,用户“Shadow”告诉我应该指定要加载的列,所以我做了如下操作:
cdatetime,address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude
1/1/06 0:00,3108 OCCIDENTAL DR,3,3C ,1115,10851(A)VC TAKE VEH W/O OWNER,2404,38.55042047,-121.3914158
1/1/06 0:00,2082 EXPEDITION WAY,5,5A ,1512,459 PC BURGLARY RESIDENCE,2204,38.47350069,-121.4901858
1/1/06 0:00,4 PALEN CT,2,2A ,212,10851(A)VC TAKE VEH W/O OWNER,2404,38.65784584,-121.4621009
1/1/06 0:00,22 BECKFORD CT,6,6C ,1443,476 PC PASS FICTICIOUS CHECK,2501,38.50677377,-121.4269508
load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
Mysql返回:
ERROR 1261 (01000): Row 1 doesn't contain data for all columns
根据mysql load data INFLE,手动字段分隔符不是“,”,因此我试图通过在语句末尾添加以“,”结尾的字段来更改它,但这会中断查询。这里的正确语法是什么
谢谢
回答
mysql> CREATE TABLE `final` (
-> `id` int(4) NOT NULL AUTO_INCREMENT,
-> `cdatetime` longtext NULL,
-> `address` longtext NULL,
-> `district` longtext NULL,
-> `beat` longtext NULL,
-> `grid` longtext NULL,
-> `crimedescr` longtext NULL,
-> `ucr_ncic_code` longtext NULL,
-> `latitude` longtext NULL,
-> `longitude` longtext NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.17 sec)
mysql> LOAD DATA infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final FIELDS TERMINATED BY ',' lines terminated by '\r' IGNORE 1 ROWS (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
Query OK, 7584 rows affected (0.08 sec)
Records: 7584 Deleted: 0 Skipped: 0 Warnings: 0
我认为您需要添加由和忽略行指令包围的
LOAD DATA infile '/SacramentocrimeJanuary2006.csv'
INTO TABLE final
(cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
FIELDS TERMINATED BY ','
ENCLOSED BY ''
IGNORE 1 ROWS;
我认为您需要添加由
和忽略行指令包围的
LOAD DATA infile '/SacramentocrimeJanuary2006.csv'
INTO TABLE final
(cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude);
FIELDS TERMINATED BY ','
ENCLOSED BY ''
IGNORE 1 ROWS;
Linux:
或窗口:
LOAD DATA INFILE 'c:\\nate\\try_this123.txt'
INTO TABLE final
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cdatetime, address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude)
set id = NULL;
我不需要任何像单引号或双引号这样的封闭的划分就可以做到这一点。问题是,如果你的地址有逗号,它会把你所有的数据都用移位的问题抛出去,那会发生什么呢
这就是为什么在理想情况下(阅读:几乎绝对),您通常需要用双引号包装数据,除非您的数据是由您生成的,并且几乎是简单的,例如:
1,2,cat,14,8
因此,在第三方系统无法控制数据输入方式的情况下,人们必须先编写例程来清除数据,以便使用足够的故障保护包装为导入做好准备。Linux:
LOAD DATA INFILE '/home/frank/try_this123.txt'
INTO TABLE final
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(cdatetime, address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude)
set id = NULL;
或窗口:
LOAD DATA INFILE 'c:\\nate\\try_this123.txt'
INTO TABLE final
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cdatetime, address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude)
set id = NULL;
我不需要任何像单引号或双引号这样的封闭的划分就可以做到这一点。问题是,如果你的地址有逗号,它会把你所有的数据都用移位的问题抛出去,那会发生什么呢
这就是为什么在理想情况下(阅读:几乎绝对),您通常需要用双引号包装数据,除非您的数据是由您生成的,并且几乎是简单的,例如:
1,2,cat,14,8
因此,在第三方系统无法控制数据输入方式的情况下,人们必须先编写例程来清除数据,以便使用足够的故障保护包装为导入做好准备。使用以下格式:
load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude)
fields terminated by ','
lines terminated by '\r\n'
ignore 1 lines;
使用以下格式:
load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude)
fields terminated by ','
lines terminated by '\r\n'
ignore 1 lines;
mysql>将数据填充'/SacramentocrimeJanuary2006.csv'->加载到以“,”结尾的表最终字段中,并用“,”括起来,忽略1行->(cdatetime、地址、地区、节拍、网格、犯罪记录、ucr\U ncic\U代码、纬度、经度);查询正常,0行受影响(0.00秒)记录:0已删除:0已跳过:0警告:0mysql>将数据填充“/SacramentocrimeJanuary2006.csv”->加载到以“,”结尾的表最终字段中,由“,”括起“,”忽略1行->(cdatetime、地址、地区、节拍、网格、犯罪记录、ucr\U ncic\U代码、纬度、经度);查询确定,0行受影响(0.00秒)记录:0已删除:0已跳过:0警告:0