![lion_sybiq_127 lion_sybiq_127]()
在先前的文章中介绍了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 = 1UPSERT T VALUES (1, 8) WITH PRIMARY KEYUPSERT T SELECT KEY + 2, VAL FROM T;SELECT * FROM T 返回的记录为: 1 8 2 2 3 8 4 24. 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$"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 ] --设置事物模式 09-29 10:42