1. insert 插入语句语法
语法格式:
insert into 表名 (字段名1, 字段名2, 字段名3, ......) values (值1, 值2, 值3, ......)
要求:字段的数量和值的数量相同,并且数据类型要对应相同。
2. 正常插入
(1)正常插入一条数据:
insert into t_student (no, name, sex, classno, birth) values (1, 'zhangsan', '1', 'gaosan1ban', '1950-10-12');
3. 调整字段顺序插入
(2)可以调整字段顺序,但是后面要插入的值的顺序要与前一致,如下插入一条新的记录,将no移动到了最后,相应的值也要写在最后。
insert into t_student (name, sex, classno, birth, no) values ('lisi', '1', 'gaosan1ban', '1950-10-12', 2);
4. 插入部分字段
(3)可以只插入部门字段元素值,但是未设置值的元素将为NULL(如果在建表的时候没有给该字段指定默认值);
insert into t_student(name) values ('wangwu');
+------+----------+------+------------+------------+
| no | name | sex | classno | birth |
+------+----------+------+------------+------------+
| 1 | zhangsan | 1 | gaosan1ban | 1950-10-12 |
| 2 | lisi | 1 | gaosan1ban | 1950-10-12 |
| NULL | wangwu | NULL | NULL | NULL |
+------+----------+------+------------+------------+
下面,我们删除表t_student,指定sex的默认值为1,重新建表:
- 删除表t_student
drop table if exists t_student // 如果这个表存在的话就删除
- 重新创建表t_student,指定sex默认值为1
create table t_student(
no bigint,
name varchar(255),
sex char(1) default 1,
classno varchar(255),
birth char(10)
);
- 插入数据,仅指定name
insert into t_student (name) values ('zhangsan');
其余不指定的值为NULL,sex默认是1;
mysql> select * from t_student;
+------+----------+------+---------+-------+
| no | name | sex | classno | birth |
+------+----------+------+---------+-------+
| NULL | zhangsan | 1 | NULL | NULL |
+------+----------+------+---------+-------+
1 row in set (0.00 sec)
需要注意的是:
当一条insert语句执行成功后,表中必然会多一行记录。即使多的这一行记录当中某些字段为NULL,后期也没有办法再执行insert语句插入数据,只能使用update进行更新。
5. 省略字段名插入
插入数据时,我们可以省略字段名,但后面的值必须要按照顺序进行赋值。
// 字段可以省略不写,但是后面的value对数量和顺序都有要求。
insert into t_student values (1, 'jack', '0', 'gaosan2ban', '1960-10-23');
不可以省略字段值,否则会报错:
insert into t_student values (1, 'jack', '0', 'gaosan2ban'); // 字段值与字段数不一致,会报错
ERROR 1136 (21S01): Column count doesn't match value count at row 1
6. 一次插入多行数据
insert into 表名 (字段名1, 字段名2, 字段名3, …) values (值1, 值2, 值3, …), (值1, 值2, 值3, …),
insert table t_student values (3, 'rose', '1', 'gaosan2ban', '1952-12-14'), (4, 'laotie', '1', 'gaosan2ban', '1955-12-14');
mysql> select * from t_student;
+------+----------+------+------------+------------+
| no | name | sex | classno | birth |
+------+----------+------+------------+------------+
| NULL | zhangsan | 1 | NULL | NULL |
| 1 | jack | 0 | gaosan2ban | 1960-10-23 |
| 3 | rose | 1 | gaosan2ban | 1952-12-14 |
| 4 | laotie | 1 | gaosan2ban | 1955-12-14 |
+------+----------+------+------------+------------+
4 rows in set (0.00 sec)