## 数据操作 - 插入
创建了数据表,表中空空如也怎么可以呢,介绍两种插入数据的方法。
### insert 语句
让我们开始利用 insert 语句来增加记录,这是一个 SQL 语句,需要为它指定希望插入数据行的表或将值按行放入的表。如果你设置了主键并且自动增长,添加的时候需要把对应的主键值设置为 null 或者数字 “0”。
基本语法:
INSERT [into] table_name [(col_name,...)] VALUES (pression,...)
INSERT [into] table_name SET col_name=expression
“into” 一词自 MySQL 3.22.5 以来是可选的。(这一点对其他形式的 insert 语句也成立。)values 表必须包含表中每列的值,并且按表中列的存放次序给出。
可指定所有列的值:
INSERT INTO test001 VALUES (null,'jack','23','beij');
使用多个值表,可以一次提供多行数据:
INSERT INTO test001 VALUES ('jack','23','beij'), ('grey','34','ah');
可以给出要赋值的那个列,然后再列出值。这对于希望建立只有几个列需要初始设置 的记录是很有用的:
INSERT INTO test001 (name) VALUES ('gery');
INSERT INTO test001 (name) VALUES ('mack'), ('rose');
INSERT INTO test001 SET name='sara'; // 使用这种形式的 insert 语句不能插入多行
### insert ... select 语句
学习创建表时,我们知道可以使用 create ... select 从其它表来直接创建表,甚至可以同时复制数据记录。如果你已经拥有了一个表,你同样可以从 select 语句的配合中获益。
基本语法:
INSERT [INTO] tb_name select * FROM tb_name1; // 表结构完全一致
INSERT [INTO] tb_name (col1) SELECT col1 FROM tb_name1; // 取某个值添加
insert ... select 语句满足下列条件:
- 查询不能包含一个 order by 子句。
- insert 语句的目的表不能出现在 select 查询部分的 from 子句中。
看下面实例:
INSERT test001_01 SELECT * FROM test001;
INSERT test001_02 (name) SELECT name FROM test001;