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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- table_reference
- join_table 子句: