MySQL基础知识—数据插入insert

语法格式

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**87@qq.com');

查看数据:

mysql> select * from t_student;
+----+---------+-----+-----+-----------------+
| no | name    | sex | age | email           |
+----+---------+-----+-----+-----------------+
|  1 | kuangdi | m   |  29 | 7190**87@qq.com |
+----+---------+-----+-----+-----------------+
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**87@qq.com |
|  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,'lili@139.com');
Query OK, 1 row affected (0.04 sec)

mysql> select * from t_student;
+----+------+-----+-----+--------------+
| no | name | sex | age | email        |
+----+------+-----+-----+--------------+
|  1 | lili | f   |  10 | lili@139.com |
+----+------+-----+-----+--------------+
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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值