第4章 数据更新:4-1 数据的插入(INSERT)

● 将列名和值用逗号隔开,分别括在()内,这种形式称为清单。
● 对表中所有列进行INSERT操作时可以省略表名后的列清单。
● 插入NULL时需要在VALUES子句的值清单中写入NULL。
● 可以为表中的列设定默认值(初始值),默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定。
● 插入默认值可以通过两种方式实现,即在INSERT语句的VALUES子句中指定DEFAULT关键字(显式方法),或省略列清单(隐式方法)。
● 使用INSERT…SELECT可以从其他表中复制数据。

要学习 INSERT 语句,我们得首先创建一个名为 ProductIns的表。请大家执行代码清单 4-1 中的 CREATE TABLE 语句。

CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));

该表除了为 sale_price 列(销售单价)设置了 DEFAULT 0 的约束之外,其余内容与之前使用的 Product(商品)表完全相同。

■ INSERT语句的基本语法

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('', 'T恤' ,'衣服', 1000, 500, '2009-09-20');


■列清单的省略

-- 使用列清单
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('', '高压锅', '厨房用具', 6800, 5000, '2009-01-15'); -- 不使用列清单
INSERT INTO ProductIns VALUES ('', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

代码清单4-3 省略列清单

■插入NULL

INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES 子句的值清单中写入 NULL。

但是,想要插入 NULL 的列一定不能设置 NOT NULL 约束。向设置了 NOT NULL 约束的列中插入 NULL 时, INSERT 语句会出错,导致数据插入失败。

■插入默认值

其中 DEFAULT 0 就是设置 DEFAULT 约束的部分。像这样,我们可以通过“DEFAULT < 默认值 >”的形式来设定默认值。

那么在实际使用中哪种方法更好呢?笔者建议大家使用显式的方法。

如果省略了没有设定默认值的列,该列的值就会被设定为 NULL。因此,如果省略的是设置了 NOT NULL 约束的列, INSERT 语句就会出错。


■从其他表中复制数据

要插入数据,除了使用 VALUES 子句指定具体的数据之外,还可以从其他表中复制数据。

下面我们就来学习如何从一张表中选取数据,复制到另外一张表中。

-- 插入数据用的复制商品表
CREATE TABLE ProductCopy
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));

代码清单4-9 创建ProductCopy表

INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法(但使用ORDER BY子句并不会产生任何效果)。

最新文章

  1. 设计模式(十二):bridge模式
  2. POJ 1163 The Triangle(简单动态规划)
  3. POJ 2184 Cow Exhibition (01背包的变形)
  4. [HZAU]华中农业大学第四届程序设计大赛网络同步赛
  5. CentOS6.6安装mysql出现的问题
  6. 如何用DELPHI编程修改外部EXE文件的版本信
  7. artTemplate模板引擎的源码拜读
  8. html css float left与 float right的使用说明
  9. shell检测interface是否已分配ip,qt调用shell脚本
  10. ThinkPHP框架视图详细介绍 View 视图--模板(九)
  11. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象
  12. mysql存储过程且mybatis调用
  13. Windows下git设置代理服务器
  14. Git本地仓库push至GitHub远程仓库每次输入账户密码问题解决(亲测可行)
  15. Django REST Framework API Guide 01
  16. Hadoop ConnectTimeoutException
  17. js运用5
  18. 1131(★、※)Subway Map
  19. SpringBoot详细研究-04部署测试与监控
  20. 真爱如血第七季/全集True Blood迅雷下载

热门文章

  1. ucosiii 移植
  2. java时间差
  3. ORA-22813 ORA-06512
  4. 将visual sdudio+Qt5.12 制作的程序打包成单个exe
  5. 162-PHP 文本替换函数str_replace(三)
  6. Java中的super关键字和this关键字作用介绍
  7. Linux每日一练20200219
  8. POJ 2996:Help Me with the Game
  9. java初学小项目-酒店客房管理系统
  10. C语言-存储类&amp;作用域&amp;生命周期&amp;链接属性