第四章 数据更新

2019-03-01  本文已影响0人  Curi

-- 第四章 数据更新
-- 4-1数据的插入insert
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));

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
-- 列清单的省略 当全部列都插入时
-- 插入NULL,注意插入NULL时一定不能用NOT NULL来约束这一行
-- 插入默认值 default约束,default可以显示也可以隐式插入,建议写出来,方便看
-- 省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)
-- 从其他表中复制数据
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));

-- INSERT SELECT 语句
INSERT INTO ProductCopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date
FROM Product;

CREATE TABLE ProductType
(product_type VARCHAR(32) NOT NULL,
sum_sale_price INTEGER ,
sum_purchase_price INTEGER ,
PRIMARY KEY (product_type));

INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price)
SELECT product_type, sum(sale_price), sum(purchase_price)
FROM Product
GROUP BY product_type;

SELECT * FROM PRODUCTTYPE;
-- PS:INSERT 语句中可以使用select的任何句子,但是使用order by并没有任何效果

-- 4-2数据的删除delete
DELETE FROM <chartname>;
DELETE FROM product;
-- DELETEE语句的删除对象并不是表,表用drop,也不是列,而是记录(行)
DELETE FROM product
WHERE sale_price >= 4000;
SELECT * FROM product;
-- delete语句只能使用where
-- TRUNCATE 可以用来删除整个表中的数据 用法: TRUNCATE <表名>;

-- 4-3数据的更新update UPDATE SET
UPDATE product
SET regist_date = '2009-10-10';
SELECT * FROM product ORDER BY product_id;
-- 指定条件的UPDATE语句
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
SELECT * FROM product ORDER BY product_id;

-- 使用NULL进行更新,NULL清空//注意:只有没有not null限制的时候才可以update为null
-- 多列更新
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
UPDATE product
SET purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';

-- 多列更新简单操作1:
UPDATE product
SET sale_price = sale_price * 10
SET purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';

-- 多列更新简单操作2:
UPDATE product
SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
WHERE product_type = '厨房用具';

SELECT * FROM product ORDER BY product_id;

-- 事务transactjion:是需要在同一个处理单元中执行的一系列更新处理的集合
-- 更新书中数据
UPDATE product
SET sale_price = sale_price - 1000
WHERE product_name = '运动T恤';

UPDATE product
SET sale_price = sale_price + 1000
WHERE product_name = 'T恤衫';

-- 创建事务
-- START / BEGIN TRANSACTION 开始事务 COMMIT结束 ROLLBACK 取消事务
-- ACID特性:原子性,完整性/一致性,隔离性(不同的事务之间互不干扰),持久性

-- 练习题
-- 4.1 原始数据 并没有被更新
-- 4.2复制一遍整个表xx 错误 因为insert违反了主键约束
-- 4.3
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));

INSERT INTO ProductMargin (product_id, product_name, sale_price, purchase_price, margin)
VALUES ('0001', 'T恤衫', 1000, 500, 500),
('0002', '打孔器', 500, 320, 180),
('0003', '运动T恤', 4000, 2800, 1200);
SELECT * FROM productmargin;
-- ps 此问题数据本可以从product表中直接摘录

-- 4.4 略
START TRANSACTION;
-- 将运动T恤的销售单价从4000日元下调至3000日元。
-- 根据上述结果再次计算运动T恤的利润。

上一篇 下一篇

猜你喜欢

热点阅读