mysql数据按⾏插⼊,使⽤INSERT语句向MySQL数据表插⼊⾏
记录-电脑资料
使⽤INSERT语句插⼊新数据
语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…
INSERT [INTO] tbl_name SET col_name=expression, ...
让我们开始利⽤ INSERT 语句来增加记录,这是⼀个 SQL 语句,需要为它指定希望插⼊数据⾏的表或 将值按⾏放⼊的表,
可指定所有列的值:
例如:
shell> mysql –u root –p
mysql> use mytest;
mysql> insert into worker values(“tom”,”tom@yahoo”);
“INTO”⼀词⾃ MySQL 3.22.5 以来是可选的。(这⼀点对其他形式的 INSERT 语句也成⽴。) VALUES 表必须包含表中每列的值,并且按表中列的存放次序给出。(⼀般,这就是创建表时列的定义次 序。如果不能肯定的话,可使⽤ DESCRIBE tbl_name 来查看这个次序。)
使⽤多个值表,可以⼀次提供多⾏数据。
Mysql>insert into worker values(‘tom’,’tom@yahoo’),(‘paul’,’paul@yahoo ’);
有多个值表的INSERT ... VALUES的形式在MySQL 3.22.5或以后版本中⽀持。
可以给出要赋值的那个列,然后再列出值。这对于希望建⽴只有⼏个列需要初始设置的记录是很有⽤ 的。
例如:
mysql>insert into worker (name) values (‘tom’);
⾃ MySQL 3.22.5 以来,这种形式的 INSERT 也允许多个值表:
mysql>insert into worker (name) values (‘tom’), (‘paul’);
在列的列表中未给出名称的列都将赋予缺省值。
⾃ MySQL 3.22 .10 以来,可以 col_name = value 的形式给出列和值。
例如:
mysql>insert into worker set name=’tom’;
在 SET ⼦句中未命名的⾏都赋予⼀个缺省值。
使⽤这种形式的 INSERT 语句不能插⼊多⾏。
⼀个expression可以引⽤在⼀个值表先前设置的任何列。例如,你能这样:
mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
但不能这样:
mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
使⽤INSERT…SELECT语句插⼊从其他表选择的⾏
当我们在上⼀节学习创建表时,知道可以使⽤select从其它表来直接创建表,甚⾄可以同时复制数据 记录。如果你已经拥有了⼀个表,你同样可以从select语句的配合中获益。
从其它表中录⼊数据,例如:
mysql>insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
你也可以略去⽬的表的列列表,如果你每⼀列都有数据录⼊。
mysql>insert into tbl_name1 select col3,col4 from tbl_name2;
INSERT INTO ... SELECT语句满⾜下列条件:
查询不能包含⼀个ORDER BY⼦句。
INSERT语句的⽬的表不能出现在SELECT查询部分的FROM⼦句,因为这在ANSI SQL中被禁⽌让从你正在 插⼊的表中SELECT。(问题是SELECT将可能发现在同⼀个运⾏期间内先前 ⼊的记录。当使⽤⼦选择⼦ 句时,情况能很容易混淆)
使⽤replace、replace…select语句插⼊
REPLACE功能与INSERT完全⼀样,除了如果在表中的⼀个⽼记录具有在⼀个唯⼀索引上的新记录有相同 的值,在新记录 ⼊之前,⽼记录被删除。对于这种情况,insert语句的表现是产⽣⼀个错误。
REPLACE语句也可以褐SELECT相配合,所以上两⼩节的内容完全适合REPALCE.。
应该注意的是,由于REPLACE语句可能改变原有的记录,因此使⽤时要⼩⼼。
使⽤LOAD语句批量录⼊数据
本章的前⾯讨论如何使⽤SQL向⼀个表中插⼊数据。但是,如果你需要向⼀个表中添加许多条记录,使 ⽤SQL语句输⼊数据是很不⽅便的。幸运的是,MySQL提供了⼀些⽅法⽤于批量录⼊数据,使得向表中添加 数据变得容易了。本节以及下⼀节,将介绍这些⽅法。本节将介绍SQL语⾔级的解决⽅法。
1、基本语法
语法:LOAD DATA [LOCAL] INFILE '' [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE语句从⼀个⽂本⽂件中以很⾼的速度读⼊⼀个表中。如果指定LOCAL关键词,从客户主 机读⽂件。如果LOCAL没指定,⽂件必须位于服务器上。(LOCAL在MySQL3.22.6或以后版本中可⽤。)
为了安全原因,当读取位于服务器上的⽂本⽂件时,⽂件必须处于数据库⽬录或可被所有⼈读取。另 外,为了对服务器上⽂件使⽤LOAD DATA INFILE,在服务器主机上你必须有file的权限。见第七章 数据 库安全。
REPLACE和IGNORE关键词控制对现有的唯⼀键记录的重复的处理。如果你指定REPLACE,新⾏将代替有 相同的唯⼀键值的现有⾏。如果你指定IGNORE,跳过有唯⼀键的现有⾏的重复⾏的输⼊。如果你不指定任 何⼀个选项,当到重复键键时,出现⼀个错误,并且⽂本⽂件的余下部分被忽略时。
如果你使⽤LOCAL关键词从⼀个本地⽂件装载数据,服务器没有办法在操作的当中停⽌⽂件的传输,因 此缺省的⾏为好像IGNORE被指定⼀样。
2、⽂件的搜寻原则
当在服务器主机上寻⽂件时,服务器使⽤下列规则:
如果给出⼀个有⼀个或多个前置部件的相对路径名,服务器相对服务器的数据⽬录搜索⽂件。
如果给出⼀个没有前置部件的⼀个⽂件名,服务器在当前数据库的数据库⽬录寻⽂件。
注意这些规则意味着⼀个像“./”给出的⽂件是从服务器的数据⽬录读取,⽽作为 “”给
出的⼀个⽂件是从当前数据库的数据库⽬录下读取。也要注意,对于下列哪些语句,对 db1⽂件从数据库⽬录读取,⽽不是db2:
mysql> USE db1;
mysql> LOAD DATA INFILE "./" INTO _table;
3、FIELDS和LINES⼦句的语法
如果你指定⼀个FIELDS⼦句,它的每⼀个⼦句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可选的,除了你必须⾄少指定他们之⼀。
如果你不指定⼀个FIELDS⼦句,缺省值与如果你这样写的相同:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果你不指定⼀个LINES⼦句,缺省值与如果你这样写的相同:
LINES TERMINATED BY '\n'
换句话说,缺省值导致读取输⼊时,LOAD DATA INFILE表现如下:
在换⾏符处寻⾏边界
在定位符处将⾏分进字段
不要期望字段由任何引号字符封装
将由“\”开头的定位符、换⾏符或“\”解释是字段值的部分字⾯字符
LOAD DATA INFILE能被⽤来读取从外部来源获得的⽂件。例如,以dBASE格式的⽂件将有由逗号分隔并 ⽤双引号包围的字段。如果⽂件中的⾏由换⾏符终⽌,下⾯显⽰的命令说明你将⽤来装载⽂件的字段和⾏ 处理选项:
mysql> LOAD DATA INFILE '' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
任何字段或⾏处理选项可以指定⼀个空字符串('')。如果不是空,FIELDS [OPTIONALLY] ENCLOSED BY 和FIELDS ESCAPED BY值必须是⼀个单个字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可以是超 过⼀个字符。例如,写⼊由回车换⾏符对
(CR+LF)终⽌的⾏,或读取包含这样⾏的⼀个⽂件,指定⼀个 LINES TERMINATED BY '\r\n'⼦句。
FIELDS [OPTIONALLY] ENCLOSED BY控制字段的包围字符。对于输出(SELECT ... INTO OUTFILE),如 果你省略OPTIONALLY,所有的字段由ENCLOSED BY字符包围。对于这样的输出的⼀个例⼦(使⽤⼀个逗号作 为字段分隔符)显⽰在下⾯:
"1","a string","100.20"
"2","a string containing a , comma","102.20"
"3","a string containing a \" quote","102.20"
"4","a string containing a \", quote and comma","102.20"
如果你指定OPTIONALLY,ENCLOSED BY字符仅被⽤于包围CHAR和VARCHAR字段:
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a \" quote",102.20
4,"a string containing a \", quote and comma",102.20
注意,⼀个字段值中的ENCLOSED BY字符的出现通过⽤ESCAPED BY字符作为其前缀来转义。也要注意, 如果你指定⼀个空ESCAPED BY值,可能产⽣不能被LOAD DATA INFILE正确读出的输出。例如,如果转义字 符为空,上⾯显⽰的输出显⽰如下。注意到在第四⾏的第⼆个字段包含跟随引号的⼀个逗号,它(错误地) 好象要终⽌字段:
insert语句字段顺序
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a " quote",102.20
4,"a string containing a ", quote and comma",102.20
FIELDS ESCAPED BY控制如何写⼊或读出特殊字符。如果FIELDS ESCAPED BY字符不是空的,它被⽤于 前缀在输出上的下列字符:
FIELDS ESCAPED BY字符
FIELDS [OPTIONALLY] ENCLOSED BY字符
FIELDS TERMINATED BY和LINES TERMINATED BY值的第⼀个字符
ASCII 0(实际上将后续转义字符写成 ASCII'0',⽽不是⼀个零值字节)
如果FIELDS ESCAPED BY字符是空的,没有字符被转义。指定⼀个空转义字符可能不是⼀个好主意,特 别是如果在你数据中的字段值包含刚才给出的表中的任何字符。
对于输⼊,如果FIELDS ESCAPED BY字符不是空的,该字符的出现被剥去并且后续字符在字⾯上作为字 段值的⼀个部分。例外是⼀个转义的“0”或“N”(即,\0或\N,如果转义字符是“\”)。这些序列被解 释为ASCII 0(⼀个零值字节)和NULL。见下⾯关于NULL处理的规则。
为数据库装载数据是管理员的重要职责之⼀,正因为重要,所以MySQL提供的⽅法也是⾮常繁多。其中 主要的在本节已经列举:
1、使⽤INSERT、REPLACE语句
2、使⽤INSERT/REPLACE…SELECT语句
3、使⽤LOAD DATA INFILE语句
4、使⽤实⽤程序mysqlimport

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。