PostgreSQL基础知识(三)

本文介绍了SQL的基本操作,包括数据的插入、更新、删除,以及如何使用视图来简化查询过程。详细讲解了INSERT、UPDATE、DELETE和TRUNCATE等语句的用法,并探讨了事务的概念及其ACID特性。

21、向表中插入数据

INSERT INTO 表名 (列1,列2,...)VALUES(值1,值2,.......);  

前面我们还写过一种写法,就是列清单的省略写法。当我们对表进行全列插入时,就可以省略表名后的列清单。VALUES字句的值会默认按照从左到右的顺序赋值给每一列。

INSERT INTO 表名 VALUES(值1,值2,.....);

22、插入的值为NULL,就是在插入语句后面的值里,将值改为NULL,前提是插入NULL的那一列的约束不能是NOT NULL,否则会出错。  

 插入默认值,即在建表时候,在列的约束里写  DEFAULT 关键字和值。例如 : 列名   数据类型  DEFAULT 0 ,

  插入时候,对应列的值写DEFAULT时,插入的值即为默认值0.

23、数据的删除

之前DROP Table  表名 ;  是将表完全删除,在这里我们学习的是删除表中的数据(行),用的是DELETE关键字。

DELETE FROM 表名 ;   将表中的全部数据行删除。

24、指定删除对象的DELETE 语句

DELETE FROM 表名 WHERE 条件 ;

25、删除表中的全部数据(不推荐使用,但是比DELETE FROM 表名 ;方式快)

它不是标准SQL,但是很多数据库产品有这个关键字。比如Oracle,SQL Server,PostgreSQL,MySQL,DB2。

TRUNCATE 表名 ;

26、数据的更新 UPDATE的使用方法

改变表中数据的UPDATE语句。 UPDATE  表名 SET 列名= 表达式 ;

27、指定条件的UPDATE语句

改变表中数据的UPDATE语句。 UPDATE  表名 SET 列名= 表达式 WHERE 条件 ;

28.事务:事务是指同一个处理工作单元执行的一系列更新处理的集合。其实在默认模式(自动提交)下,每条SQL语句就是一个事务。比如我们前面见过的UPDATE  INSERT  DELETE。 数据库里的事务具有ACID四个特性。

原子性(Atomicity) 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。(就是假如我们要将 张三 ,23 改为 李四,24 。但是更改的时候只有名字或者年龄改了,而没有同时更改,没有达到我们的要求。所以SQL语句就会被取消,回滚到更改之前的状态。)

一致性 (Consistency) 事务在完成时,必须使所有的数据都保持一致状态。(假如我们的SQL语句里要往列A,插入一个值为NULL,但是列A 的约束是NOT NULL, 所以就会出错,这个语句就会被取消,不会执行,就会回滚,当前数据行还是插入NULL值之前的状态)

隔离性 (Isolation) 由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为隔离性。(就是不同事务之间是互不干扰的,假如A事务要添加一个东西,但是还没有COMMIT,在A添加的同时B事务也要添加同一个东西,但是它不知道A添加了,它是看不见A的操作的,因为A还没有提交。它们所能看到的,都是各自在开始事务前看到的。)

持久性(Durability)事务完成之后,它对于系统的影响是永久性的。即使由于系统故障导致数据丢失,数据库也能通过某种手段恢复。(常见的方法,就是把执行SQL语句的记录保存在硬盘等存储介质中,就是我们所说的日志),当发生故障,我们可以通过日志来恢复到故障发生前的状态。

29、视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

(表中保存的是实际数据,这些数据被保存到数据库中,而数据库里的数据往往保存在我们的计算机的存储设备-硬盘当中。但是视图中保存的是一些SELECT 语句,这些语句用来从表中取出数据并创建一张临时表。 它并不会保存数据,因为这些数据都是已经保存好的,存在的。只是视图临时拿来给我们看。)

30、视图的创建方法

CREATE VIEW 视图名称 (视图列名1 ,视图列名2 ,....)AS  SELECT语句 ;

看书上的例子 :  创建视图ProductSum 

CREATE VIEW ProductSum (product_type,cnt_product)  /*这2个就是视图的列名*/

AS SELECT product_type ,COUNT(*) FROM 表名 GROUP BY product_type ;  /*我们发现视图里的主体是SELECT语句 视图里的2个列里的内容和 SELECT语句查询出来的2个列的内容是一样的。 */

我们下次要执行这样的查询.SELECT product_type ,COUNT(*) FROM 表名 ;,其实就可以用视图替代了。如下:

SELECT product_type,cnt_product FROM 视图名      /*在这里就是ProductSum*/

31、多重视图 。在视图的基础上再建立视图。例如

CREATE VIEW ProcuctSumJim(product_type,cnt_product) AS SELECT product_type,cnt_product FROM ProductSum ;

ProductSum是我们建立的视图,我们在它基础上又建立了视图ProcuctSumJim,虽然语法上没有错误,但是尽量避免创建多重视图,因为对于多数DBMS来说,多重视图会降低SQL的性能。

32、视图的限制

32.1 :定义视图时不能使用ORDER BY 子句 。注意是定义。

32.2  :对视图进行更新。

因为视图本质上是从表派生出来的。假如我们原表可以更新,那么视图中的数据也可以更新。可是我们更新了视图,视图发生了改变,而原表没有进行相应的更新的话,就无法保证数据的一致性了。

只要能保证,视图和原表同时进行更新,那么视图就可以更新。当遇到视图已经更新,但是原表更新遇到了问题(假如视图更新了它所用到的2列,原表照理来说也要更新对应的2列,但是原表里有好多列,我们只知道2列,其他列的值我们都不清楚),数据库就遇到了麻烦。就不能更新。

33、删除视图

DROP VIEW 视图名称 (视图列1,视图列2,......);

在PostgreSQL里删除多重视图需要用CASCADE 。   例如 : DROP VIEW ProductSum CASCADE ;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值