人大金仓分析型数据库插入、更新和删除数据

目录

并发控制

插入行

更新现有行

删除行

截断一个表

清理数据库


并发控制

       金仓分析型数据库使用一种多版本模型来维护数据一致性,即多版本并发控制(MVCC)。 MVCC 为每一个数据库会话实现了事务隔离,并且每一个查询事务会看到一个数据的快照。 这保证该事务会看到一致的不受其他并发事务影响的数据。因为MVCC不会为并发控制使用显式锁,锁竞争被最小化并且数据库在多用户环境中维持了合理的性能。为查询(读取)数据获得的 锁不与为写数据获得的锁冲突。数据库提供了多种锁模式来控制对表中数据的并发访问。对于不能轻易适应于MVCC行为的应用,可以使用 LOCK 命令来获取显式锁。 不过,MVCC的正确使用通常能提供更好的性能。

锁模式
相关的SQL命令
冲突模式
ACCESS SHARE
SELECT
ACCESS EXCLUSIVE
ROW SHARE
SELECT FOR SHARE,SE
LECT...FOR UPDATE
EXCLUSIVE,ACCESS EXCLUSIVE
ROW EXCLUSIVE
INSERT,COPY
SHARE,SHARE ROW EXCLUSIVE, EXCLUSIVE,ACCESS EXCLUSIVE
SHARE UPDATE EXCLUSIVE
VACUUM,ANALYZE
SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,EXCLUSIVE, ACCESS EXCLUSIVE
SHARE
CREATE INDEX
ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE
SHARE ROW EXCLUSIVE
ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE
EXCLUSIVE
DELETE, UPDATE, SELE
CT...FOR UPDATE
ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,EXCLUSIVE, ACCESS EXCLUSIVE
ACCESS EXCLUSIVE
ALTER TABLE, DROP TABLE, TRUNCATE, 
REINDEX, CLUSTER,
VACUUM FULL
ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE ,SHARE UPDATE EXCLUSIVE, SHARE, SHARE
ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE

        当分布式死锁检测开启时,运行在堆表上的 DELETE, UPDATE和 SELECT...FOR UPDATE 的锁模式是 ROW EXCLUSIVE的。

插入行

        使用 INSERT 命令在一个表中创建行。 这个命令要求该表的名称和表中每一个列的值, 可以选择性地以任意顺序指定列名。 如果没有指定列名,以那些列在表中的顺序列出数据值,用逗号分隔它们。

        例如,指定要插入的列名和值:

INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

        通常,数据值都是常量,但也可以使用标量表达式。例如:

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod <'2016-05-07';

        可以在单个命令中插入多行。例如:

INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99);

        要插入数据到一个分区表,应指定根分区表,即用 CREATE TABLE 命令创建 的表。 也可以在一个INSERT 命令中指定该分区表的一个叶子子表。如果数据对于指定的叶子子表无效,会返回一个错误。 不支持在INSERT 命令中指定一个不是叶子子表的子表。要插入大量数据,使用外部表或者COPY 命令。对于插入大量行,这些装载机制比INSERT 更加有效。

        追加优化表的存储模型是为批量数据装载而优化。不推荐对追加优化表的单行 INSERT 语句。对于追加优化表,数据库支持最多127个并发INSERT 事务插入到一个追加优化表。

更新现有行

        UPDATE 命令在一个表中更新行。可以更新一个表中所有的行、所有行的一个子集或者单个行。可以单独更新每一列而不影响其他列。

        要执行一次更新,需要:
  • 要更新的表和列的名称
  • 这些列的新值
  • 指定要更新的行的一个或者更多条件

        例如,下面的命令把所有价格为5 的产品更新为价格为 10: 

UPDATE products SET price = 10 WHERE price = 5;

删除行

        DELETE命令从一个表中删除行。指定一个WHERE子句可以删除满足特定条件的行。 如果不指定WHERE 子句,该表中所有的行都会被删除。 其结果是一个合法的但为空的表。例如,从产品表中删除所有价格为10的行:

DELETE FROM products WHERE price = 10;
        要从一个表中删除所有行:
DELETE FROM products;

截断一个表

        使用TRUNCATE命令可以快速地移除一个表中的所有行。例如:

TRUNCATE mytable;
        这个命令在一次操作中清空一个表的所有行。注意TRUNCATE 不扫描该表,因此它不会处理继承的子表或者ON DELETE 的重写规则。该命令只截断所提到的表中的行。

清理数据库

        虽然新事务看不到被删除或者被更新的数据行,但是它们仍然在磁盘上占用物理空间。周期性地运行VACUUM命令可以移除这些过期的行。例如:

VACUUM mytable;
        VACUUM 命令会收集表级别的统计信息,例如行数和页数。在装载数据后清理所有的表,包括追加优化表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值