-- 第四章 數(shù)據(jù)更新
-- 4-1數(shù)據(jù)的插入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');
-- 列清單的省略 當(dāng)全部列都插入時(shí)
-- 插入NULL,注意插入NULL時(shí)一定不能用NOT NULL來(lái)約束這一行
-- 插入默認(rèn)值 default約束,default可以顯示也可以隱式插入,建議寫出來(lái),方便看
-- 省略INSERT語(yǔ)句中的列名,就會(huì)自動(dòng)設(shè)定為該列的默認(rèn)值(沒(méi)有默認(rèn)值時(shí)會(huì)設(shè)定為NULL)
-- 從其他表中復(fù)制數(shù)據(jù)
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 語(yǔ)句
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 語(yǔ)句中可以使用select的任何句子,但是使用order by并沒(méi)有任何效果
-- 4-2數(shù)據(jù)的刪除delete
DELETE FROM <chartname>;
DELETE FROM product;
-- DELETEE語(yǔ)句的刪除對(duì)象并不是表,表用drop,也不是列,而是記錄(行)
DELETE FROM product
WHERE sale_price >= 4000;
SELECT * FROM product;
-- delete語(yǔ)句只能使用where
-- TRUNCATE 可以用來(lái)刪除整個(gè)表中的數(shù)據(jù) 用法: TRUNCATE <表名>;
-- 4-3數(shù)據(jù)的更新update UPDATE SET
UPDATE product
SET regist_date = '2009-10-10';
SELECT * FROM product ORDER BY product_id;
-- 指定條件的UPDATE語(yǔ)句
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '廚房用具';
SELECT * FROM product ORDER BY product_id;
-- 使用NULL進(jìn)行更新,NULL清空//注意:只有沒(méi)有not null限制的時(shí)候才可以u(píng)pdate為null
-- 多列更新
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '廚房用具';
UPDATE product
SET purchase_price = purchase_price / 2
WHERE product_type = '廚房用具';
-- 多列更新簡(jiǎn)單操作1:
UPDATE product
SET sale_price = sale_price * 10
SET purchase_price = purchase_price / 2
WHERE product_type = '廚房用具';
-- 多列更新簡(jiǎn)單操作2:
UPDATE product
SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
WHERE product_type = '廚房用具';
SELECT * FROM product ORDER BY product_id;
-- 事務(wù)transactjion:是需要在同一個(gè)處理單元中執(zhí)行的一系列更新處理的集合
-- 更新書中數(shù)據(jù)
UPDATE product
SET sale_price = sale_price - 1000
WHERE product_name = '運(yùn)動(dòng)T恤';
UPDATE product
SET sale_price = sale_price + 1000
WHERE product_name = 'T恤衫';
-- 創(chuàng)建事務(wù)
-- START / BEGIN TRANSACTION 開始事務(wù) COMMIT結(jié)束 ROLLBACK 取消事務(wù)
-- ACID特性:原子性,完整性/一致性,隔離性(不同的事務(wù)之間互不干擾),持久性
-- 練習(xí)題
-- 4.1 原始數(shù)據(jù) 并沒(méi)有被更新
-- 4.2復(fù)制一遍整個(gè)表xx 錯(cuò)誤 因?yàn)閕nsert違反了主鍵約束
-- 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', '運(yùn)動(dòng)T恤', 4000, 2800, 1200);
SELECT * FROM productmargin;
-- ps 此問(wèn)題數(shù)據(jù)本可以從product表中直接摘錄
-- 4.4 略
START TRANSACTION;
-- 將運(yùn)動(dòng)T恤的銷售單價(jià)從4000日元下調(diào)至3000日元。
-- 根據(jù)上述結(jié)果再次計(jì)算運(yùn)動(dòng)T恤的利潤(rùn)。