SQL基础教程(第2版)第4章 数据更新:练习题
2024-10-08 16:49:05
1 行也选取不出来。
>> 解答
A 先生使用 BEGIN TRANSACTION 启动了事务处理,然后开始执行 INSERT
语句。因此,在 A 先生使用 COMMIT 确定该更新之前, B 先生等其他用户都无法看
到 A 先生进行更新的结果。这就是基于 ACID 特性中的 I,也就是独立性(Isolation)
的现象。当然,由于 A 先生在 COMMIT 之前能看到自己进行过的更新,因此如果 A
先生执行 SELECT * FROM Product; 的话,会得到 3 条记录。
顺便提一下,如果想要确认该现象,并不需要两个人。只需使用电脑打开两个窗
口连接同一个数据库,一个人就能完成两个人的工作了。
因为商品编号列违反了主键约束,所以会发生错误, 1 行也插入不了。
>> 解答
如果该 INSERT 能够正常执行的话, Product(商品)表的状态应该会像下面
这样变为 6 行数据。
但是,显然上述记录违反了商品编号列的主键约束(不能存在主键重复的记录)。
违反该约束带来的后果就是无法执行更新操作,这就是 ACID 特性中的 C—— 一致
性(Consistency)。
/*
下面是问题中的SELECT语句
*/
-- 商品利润表
CREATE TABLE ProductMargin
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
sale_price INTEGER,
purchase_price INTEGER,
margin INTEGER,
PRIMARY KEY(product_id)); /*
下面是解答示例
*/
-- 将Product表中的数据插入到ProductMargin表中
INSERT INTO ProductMargin (product_id, product_name, sale_price, purchase_price, margin)
SELECT product_id, product_name, sale_price, purchase_price, sale_price - purchase_price
FROM Product; -- 确认插入数据
SELECT * FROM ProductMargin;
-- 1.下调销售单价
UPDATE ProductMargin
SET sale_price = 3000
WHERE product_id = ''; -- 2.利润再计算
UPDATE ProductMargin
SET margin = sale_price - purchase_price
WHERE product_id = ''; -- 确认数据更新
SELECT * FROM ProductMargin;
最新文章
- Easyui 让Window弹出居中与最大化后居中
- 腾讯云TCCE培训认证 精彩的第一次
- Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
- maven web启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- 甘特图和PERT图
- php 单引号 双引号 ,php字符串/ hmtl / 数据库显示/ 及php的几个转化函数
- rem 和 ::
- asp.net 多个文件同时下载
- Metrics.NET report to Zabbix
- cocosbuilder学习汇总
- HTML5 初始文档声明
- WPF/Silverlight中的RichTextBox总结
- python--socket粘包
- eclipse配置tomcat后启动报内存错误解决方法
- 信号报告-python
- Spark源码剖析 - SparkContext的初始化(九)_启动测量系统MetricsSystem
- IO流中File文件最常用和直接的用法
- HTML5学习笔记(十七):访问器和class关键字
- 扫描网站服务器真实IP的小脚本
- CYDIA装了个插件,想删除怎么都删除,电脑如何删除插件?