数据插入操作可以向表中添加记录,MySQL中执行数据插入操作的关键字是INSERT。
常见的数据插入操作主要包括:向表中所有字段插入数据,向表中指定字段插入数据,同时插入多条数据和将其他表中数据插入到表中。
1.向表中所有字段插入数据
向表中所有字段插入数据有两种方式,一种是指定所有字段及其相对应的值,另一种是不指定字段只列出字段值。
1)指定字段及其值
INSERT INTO table_name(col_name1,col_name2,……col_namen) VALUES(value1,value2,……valuen);
实例1:向goods表中插入一条新记录
步骤1 执行以下语句,选择数据库db_shop
USE db_shop;
步骤2 执行以下语句,向goods表中插入一条新记录
INSERT INTO goods(id,type,name,price,num,add_time)
VALUES(1,'书籍','西游记',50.4,20,'2018-01-01 13:40:40');
提示:当插入值的数据类型为字符串时,需要将值包含在英文格式的引号中。
步骤3 插入成功后执行SQL语句,查看表中的所有记录
SELECT * FROM goods;
2)不指定字段只列出字段值
INSERT INTO table_name VALUES(value1,value2,……,valuen);
实例2:向goods表中插入一条新记录
选择数据库db_shop后,执行以下语句向goods表中插入一条新记录
INSERT INTO goods VALUES(2,'糖类','牛奶糖',7.5,200,'2018-02-02 13:40:40');
插入成功后查看数据
SELECT * FROM goods;
u指定所有字段及其对应的值时,字段可以不按照表中字段的顺序排列,但字段要和值一一对应。
u不指定字段只列出字段值时,值的顺序要与表中字段的顺序相同,当表中的字段顺序发生改变时,值的插入顺序也要随之改变。
2.向表中指定字段插入数据
向数据表中插入数据时,也可以只指定一部分字段的值,语法形式为:
INSERT INTO table_name(col_name1,col_name2,……,col_namen)
VALUES(value1,value2,……,valuen);
实例3:向goods表中指定字段插入数据
步骤1 选择数据库db_shop后,执行以下语句向goods表中插入记录
INSERT INTO goods(type,name,price) VALUES('糖类','水果糖',2.5);
步骤2 插入成功后查看数据
SELECT * FROM goods;
查看数据的结果如下:
mysql> SELECT * FROM goods;
+----+--------+-----------+---------+------+------------------------------+
| id | type | name | price | num | add_time |
+----+--------+-----------+---------+-------+-----------------------------+
| 1 | 书籍 | 西游记 | 50.40 | 20 | 2018-01-01 13:40:40 |
| 2 | 糖类 | 牛奶糖 | 7.50 | 200 | 2018-02-02 13:40:40 |
| 3 | 糖类 | 水果糖 | 2.50 | 0 | NULL |
+----+--------+-----------+----------+-------+----------------------------+
3 rows in set (0.00 sec)
由查询结果可以看出,向表中指定字段插入数据时,对于没有指定值的字段,系统会根据其自身情况设置不同的值:
u当字段没有设置约束时,系统会将字段值设置为NULL,如goods表中的add_time字段。
u当字段设置自增约束时,系统会将字段值设置为自增后的序列值,如goods表中的id字段。
u当字段设置默认约束时,系统会将字段值设置为默认值,如goods表中的num字段。
3.同时插入多条数据
使用INSERT关键字还可以同时向数据表中插入多条数据,语法形式为:
INSERT INTO table_name(col_name1,col_name2,……,col_namen)
VALUES(value1,value2,……,valuen),
……
(value 1,value2,……,valuen);
实例4:向goods表中插入多条记录
步骤1 选择数据库db_shop后,执行以下语句向goods表中插入多条记录
INSERT INTO goods(id,type,name,price,num,add_time)
VALUES(4,'服饰','休闲西服',800,null,'2016-04-04 13:40:40'),
(5,'饮品','果汁',3,70,'2016-05-05 13:40:40'),
(6,'书籍','论语',109,50,'2016-06-06 13:40:40');
步骤2 插入成功后查看数据
SELECT * FROM goods;
4.将其他表中的数据插入到表中
在实际应用中,有时需要将一张表的数据插入到另一张表中,此项操作也可以使用INSERT关键字实现,语法形式为:
INSERT INTO table_name1(table_name1_col_list)
SELECT table_name2_col_list FROM table_name2;
实例5:创建new_goods表,并插入记录
步骤1 选择数据库db_shop后,执行以下语句创建new_goods表,其表结构与goods表相同
CREATE TABLE new_goods (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(30) NOT NULL,
name VARCHAR(30) UNIQUE,
price DECIMAL(7,2) UNSIGNED,
num INT(11) DEFAULT 0,
add_time DATETIME
);
步骤2 执行以下SQL语句,将goods表中的数据插入到new_goods表中
INSERT INTO new_goods(id,type,name,price,num,add_time)
SELECT id,type,name,price,num,add_time FROM goods;
步骤3 插入成功后查看数据,结果如下所示
mysql> SELECT * FROM new_goods;
+----+--------+--------------+---------+----------+---------------------------------------+
| id | type | name | price | num | add_time |
+----+--------+--------------+---------+----------+---------------------------------------+
| 1 | 书籍 | 西游记 | 50.40 | 20 | 2018-01-01 13:40:40 |
| 2 | 糖类 | 牛奶糖 | 7.50 | 200 | 2018-02-02 13:40:40 |
| 3 | 糖类 | 水果糖 | 2.50 | 0 | NULL |
| 4 | 服饰 | 休闲西服 | 800.00| NULL | 2016-04-04 13:40:40 |
| 5 | 饮品 | 果汁 | 3.00 | 70 | 2016-05-05 13:40:40 |
| 6 | 书籍 | 论语 | 109.00| 50 | 2016-06-06 13:40:40 |
+----+--------+--------------+---------+----------+---------------------------------------+
6 rows in set (0.00 sec)
某些情况下,只需要将表中部分字段的数据插入到另一张表中,此时可以通过以下方法实现
实例6:创建新表test_goods,并插入数据
步骤1 选择数据库db_shop后,执行以下语句创建test_goods表,其表结构与goods表相同。
CREATE TABLE test_goods(
g_id INT(11) PRIMARY KEY AUTO_INCREMENT,
g_name VARCHAR(30) UNIQUE,
g_price DECIMAL(7,2) UNSIGNED
);
步骤2 执行以下语句,将goods表中id,name和price字段的数据插入到test_goods表中
INSERT INTO test_goods(g_id,g_name,g_price)
SELECT id,name,price FROM goods;
步骤3 插入成功后查看数据,结果如下所示
mysql> SELECT * FROM test_goods;
+------------+--------------+-----------------------+
| g_id | g_name | g_price |
+------------+--------------+-----------------------+
| 1 | 西游记 | 50.40 |
| 2 | 牛奶糖 | 7.50 |
| 3 | 水果糖 | 2.50 |
| 4 | 休闲西服 | 800.00 |
| 5 | 果汁 | 3.00 |
| 6 | 论语 | 109.00 |
+------------+--------------+-----------------------+
6 rows in set (0.00 sec)
将查询结果插入到表中时应注意以下几点:
u两张表的字段名可以不一样,但数据类型必须一样。
u插入数据时,SQL语句中的字段顺序可以与表中的字段顺序不同,但两张表中的字段顺序必须一一对应。