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_dateFROM 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 ProductGROUP 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 ProductSET regist_date = '2222-02-02';

修改后效果如下。

更新部分数据行:

UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
UPDATE ProductSET sale_price = sale_price * 10WHERE product_type = '厨房用具';

将列更新为NULL:

前提是这个列没有设置NOT NULL约束和主键约束。

UPDATE ProductSET regist_date = NULLWHERE product_id = '0008';

同时更新多个列:

-- 使用逗号,所有DBMS中均可使用
UPDATE ProductSET sale_price = sale_price * 10,purchase_price = purchase_price / 2WHERE product_type = '厨房用具';
-- 列表形式,在某些DBMS中无法使用
UPDATE ProductSET (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 ProductSET sale_price = sale_price + 1000WHERE product_name = 'T恤';UPDATE ProductSET sale_price = sale_price - 1000WHERE product_name = '裤子';COMMIT;

DBMS的事务遵循ACID特性。

原子性Atomicity,事务结束时,其中的更新处理要么都执行(COMMIT),要么都不执行(ROLLBACK)。

一致性Consistency,事务中的处理,要满足数据库设置的约束,如主键约束、NOT NULL约束。

隔离性Isolation,不同事务之间互不干扰。一个事务向表中添加数据,没提交前,别的事务看不到新添加的数据。

持久性Durability,事务结束后,该时间点的数据状态会被保存。如果由于系统故障数据丢失,也能用一些方法恢复。

PostgreSQL 插入、删除、更新、事务相关推荐

  1. oracle+表的更新日志,测试oracle插入 删除 更新表的日志开销

    ###############测试插入 删除 更新表的日志开销 创建表 SYS@orcl >create table ssr(id int); 查询表空间,sys默认system,插入数据后此分 ...

  2. mysql利用外连接删除数据_MySQL-快速入门(6)连接查询、子查询、正则表达式查询、数据的插入删除更新...

    1.内连接查询:inner join ... on 只有满足条件的记录才能够出现在结果关系中,即完全相等.自连接查询是一种特殊的内连接查询. 2.外连接查询: 1>左外连接 / 左连接:返回包括 ...

  3. Postgresql - SQL - 对表中数据的插入、更新、删除进行跟踪

    创建一个trigger,对表中的每一行数据的插入.更新.删除进行跟踪. 我们可以进行对数据的监控,对数据更改的保存,记录对所有数据的更改. 也可以依据trigger,记录到文件或表中,将数据应用到其他 ...

  4. 插入,在PostgreSQL中重复更新吗?

    本文翻译自:Insert, on duplicate update in PostgreSQL? Several months ago I learned from an answer on Stac ...

  5. 【Postgresql】触发器某个字段更新时执行,行插入或更新执行

    [Postgresql]触发器某个字段更新时执行,行插入或更新执行 1. postgresql触发器 2. 触发器的创建及示例 1) 字段更新时,触发 2) 行插入或更新时,触发 3. 触发器的删除 ...

  6. Hibernate 批量插入、更新与删除

    http://blog.sina.com.cn/s/blog_54829a240100glku.html 批量插入 在项目的开发过程之中,由于项目需求,我们常常需要把大批量的数据插入到数据库.数量级有 ...

  7. python db.commit_python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)...

    今天在尝试用下面的python代码对MySQL进行数据的插入.更新和删除时, 突然发现代码执行成功, 通过代码查询也显示数据已经插入或更新, 但是当我在MySQL客户端通过SQL语句查询时, 数据库中 ...

  8. PostgreSQL批量插入/批量更新时间一致问题

    PostgreSQL在执行批量插入.更新使用函数now()或是current_time()获取当前系统时间一致,导致在根据时间order by时无法获取理想的结果 user表结构 create tab ...

  9. Mysql创建触发器实现不同表的插入、更新、删除操作

    说明:Mysql5.0以上的版本才支持下面的操作. Mysql 触发器的插入.更新.删除操作. 在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器 在对表admin操作的同时,触 ...

  10. php+mysqli实现批量执行插入、更新及删除数据的方法

    本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只 ...

最新文章

  1. 最年轻菲尔兹奖得主:我用计算机辅助证明研究“大一统”理论
  2. python爬虫作用小工具_【python小课堂|史上最全的Python爬虫工具列表大全】- 环球网校...
  3. OMG!这1010本书的书名都是什么鬼?
  4. unity 开发射击打靶vr_【好玩微信小游戏大全】香肠派对:点开既玩的射击小游戏!正版授权...
  5. 分治法与递归求科赫曲线
  6. Leetcode每日一题:21.merge-two-sorted-lists(合并两个有序链表)
  7. [转]linux下完全备份数据库mysql
  8. 一段python算法实战的代码
  9. 想给视频去色并加马赛克就用它
  10. 适合初学者 :用Google map street view api 实现批量下载谷歌地图街景 in python
  11. 虚拟机使用宿主机全局代理
  12. 2022新轻量级PHP解密在线工具源码V1.2版
  13. 如何用HTML制作一个3行3列的表格,如何利用表格制作网页
  14. 微信小程序开发者工具扫码成功但是进不去
  15. 论文查重报告橙色和红色是什么意思?
  16. 从零开始写一个Jison解析器(3/10):良好的开端是成功的一半——《政治学》 (亚里士多德)
  17. LensFlare Studio for Mac 6.3 镜头光晕特效软件 破解版下载
  18. 微信开发常见问题:自动音乐播放,alert 显示网址
  19. 【报告分享】2021小红书电商直播趋势报告-千瓜数据(附下载)
  20. html圈c转义符,C 实用教程

热门文章

  1. 任务调度的使用crontab
  2. 近百家公司高级运维的面试题汇总
  3. 创建线程时,需要创建的内容
  4. java实现多对多关系的方法_Hibernate一对多关联双向关联代码实现分享
  5. mysql 备份 php_PHP备份/还原MySQL数据库的代码
  6. 计算机科学导论考试A卷试题,09级计算机科学导论A卷答案
  7. getbook netty实战_Netty 入门教程
  8. vscode代码库登录配置_VSCode 配置 Sonar Lint支持代码检查提效
  9. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器
  10. 机械臂中的四元素转为旋转矩阵_雅克比矩阵(上)雅克比推导