SQL 知识量:22 - 44 - 129
数据表创建完成后,需要将数据插入表中。SQL使用insert关键字来实现数据插入。有以下几种方式:
插入完整的行。
插入行的一部分。
插入某些查询的结果。
要插入完整的行,需要事先知道表的结构,即所有的表列名称。
例如:有一个产品表(product)的信息如下:
+----+--------------+--------------+ | id | product_name | produce_date | +----+--------------+--------------+ | 1 | tea | 2013-05-08 | | 2 | coffee | 2011-02-07 | | 3 | computer | 2012-04-26 | | 4 | TV | 2014-10-18 | | 5 | phone | 2013-05-01 | | 6 | desk | 2015-08-10 | | 7 | bed | 2012-02-15 | +----+--------------+--------------+
现在,使用insert插入一条新的信息。
insert into product values(8,'ball','2011-05-05');
插入成功后,表变为:
+----+--------------+--------------+ | id | product_name | produce_date | +----+--------------+--------------+ | 1 | tea | 2013-05-08 | | 2 | coffee | 2011-02-07 | | 3 | computer | 2012-04-26 | | 4 | TV | 2014-10-18 | | 5 | phone | 2013-05-01 | | 6 | desk | 2015-08-10 | | 7 | bed | 2012-02-15 | | 8 | ball | 2011-05-05 | +----+--------------+--------------+
在上面的insert语句中,没有给出表的列名,这时必须给表的每一列都提供一个值。这样的操作严重依赖表列的默认次序,如果表列次序发生变化,插入将会失败。因此,这样的insert语句是不安全的,推荐在插入时总是给出明确的列名。修改后的语句如下:
insert into product(id, product_name, produce_date) values(9, 'pen', '2014-09-05');
插入成功后,表变为:
+----+--------------+--------------+ | id | product_name | produce_date | +----+--------------+--------------+ | 1 | tea | 2013-05-08 | | 2 | coffee | 2011-02-07 | | 3 | computer | 2012-04-26 | | 4 | TV | 2014-10-18 | | 5 | phone | 2013-05-01 | | 6 | desk | 2015-08-10 | | 7 | bed | 2012-02-15 | | 8 | ball | 2011-05-05 | | 9 | pen | 2014-09-05 | +----+--------------+--------------+
有时,对于一行信息,不需要对每列都插入数据,可能只需要插入某一列或几列的数据。这时,只需要对给出列名的提供插入值即可。
例如:向产品表中添加“milk”,只给出名称,时间使用当前日期。
insert into product(product_name,produce_date) values('milk',curdate());
插入成功后,表变为:
+----+--------------+--------------+ | id | product_name | produce_date | +----+--------------+--------------+ | 1 | tea | 2013-05-08 | | 2 | coffee | 2011-02-07 | | 3 | computer | 2012-04-26 | | 4 | TV | 2014-10-18 | | 5 | phone | 2013-05-01 | | 6 | desk | 2015-08-10 | | 7 | bed | 2012-02-15 | | 8 | ball | 2011-05-05 | | 9 | pen | 2014-09-05 | | 10 | milk | 2015-05-29 | +----+--------------+--------------+
以上SQL语句中没有给出id列名和其插入值,DBMS对没有给出插入值的id列自动赋值。(当然,这取决于表的定义情况。)
对于省略值的列,必须满足以下条件之一:
该列定义为允许为NULL值(无值或空值)。
在表定义中给出默认值。如果插入时没有给出,将使用默认值。
一般主键定义为自增值,将由DBMS自动赋值(上面示例即是如此)。
可以利用insert语句将由select语句查询的数据插入表中,也就是insert select语句。
例如:people表的信息如下:
+----+----------+---------+--------+ | id | realName | realAge | sex | +----+----------+---------+--------+ | 1 | Susan | 12 | female | | 2 | Jame | 12 | male | | 3 | Bob | 12 | male | | 4 | Robot | 12 | male | | 5 | Jen | 12 | female | | 6 | Toney | 12 | male | | 8 | Alice | 12 | female | | 9 | Bonnie | 12 | male | | 10 | Ella | 12 | female | +----+----------+---------+--------+
man表的信息如下:
+----+-------+------+------+ | id | name | age | sex | +----+-------+------+------+ | 1 | Bill | 15 | male | | 2 | Limon | 14 | male | | 3 | Soen | 16 | male | +----+-------+------+------+
将man表的信息插入people表中,SQL语句为:
insert into people(realName,realAge,sex) select name,age,sex from man;
插入后的people表为:
+----+----------+---------+--------+ | id | realName | realAge | sex | +----+----------+---------+--------+ | 1 | Susan | 12 | female | | 2 | Jame | 12 | male | | 3 | Bob | 12 | male | | 4 | Robot | 12 | male | | 5 | Jen | 12 | female | | 6 | Toney | 12 | male | | 8 | Alice | 12 | female | | 9 | Bonnie | 12 | male | | 10 | Ella | 12 | female | | 11 | Bill | 15 | male | | 12 | Limon | 14 | male | | 13 | Soen | 16 | male | +----+----------+---------+--------+
从上面的示例可以看出,即使两个表的列名不同,只要数据类型是兼容的,插入就会成功,insert语句是根据列的位置来完成插入操作的。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6