向数据库中插入数据是数据库的基本操作之一。在MYSQL中通过SQL语句实现向数据库插入数据的方式大致有如下几种:
1、使用INSERT、REPLACE语句。
2、使用INSERT/REPLACE INTO…SELECT语句。
3、使用LOAD DATA INFILE语句。
另外可以使用mysqlimport工具向数据库插入数据,以后再讲。
对于第一种情况,INSERT、REPLACE语句,INSERT向表中插入数据,
语法同MS SQL基本相同,差别是MYSQL可以一次插入多条记录,而且
书写方便,如:
INSERT INTO STUDENT VALUES(‘李蕾',’女'),('李雷','男');
而INSERT 和REPLACE的区别是INSERT如果在插入记录具有唯一索引相同
时会出错,而REPLACE则会修改原记录。
另外INSERT中可以使用col_name = value的方式赋值,当只能对一个列
进行操作。如:
INSERT INTO STUDENT SET name = ‘张三’;
INSERT 中允许后一列引用前一列的值。如:
INSERT INFO test_table (col1,col1*2);但不支持后一列引用前一列的值。
INSERT/REPLACE INTO …SELECT语句是将后面SELECT语句的记录插入到
INTO后的表中,如:
INSERT INTO table1_name SELECT col1,col2 FROM table2_name;
但此处要求在SELECT查询中不能包含ORDER BY排序子句且table1_name不
能够出现在table2_name的位子上。
第三种就是使用LOAD DATA INFILE语句批量录入数据,该数据一般是通过
SELECT INTO OUTFILE来生成的文件中获取。SELECT INTO OUTFILE在后面
备份数据库数据时再将,下面是LOAD DATA INFILE 的用法。
LOAD DATA [LOCAL] INFILE ‘filename’ [REPLACE|IGNORE] INTO TABLE tab_name;
LOCAL可选,是指后面的文件filename是存在服务器上还是客户端上。REPLACE和IGNORE
是指遇见唯一索引相同是是修改还是跳过该条记录继续执行,如果不指定则遇见唯一索引相同
是抱错停止,但如果指定了LOCAL选项,则是处理的是传输过去的文件,服务器无法阻止该过程
则相当于在指定LOCAL选项时,如果不指定REPLACE或IGNORE中的任何一个,默认是IGNORE。
而在此处对文件的位置却是要注意的,如果给出的是绝对路径,则直接到该路径读文件即可,如果
给出的文件名有前缀,则该路径是相对于数据目录的,即是相对于data(如果数据目录未修改)目录的。而如果给定的是一个文件名,则要文件是在当前数据库的目录下,因此现在的./file.txt和file.txt不在
是指向同一文件了。
另外,LOAD DATA INFILE还可以用如下用法:
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ','---指定了每个字段的终止符为逗号
ENCLOSED BY '"' --指定字段是使用引号来包围着
LINES TERMINATED BY '/n'; --制定每条记录的结束符是换行符。
其中还可以使用ESCAPED BY来指定转义字符,但 ESCAPED BY和ENCLOSED BY指定的字符
只能够是单字符,而FIELDS TERMINATED 和LINES TERMINATED 指定的字符可以是多个。如 LINES TERMINATED BY ‘/r/n’.
另外如果ESCAPED BY指定字符不为空时,除了指定字符被剥去后,后面的字符作为字段的内容被保存,但是\0和\n例外,一个被解释为ASCII 0 一个是NULL。