網站首頁 編程語言 正文
INSERT
使用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語句格式:
里面的(列1,列2,…)稱為列清單;(值1,值2,…)稱為值清單。列清單和值清單個數要保持一致。
INSERT INTO <表名> (列1,列2,...) VALUES (值1,值2,...);
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2222-09-20');
對表的所有列進行INSERT時,可省略列清單。從左到右將值清單里面數據賦給每一列。
INSERT INTO ProductIns VALUES ('0005', '鐵鍋', '廚房用具', 6800, 5000, '2222-01-15');
插入NULL,直接在值清單里面寫NULL就行,前提是插入NULL的列不能設置NOT NULL約束。
INSERT INTO ProductIns VALUES ('0006', '勺子', '廚房用具', 500, NULL, '2222-09-20');
插入默認值:
前面創建ProductIns表設置sale_price默認值為0。在創建表的時候,設定了默認值,使用INSERT語句插入默認值的方法如下。
--顯式方法設置默認值 INSERT INTO ProductIns VALUES ('0007', '筷子', '廚房用具', DEFAULT, 790, '2222-04-28');
隱式方法設置默認值,在列清單和值清單里面,省略設置為默認值的列。
如果省略未設置為默認值的列,該列的值將被置為NULL。這一列如果是NOT NULL約束,將報錯。
--隱式方法設置默認值 INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_date) VALUES ('0007', '筷子', '廚房用具', 790, '2222-04-28');
從其他表中復制數據:
創建一張和Product結構相同的表。
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));
可以像下面把Product表中數據插入到ProductCopy表里。INSERT語句里面的SELECT語句,可以使用WHERE子句、GROUP BY子句等等。
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;
使用包含GROUP BY子句的SELECT語句進行插入:
創建一個以商品種類匯總的表。
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;
DELETE
DROP TABLE語句,將表刪除。
DELETE語句,刪除表里面的數據。
DELETE語句的對象是行,不是列,無法只刪除部分列的數據。
刪除全部數據行:
格式 DELETE FROM <表名>; 例子 DELETE FROM Product;
刪除部分數據行:
格式 DELETE FROM <表名> WHERE <條件>; 例子 DELETE FROM Product WHERE sale_price >= 2000;
UPDATE
UPDATE語句用于改變表中數據。
格式:
UPDATE <表名> SET <列名> = <表達式>;
改變regist_date列的所有數據。
UPDATE Product SET regist_date = '2222-02-02';
修改后效果如下。
更新部分數據行:
UPDATE <表名> SET <列名> = <表達式> WHERE <條件>;
UPDATE Product SET sale_price = sale_price * 10 WHERE product_type = '廚房用具';
將列更新為NULL:
前提是這個列沒有設置NOT NULL約束和主鍵約束。
UPDATE Product SET regist_date = NULL WHERE product_id = '0008';
同時更新多個列:
-- 使用逗號,所有DBMS中均可使用 UPDATE Product SET sale_price = sale_price * 10, purchase_price = purchase_price / 2 WHERE product_type = '廚房用具';
-- 列表形式,在某些DBMS中無法使用 UPDATE Product SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2) WHERE product_type = '廚房用具';
事務
事務transaction,需要在同一處理單元中執行的一系列更新處理的集合。
有時候要對一個表進行多個處理。比如為了某件事,需要把a的價格增加,把b的價格減少,此時,多個處理是作為同一個處理單元執行的。這個時候就可以用事務來處理。
格式:
事務開始語句; DML語句1; DML語句2; ... 事務結束語句;
例子:
其中,用戶需要明確指出事務的結束。結束事務的指令有COMMIT、ROLLBACK。
COMMIT,提交事務包含的更新處理。一旦提交,無法恢復事務開始前的狀態。
ROLLBACK,取消事務包含的更新處理,相當于放棄保存,恢復事務開始前的狀態。
事務在數據庫連接建立時,已經悄悄開始。
不使用開始語句情況下,SQL Server、PostgreSQL、MySQL里面默認使用自動提交模式,每條SQL語句就是一個事務。
Oracle里面,是直到用戶執行COMMIT或者ROLLBACK,算一個事務。
--PostgreSQL BEGIN TRANSACTION; UPDATE Product SET sale_price = sale_price + 1000 WHERE product_name = 'T恤'; UPDATE Product SET sale_price = sale_price - 1000 WHERE product_name = '褲子'; COMMIT;
DBMS的事務遵循ACID特性。
原子性Atomicity,事務結束時,其中的更新處理要么都執行(COMMIT),要么都不執行(ROLLBACK)。
一致性Consistency,事務中的處理,要滿足數據庫設置的約束,如主鍵約束、NOT NULL約束。
隔離性Isolation,不同事務之間互不干擾。一個事務向表中添加數據,沒提交前,別的事務看不到新添加的數據。
持久性Durability,事務結束后,該時間點的數據狀態會被保存。如果由于系統故障數據丟失,也能用一些方法恢復。
原文鏈接:https://jiangyiming.blog.csdn.net/article/details/123954174
相關推薦
- 2023-07-09 【elementplus】解決el-table開啟show-overflow-tooltip后,to
- 2024-03-04 layui表單重置按鈕不生效的問題
- 2022-11-29 箭頭函數中this與call()方法的關系
- 2022-05-20 SpringCloud系列:springboot改造集成nacos
- 2022-05-15 C++11:lambda表達式詳細介紹
- 2022-06-20 Go語言實現切片增刪改查的示例代碼_Golang
- 2022-09-14 python重寫方法和重寫特殊構造方法_python
- 2022-07-02 python列表:開始、結束、步長值實例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支