暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第2天|openGauss表查询、更新和删除基本使用

原创 赵敬星 2021-12-02
922

坚持学习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的区别和总结

区别:

  1. delete from后面可以写条件,truncate不可以。
  2. delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少,也就是truncate效率比delete高的原因。
  3. delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
  4. 当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
  5. 如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
  6. truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。

总结:

  1. truncate和 delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
  2. delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
  3. delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
  4. 速度,一般来说: drop> truncate > delete。
  5. 安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
  6. 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
最后修改时间:2021-12-03 10:15:53
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

暂无图片
获得了38次点赞
暂无图片
内容获得17次评论
暂无图片
获得了56次收藏
TA的专栏
数据库
收录3篇内容
信创数据库
收录24篇内容
老牌主流数据库
收录0篇内容
目录
  • 1.创建一个表products
    • ----添加表和字段注释:
  • 2.向表中插入数据,采用一次插入一条和多条记录的方式
  • 3.获取表中一条记录、三条记录和所有记录
  • 4.将满足product_id > 1600的记录的product_id更新为product_id – 1000,并查看products中所有记录是否更新成功
  • 5.删除category为toys的所有记录,并查看products中数据是否删除成功
  • 6.删除products中所有数据,并查看数据是否删除成功
  • 7.删除表products
  • 8、delete/truncate/drop的区别和总结