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

华为GaussDB T UPDATE

墨天轮 2019-10-12
837

UPDATE

功能描述

更新表中行的值。

注意事项

  • UPDATE事务提交是默认关闭的。会话退出时,需要显式COMMIT,否则记录将丢失。
  • 执行该语句的用户需要有表的UPDATE权限或者UPDATE ANY TABLE的系统权限。普通用户不允许update系统SYS用户对象。
  • 不支持临时表的多表更新。

语法格式

只有在使用join_table子句时支持使用(col_name[,...]) = (expression[,...]) 。

UPDATE table_reference SET { [col_name = expression] [ , ... ] | (col_name[,...]) = (SELECT expression[,...]) } [ WHERE condition ]
  • table_reference 子句:
    { [ schema_name. ] table_name | join_table }
  • join_table 子句:
    table_reference [LEFT [OUTER] | RIGHT [OUTER] | INNER ] JOIN table_reference ON conditional_expr

参数说明

  • table_reference

    要更新的表、表集合。

    取值范围:已存在的表、表集合。

  • table_name

    要更新的表名。

    取值范围:已存在的表名称。

  • col_name

    要修改的字段名。

    取值范围:已存在的字段名。

  • expression

    赋给字段的值或表达式。

  • condition

    一个返回布尔类型结果的表达式。只有这个表达式返回true的行才会被更新。

  • join_table

    用于关联查询的一组表集合。

    • [INNER] JOIN 用于取两表的交集。
    • LEFT [OUTER] JOIN 用于取左表的全集,右表不匹配的以null值代替。
    • RIGHT [OUTER] JOIN 用于取右表的全集,左表不匹配的以null值代替。

示例

更新表training中ID和表education中staff_id相同的记录,修改first_name为其他值。

--删除表education、training。 DROP TABLE IF EXISTS education; DROP TABLE IF EXISTS training;
--创建表education、training。 CREATE TABLE education(staff_id INT, first_name VARCHAR(20)); CREATE TABLE training(staff_id INT, first_name VARCHAR(20));
--插入记录。 INSERT INTO education VALUES(1, 'ALICE'); INSERT INTO education VALUES(2, 'BROWN'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(3, 'BOB');
--更新表training中staff_id和表education中staff_id相同的记录的first_name字段。 UPDATE training INNER JOIN education ON training.staff_id = education.staff_id SET training.first_name = 'ALAN';
更新表training_beijing_branch中staff_id为10的记录。
--删除表training_beijing_branch。 DROP TABLE IF EXISTS training_beijing_branch;
--创建表training_beijing_branch。 CREATE TABLE training_beijing_branch(staff_id INT NOT NULL, staff_name VARCHAR(16), course_name VARCHAR(50), course_start_date DATETIME, course_end_date DATETIME, exam_date DATETIME, score INT);
--向表training_beijing_branch中插入记录1。 INSERT INTO training_beijing_branch(staff_id,staff_name,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'liming','the tenth phase of SQL majorization','2017-06-15 12:00:00','2017-06-20 12:00:00','2017-06-25 12:00:00',90); --向表training_beijing_branch中插入记录2。 INSERT INTO training_beijing_branch(staff_id,staff_name,course_name,course_start_date,course_end_date,exam_date,score) VALUES(11,'caoxueying','the tenth phase of information safety','2017-06-20 12:00:00','2017-06-25 12:00:00','2017-06-26 12:00:00',95); --提交整个事务。 COMMIT;
--更新表training_beijing_branch的数据。 UPDATE training_beijing_branch SET staff_name='caoxueying', course_name='the twenty-third phase of information safety' WHERE staff_id=10; --提交事务。 COMMIT;

更新分区表student_score的分区键score,将其中一条记录从一个分区更新到另外一个分区。

--删除表student_score。 DROP TABLE IF EXISTS student_score;
--创建分区表student_score。 CREATE TABLE student_score(id INT NOT NULL, score INT) PARTITION BY RANGE(score) ( PARTITION P1 VALUES LESS THAN(60), PARTITION P2 VALUES LESS THAN(100) );
--向表student_score中插入记录1。 INSERT INTO student_score(id, score) VALUES(20180102, 50); --向表student_score中插入记录2。 INSERT INTO student_score(id, score) VALUES(20180121, 80);
--更新表student_score中的记录1。 UPDATE student_score SET score=70 WHERE id =20180102; --提交事务。 COMMIT;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论