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;

SQL基础教程(第2版)第4章 数据更新:练习题的更多相关文章

  1. 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案

    我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...

  2. 笔记-Python基础教程(第二版)第一章

    第一章 快速改造:基础知识 01:整除.乘方 (Python3.0之前 如2.7版本) >>> 1/2 ==>0 1/2整除,普通除法: 解决办法1: 1.0/2.0  ==& ...

  3. SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)

    SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1 ...

  4. [SQL基础教程] 5-1视图

    [SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...

  5. [SQL基础教程] 4-4 事务

    [SQL基础教程] 4 数据更新 4-4 事务 事务 需要在同一处理单元中执行的一系列更新处理的集合 创建事务 事务开始语句; DML语句1; DML语句2; . . . 事务结束语句; 事务开始语句 ...

  6. [SQL基础教程] 4-3 数据的更新(UPDATE)

    [SQL基础教程] C4 数据更新 4-3 数据的更新(UPDATE) UPDATE UPDATE <表名> SET <列名> = <表达式>; UPDATE &l ...

  7. [SQL基础教程] 4-2 数据删除(DELETE)

    [SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...

  8. [SQL基础教程] 4-1 数据的插入(INSERT)

    [SQL基础教程] C4 数据更新 4-1 数据的插入(INSERT) INSERT INSERT INTO <表名>(列1,列2...) VALUES(值1,值2...); 清单 用() ...

  9. [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY

    [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY ORDER BY SELECT <列名1>,<列名2>,<列名2>... FROM ORDER B ...

  10. [SQL基础教程] 3-3 HAVING

    [SQL基础教程] 3-3 HAVING HAVING子句 SELECT col_1,col_2 FROM table GROUP BY col_1,col_2 HAVING col_1 = '2'; ...

随机推荐

  1. JAVA DateUtil 工具类封装(转)

    原文链接 https://blog.csdn.net/wangpeng047/article/details/8295623  作者三次整理后的代码 下载链接   https://www.lanzou ...

  2. 【转载】UnityWebRequest的初步使用及常用方法解析

    文章来源:https://blog.csdn.net/qwe25878/article/details/85051911#_35 今天,来学习一下Unity新的网络请求方式UnityWebReques ...

  3. 08 MySQL存储引擎

    查询当前默认存储引擎     SHOW VARIABLES LIKE 'table_type' ;      查询当前数据库支持的引擎有哪些 :     SHOW ENGINES \G   -- 推荐 ...

  4. CSS隐藏商务通等内容

    CSS隐藏商务通等内容<style>#qiao-wrap{display:none !important;} </style>

  5. Ubuntu不会放弃32位应用程序

    Ubuntu 开发人员澄清,人们以为 Ubuntu 将在 Ubuntu 19.10 和后续版本中放弃对运行 32 位应用程序的支持,但“根本不是这种情况”.那么这究竟是怎么一回事呢?前几天 Ubunt ...

  6. POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10172   Accepted: 4160 Desc ...

  7. Redis 详解 (四) redis的底层数据结构

    目录 1.演示数据类型的实现 2.简单动态字符串 3.链表 4.字典 5.跳跃表 6.整数集合 7.压缩列表 8.总结 上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中, ...

  8. 我的Java语言学习日志1_"简单的银行管理系统实现"

    设计步骤:注意:本篇代码,直接建两个类( Bank_Account.BankManage)在BankManage往里面填方法就行.是为了让和我一样自学朋友可以更快的接受.但是代码优化的空间还是很大的( ...

  9. 110-PHP类成员属性赋值

    <?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...

  10. Linux 下 zip 文件解压乱码如何解决

    作者:Latm Ake链接:https://www.zhihu.com/question/20523036/answer/35225920来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...