Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1565688
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2014-01-06 09:51:31

     在先前的文章中介绍了HANA创建行表、列表及索引的相关内容,在这篇文章中将向大家介绍HANA SQL DMLs语句。这里介绍的只是DMLs语句的基本用法,详细的语法请大家参考“HANA SQL AND SYSTEM VIEWS” 官方手册。

1.  INSERT
基本语法:
      INSERT INTO [ ] { | }
HANA SQL的INSERT语句与其他数据库,比如Sybase和Oracle相同,没有什么特殊地方的地方。

2.  UPDATE
基本语法:
      UPDATE [] [ WHERE ]    -- 语法1
      UPDATE []   FROM , , …. [ WHERE ]  --语法2
如果某个表需要更新的记录集合与其他表相关,那么需要在FROM子句中指定相关的表,在WHERE子句中加入关联条件,这 与Sybase和MS SQL Server类似。

3. UPSERT/REPLACE
    对于已经存在的记录进行更新,对于新的记录插入。其行为与ASE 15.7和Oracle的MERGE INTO类似,语句的名称不同。

示例:
CREATE TABLE T (KEY INT PRIMARY KEY, VAL INT)
UPSERT T VALUES(1,1)
UPSERT T VALUES(2,2)
UPSERT T VALUES (1, 9) WHERE KEY = 1
UPSERT T VALUES (1, 8) WITH PRIMARY KEY
UPSERT T SELECT KEY + 2, VAL FROM T;

SELECT * FROM T
 返回的记录为:
  1 8
  2 2
  3 8
  4 2

4.  DELETE
基本语法: 
   DELETE [HISTORY] FROM [WHERE ]

   HANA的DELETE语句与ORACLE类似,FROM子句只支持1个表(即需要从中删除记录的表)。 如果某个表需要删除的记录集合与其他表相关,那么需要在WHERE条件中实现关联。
Sybase ASE、IQ、MS SQL SERVER支持FROM字句中指定多个表,以进行关联,从而确定删除的记录。

示例
create table t1(id int,name varchar(10), primary key(id))
create table t2(id int primary key)
insert into t1 values(1,'aaaaaa')
insert into t1 values(2,‘bbbbbb')
insert into t2 values(1)
delete from t1 a where exists (select 1 from t2 b where a.id = b.id )


5. SELECT
基本用法与其他数据库相同。
支持SELECT  * FROM ….  FOR UPDATE(对命中的记录行加排他行锁)
支持LIMIT子句,限制结果集数量,可以使用它实现“分页”。例如:
   select * from mytab limit 2 offset 0  --返回头一行记录开始的2条记录
   也可以写成 select * from mytab limit 2
对于“列表”可以使用rowid,例如:
    Select  "$rowid$" ,* from customer where "$rowid$" >10  and "$rowid$" < 20

6. 事物和事物相关控制语句
(1) HANA支持事物(ACID):
  * 支持 “READ COMMITTED”、“REPEATABLE READ ”、“SERIALIZABLE”隔离级别
  * 支持“READ  ONLY”和 “READ WRITE”两种事物访问模式。在只读模式下,只允许执行SELECT语句。如果执行update或insert等写语句,会抛出异常。 在读写模式下,允许执行任何读写语句

(2) HANA 采用MVCC(多版本并发控制)进行并发控制, 读写之间不会阻塞(ASE会发生阻塞), 使用select  from  for update例外。 插入不会阻塞update、delete等操作, 只有更新/删除同一条记录时才会阻塞,即下面的几种情况:
  *  针对同一条记录的 update  , update
  *  针对同一条记录的 update,delete
  *  针对同一条记录的 delete,delete
 
(3) 事物控制语句:
COMMIT、ROLLBACK   --提交或回滚事物   
SET TRANSACTION ISOLATION LEVEL [ READ COMMITTED | REPEATABLE READ | SERIALIZABLE]   --设置事物隔离级别
SET TRANSACTION [ READ  ONLY  |  READ WRITE ]   --设置事物模式
   

阅读(12101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~