坚持学习openGauss数据库,坚持每天打卡。第二天学习openGauss表查询、更新和删除基本使用。
连接openGauss
root@modb:~# su - omm omm@modb:~$ gsql -r gsql ((openGauss 2.0.0 build 78689da9) compiled at 2021-03-31 21:03:52 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. omm=#
复制
1.创建一个表products
omm=# CREATE TABLE products
omm-# ( product_id integer,
omm(# product_name char(30),
omm(# category char(20));
复制
----添加表和字段注释:
omm=# comment on table products IS '产品表';
omm=# comment on column products.product_id is '产品编号';
omm=# comment on column products.product_name is '产品名';
omm=# comment on column products.category is '种类';
复制
2.向表中插入数据,采用一次插入一条和多条记录的方式
omm=# INSERT INTO products values(1502, 'olympus camera','electrncs');
omm=# INSERT INTO products (product_id,product_name,category) VALUES
(1601, 'lamaze', 'toys'),
(1700, 'wait interface','Books'),
(1666, 'harry potter', 'toys');
复制
3.获取表中一条记录、三条记录和所有记录
omm=# select * from products where product_id=1502;
product_id | product_name | category
------------+--------------------------------+----------------------
1502 | olympus camera | electrncs
(1 row)
omm=# select * from products where product_id<>1502;
product_id | product_name | category
------------+--------------------------------+----------------------
1601 | lamaze | toys
1700 | wait interface | Books
1666 | harry potter | toys
(3 rows)
omm=# select * from products;
product_id | product_name | category
------------+--------------------------------+----------------------
1502 | olympus camera | electrncs
1601 | lamaze | toys
1700 | wait interface | Books
1666 | harry potter | toys
(4 rows)
复制
4.将满足product_id > 1600的记录的product_id更新为product_id – 1000,并查看products中所有记录是否更新成功
omm=# select * from products where product_id > 1600;
product_id | product_name | category
------------+--------------------------------+----------------------
1601 | lamaze | toys
1700 | wait interface | Books
1666 | harry potter | toys
(3 rows)
omm=# update products set product_id=product_id-1000 where product_id > 1600;
UPDATE 3
omm=# select * from products;
product_id | product_name | category
------------+--------------------------------+----------------------
1502 | olympus camera | electrncs
601 | lamaze | toys
700 | wait interface | Books
666 | harry potter | toys
(4 rows)
复制
5.删除category为toys的所有记录,并查看products中数据是否删除成功
omm=# delete from products where category ='toys';
DELETE 2
omm=# select * from products;
product_id | product_name | category
------------+--------------------------------+----------------------
1502 | olympus camera | electrncs
700 | wait interface | Books
(2 rows)
复制
6.删除products中所有数据,并查看数据是否删除成功
方式一:
omm=# delete from products;
DELETE 2
方式二:
omm=# truncate table products;
TRUNCATE TABLE
omm=# select * from products;
product_id | product_name | category
------------+--------------+----------
(0 rows)
复制
7.删除表products
omm=# drop table products;
DROP TABLE
复制
8、delete/truncate/drop的区别和总结
区别:
- delete from后面可以写条件,truncate不可以。
- delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少,也就是truncate效率比delete高的原因。
- delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
- 当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
- 如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
- truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
总结:
- truncate和 delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
- delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
- delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
- 速度,一般来说: drop> truncate > delete。
- 安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
- 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
最后修改时间:2021-12-03 10:15:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
内蒙古公司成功完成新一代BOSS云原生系统割接上线
openGauss
189次阅读
2025-03-24 09:40:40
第4期 openGauss 中级认证OGCP直播班招生中!3月30日开课
墨天轮小教习
153次阅读
2025-03-17 15:48:40
openGauss 7.0.0-RC1 版本正式发布!
Gauss松鼠会
114次阅读
2025-04-01 12:27:03
openGauss 7.0.0-RC1 版本体验:一主一备快速安装指南
孙莹
82次阅读
2025-04-01 10:30:07
从数据库源码比较 PostgreSql和OpenGauss的启动过程
maozicb
68次阅读
2025-03-24 15:55:04
一文快速上手openGauss
进击的CJR
64次阅读
2025-03-26 16:12:54
openGauss HASH JOIN原理
lbsswhu
57次阅读
2025-03-18 10:45:01
openGauss 学习之路:集群部署实战探索
openGauss
44次阅读
2025-03-21 10:34:13
2025年3月国产数据库大事记
墨天轮编辑部
42次阅读
2025-04-03 15:21:16
openGauss问题记录:开启备机归档且备机stop情况下,执行gs_probackup失败
zym
39次阅读
2025-03-18 19:06:13