语法格式
insert into 表名(字段名1,字段名2,字段名3,...) value(值1,值2,值3,...);
注意:字段名和值要一一对应,数量要对应,数据类型也要对应。
示例
在表的创建中已经创建了t_stundent表,整个表中的字段类型如下:
mysql> desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
现在插入一条数据:
mysql> insert into t_student(no,name,sex,age,email) values(1,'kuangdi','m',29,'7190**[email protected]');
查看数据:
mysql> select * from t_student;
+----+---------+-----+-----+-----------------+
| no | name | sex | age | email |
+----+---------+-----+-----+-----------------+
| 1 | kuangdi | m | 29 | 7190**[email protected] |
+----+---------+-----+-----+-----------------+
1 row in set (0.03 sec)
注意:insert语句一旦执行成功,那么必然会多一条记录。
再插入一条,没有给其他字段指定值:
mysql> insert into t_student(no) values(2);
Query OK, 1 row affected (0.05 sec)
mysql> select * from t_student;
+----+---------+------+------+-----------------+
| no | name | sex | age | email |
+----+---------+------+------+-----------------+
| 1 | kuangdi | m | 29 | 7190**[email protected] |
| 2 | NULL | NULL | NULL | NULL |
+----+---------+------+------+-----------------+
2 rows in set (0.03 sec)
指定默认值
上面的t_student的默认值如下所示:
mysql> desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
可以看到所有字段的默认值都是NULL。这是因为我们在create的时候没有指定默认值。
那么我们drop掉t_student后,再用下面的语句进行创建:
create table t_student(no int,name varchar(32),sex char(1) default 'm',age int(3),email varchar(255));
再查每个字段的默认值:
mysql> desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | char(1) | YES | | m | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.03 sec)
可以看出sex的默认值为m。
字段名省略
将前面的字段名都省略的话,表示所有的字段名都写上了,所以值也要写上。
错误示例:
mysql> insert into t_student values(2);
1136 - Column count doesn't match value count at row 1
正确示例:
mysql> insert into t_student values(1,'lili','f',10,'[email protected]');
Query OK, 1 row affected (0.04 sec)
mysql> select * from t_student;
+----+------+-----+-----+--------------+
| no | name | sex | age | email |
+----+------+-----+-----+--------------+
| 1 | lili | f | 10 | [email protected] |
+----+------+-----+-----+--------------+
1 row in set (0.03 sec)
插入日期
str_to_date:将字符串varchar类型转换成date类型
语法格式与日期格式
str_to_date('字符串日期','日期格式');
日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
创建一个带有date字段的表t_user:
mysql> create table t_user(id int,name varchar(32),birth date);
Query OK, 0 rows affected (0.24 sec)
mysql> desc t_user;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| birth | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
可以到birth是date类型的。
插入一条数据:
mysql> insert into t_user(id,name,birth) values(1,'kd','01-10-1992');
1292 - Incorrect date value: '01-10-1992' for column 'birth' at row 1
这样写的时候会报错。可以使用str_to_date进行类型转换。
正确插入:
mysql> insert into t_user(id,name,birth) values(1,'kd',str_to_date('01-10-1992','%d-%m-%Y'));
Query OK, 1 row affected (0.04 sec)
mysql> select * from t_user;
+----+------+------------+
| id | name | birth |
+----+------+------------+
| 1 | kd | 1992-10-01 |
+----+------+------------+
1 row in set (0.03 sec)
如果提供的字符串日期是%Y-%m-%d,可以不使用str_to_date。
mysql> insert into t_user(id,name,birth) values(1,'kd','1992-10-01');
Query OK, 1 row affected (0.05 sec)
mysql> select * from t_user;
+----+------+------------+
| id | name | birth |
+----+------+------------+
| 1 | kd | 1992-10-01 |
| 1 | kd | 1992-10-01 |
+----+------+------------+
2 rows in set (0.03 sec)
查询时按照特点日期格式展示
date_format:将date类型转换成有一定格式的varchar字符串类型。
语法格式
date_format(日期类型数据,'日期格式')
这个函数通常使用在查询日期方面,设置展示的日期格式。
mysql> select id,name,date_format(birth,'%m/%d/%Y') as birth from t_user;
+----+------+------------+
| id | name | birth |
+----+------+------------+
| 1 | kd | 10/01/1992 |
| 1 | kd | 10/01/1992 |
+----+------+------------+
2 rows in set (0.03 sec)
date和datetime的区别
date短日期,只包括年月日。
datetime长日期,包括年月日时分秒。
insert一次插入多条记录
语法规则
insert into t_user(字段名1,字段名2,...) values(),(),();
示例
insert into t_user(id,name,birth) values
(1,'kd','1992-01-01'),
(2,'kd','1992-01-01'),
(3,'kd','1992-01-01');
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t_user;
+----+------+------------+
| id | name | birth |
+----+------+------------+
| 1 | kd | 1992-01-01 |
| 2 | kd | 1992-01-01 |
| 3 | kd | 1992-01-01 |
+----+------+------------+
3 rows in set (0.03 sec)