drop table if exists t; create table t(a bigint, b bigint as (a+1)); begin; insert into t(a) values(1); update t set b=6 where b=2; Error 3105 (HY000): The value specified for generated column 'b' in table 't' is not allowed. commit; select * from t; a b 1 2 drop table if exists t1, t2, t3; create table t1(id int primary key auto_increment, n int); create table t2(id int primary key, n float auto_increment, key I_n(n)); create table t3(id int primary key, n double auto_increment, key I_n(n)); insert into t1 set n = 1; select * from t1 where id = 1; id n 1 1 update t1 set id = id+1; select * from t1 where id = 2; id n 2 1 insert into t1 set n = 2; select * from t1 where id = 3; id n 3 2 update t1 set id = id + '1.1' where id = 3; select * from t1 where id = 4; id n 4 2 insert into t1 set n = 3; select * from t1 where id = 5; id n 5 3 update t1 set id = id + '0.5' where id = 5; select * from t1 where id = 6; id n 6 3 insert into t1 set n = 4; select * from t1 where id = 7; id n 7 4 insert into t2 set id = 1; select * from t2 where id = 1; id n 1 1 update t2 set n = n+1; select * from t2 where id = 1; id n 1 2 insert into t2 set id = 2; select * from t2 where id = 2; id n 2 3 update t2 set n = n + '2.2'; select * from t2 where id = 2; id n 2 5.2 insert into t2 set id = 3; select * from t2 where id = 3; id n 3 6 update t2 set n = n + '0.5' where id = 3; select * from t2 where id = 3; id n 3 6.5 insert into t2 set id = 4; select * from t2 where id = 4; id n 4 7 insert into t3 set id = 1; select * from t3 where id = 1; id n 1 1 update t3 set n = n+1; select * from t3 where id = 1; id n 1 2 insert into t3 set id = 2; select * from t3 where id = 2; id n 2 3 update t3 set n = n + '3.3'; select * from t3 where id = 2; id n 2 6.3 insert into t3 set id = 3; select * from t3 where id = 3; id n 3 7 update t3 set n = n + '0.5' where id = 3; select * from t3 where id = 3; id n 3 7.5 insert into t3 set id = 4; select * from t3 where id = 4; id n 4 8 drop table if exists t; drop database if exists test2; create database test2; create table t(a int, b int generated always as (a+1) virtual); create table test2.t(a int, b int generated always as (a+1) virtual); update t, test2.t set executor__update.t.a=1; drop database test2; drop table if exists t1, t2; create table t1 (c_str varchar(40)); create table t2 (c_str varchar(40)); insert into t1 values ('Alice'); insert into t2 values ('Bob'); select t1.c_str, t2.c_str from t1, t2 where t1.c_str <= t2.c_str; c_str c_str Alice Bob update t1, t2 set t1.c_str = t2.c_str, t2.c_str = t1.c_str where t1.c_str <= t2.c_str; select t1.c_str, t2.c_str from t1, t2 where t1.c_str <= t2.c_str; c_str c_str drop table if exists t; create table t (a int, b int); insert into t values(1, 2); select * from t; a b 1 2 update t set a=b, b=a; select * from t; a b 2 1 drop table if exists t; create table t (a int, b int); insert into t values (1,3); select * from t; a b 1 3 update t set a=b, b=a; select * from t; a b 3 1 drop table if exists t; create table t (a int, b int, c int as (-a) virtual, d int as (-b) stored); insert into t(a, b) values (10, 11), (20, 22); select * from t; a b c d 10 11 -10 -11 20 22 -20 -22 update t set a=b, b=a; select * from t; a b c d 11 10 -11 -10 22 20 -22 -20 update t set b=30, a=b; select * from t; a b c d 10 30 -10 -30 20 30 -20 -30 drop table if exists t; create table t(x int, y int); insert into t values(); update t t1, t t2 set t2.y=1, t1.x=2; select * from t; x y 2 1 update t t1, t t2 set t1.x=t2.y, t2.y=t1.x; select * from t; x y 1 2 drop table if exists t; create table t(x int, y int, z int as (x+10) stored, w int as (y-10) virtual); insert into t(x, y) values(1, 2), (3, 4); update t t1, t t2 set t2.y=1, t1.x=2 where t1.x=1; select * from t; x y z w 2 1 12 -9 3 1 13 -9 update t t1, t t2 set t1.x=5, t2.y=t1.x where t1.x=3; select * from t; x y z w 2 3 12 -7 5 3 15 -7 drop table if exists t; create table t(a int, b int, c int as (a+b) stored); insert into t(a, b) values (1, 2); update t t1, t t2 set t2.a=3; select * from t; a b c 3 2 5 update t t1, t t2 set t1.a=4, t2.b=5; select * from t; a b c 4 5 9 drop table if exists t; create table t (a int primary key); insert into t values (1), (2); update t set a=a+2; select * from t; a 3 4 update t m, t n set m.a = n.a+10 where m.a=n.a; select * from t; a 13 14 drop table if exists t; create table t (a int primary key, b int); insert into t values (1,3), (2,4); update t m, t n set m.a = n.a+10, n.b = m.b+1 where m.a=n.a; Error 1706 (HY000): Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'. drop table if exists t; create table t (a int, b int, c int, primary key(a, b)); insert into t values (1,3,5), (2,4,6); update t m, t n set m.a = n.a+10, m.b = n.b+10 where m.a=n.a; select * from t; a b c 11 13 5 12 14 6 update t m, t n, t q set q.c=m.a+n.b, n.c = m.a+1, m.c = n.b+1 where m.b=n.b AND m.a=q.a; select * from t; a b c 11 13 24 12 14 26 update t m, t n, t q set m.a = m.a+1, n.c = n.c-1, q.c = q.a+q.b where m.b=n.b and n.b=q.b; Error 1706 (HY000): Primary key/partition key update is not allowed since the table is updated both as 'm' and 'n'. set tidb_enable_clustered_index = on; drop table if exists t; create table t(id varchar(200) primary key, v int); insert into t(id, v) values ('abc', 233); select id, v from t where id = 'abc'; id v abc 233 update t set id = 'dfg' where id = 'abc'; select * from t; id v dfg 233 update t set id = 'aaa', v = 333 where id = 'dfg'; select * from t where id = 'aaa'; id v aaa 333 update t set v = 222 where id = 'aaa'; select * from t where id = 'aaa'; id v aaa 222 insert into t(id, v) values ('bbb', 111); update t set id = 'bbb' where id = 'aaa'; Error 1062 (23000): Duplicate entry 'bbb' for key 't.PRIMARY' drop table if exists ut3pk; create table ut3pk(id1 varchar(200), id2 varchar(200), v int, id3 int, primary key(id1, id2, id3)); insert into ut3pk(id1, id2, v, id3) values ('aaa', 'bbb', 233, 111); select id1, id2, id3, v from ut3pk where id1 = 'aaa' and id2 = 'bbb' and id3 = 111; id1 id2 id3 v aaa bbb 111 233 update ut3pk set id1 = 'abc', id2 = 'bbb2', id3 = 222, v = 555 where id1 = 'aaa' and id2 = 'bbb' and id3 = 111; select id1, id2, id3, v from ut3pk where id1 = 'abc' and id2 = 'bbb2' and id3 = 222; id1 id2 id3 v abc bbb2 222 555 select id1, id2, id3, v from ut3pk; id1 id2 id3 v abc bbb2 222 555 update ut3pk set v = 666 where id1 = 'abc' and id2 = 'bbb2' and id3 = 222; select id1, id2, id3, v from ut3pk; id1 id2 id3 v abc bbb2 222 666 insert into ut3pk(id1, id2, id3, v) values ('abc', 'bbb3', 222, 777); update ut3pk set id2 = 'bbb3' where id1 = 'abc' and id2 = 'bbb2' and id3 = 222; Error 1062 (23000): Duplicate entry 'abc-bbb3-222' for key 'ut3pk.PRIMARY' drop table if exists ut1pku; create table ut1pku(id varchar(200) primary key, uk int, v int, unique key ukk(uk)); insert into ut1pku(id, uk, v) values('a', 1, 2), ('b', 2, 3); select * from ut1pku; id uk v a 1 2 b 2 3 update ut1pku set uk = 3 where id = 'a'; select * from ut1pku; id uk v a 3 2 b 2 3 update ut1pku set uk = 2 where id = 'a'; Error 1062 (23000): Duplicate entry '2' for key 'ut1pku.ukk' select * from ut1pku; id uk v a 3 2 b 2 3 drop table if exists t; create table t(a char(10) primary key, b char(10)); insert into t values('a', 'b'); update t set a='c' where t.a='a' and b='b'; select * from t; a b c b drop table if exists s; create table s (a int, b int, c int, primary key (a, b)); insert s values (3, 3, 3), (5, 5, 5); update s set c = 10 where a = 3; select * from s; a b c 3 3 10 5 5 5 set tidb_enable_clustered_index = default; set tidb_enable_clustered_index = on; drop table if exists t; create table t(id varchar(200) primary key, v int); insert into t(id, v) values ('abc', 233); delete from t where id = 'abc'; select * from t; id v select * from t where id = 'abc'; id v drop table if exists it3pk; create table it3pk(id1 varchar(200), id2 varchar(200), v int, id3 int, primary key(id1, id2, id3)); insert into it3pk(id1, id2, v, id3) values ('aaa', 'bbb', 233, 111); delete from it3pk where id1 = 'aaa' and id2 = 'bbb' and id3 = 111; select * from it3pk; id1 id2 v id3 select * from it3pk where id1 = 'aaa' and id2 = 'bbb' and id3 = 111; id1 id2 v id3 insert into it3pk(id1, id2, v, id3) values ('aaa', 'bbb', 433, 111); select * from it3pk where id1 = 'aaa' and id2 = 'bbb' and id3 = 111; id1 id2 v id3 aaa bbb 433 111 drop table if exists dt3pku; create table dt3pku(id varchar(200) primary key, uk int, v int, unique key uuk(uk)); insert into dt3pku(id, uk, v) values('a', 1, 2); delete from dt3pku where id = 'a'; select * from dt3pku; id uk v insert into dt3pku(id, uk, v) values('a', 1, 2); drop table if exists s1; create table s1 (a int, b int, c int, primary key (a, b)); insert s1 values (3, 3, 3), (5, 5, 5); delete from s1 where a = 3; select * from s1; a b c 5 5 5 set tidb_enable_clustered_index = default; set tidb_enable_clustered_index = on; drop table if exists rt1pk; create table rt1pk(id varchar(200) primary key, v int); replace into rt1pk(id, v) values('abc', 1); select * from rt1pk; id v abc 1 replace into rt1pk(id, v) values('bbb', 233), ('abc', 2); select * from rt1pk; id v abc 2 bbb 233 drop table if exists rt3pk; create table rt3pk(id1 timestamp, id2 time, v int, id3 year, primary key(id1, id2, id3)); replace into rt3pk(id1, id2,id3, v) values('2018-01-01 11:11:11', '22:22:22', '2019', 1); select * from rt3pk; id1 id2 v id3 2018-01-01 11:11:11 22:22:22 1 2019 replace into rt3pk(id1, id2, id3, v) values('2018-01-01 11:11:11', '22:22:22', '2019', 2); select * from rt3pk; id1 id2 v id3 2018-01-01 11:11:11 22:22:22 2 2019 drop table if exists rt1pk1u; create table rt1pk1u(id varchar(200) primary key, uk int, v int, unique key uuk(uk)); replace into rt1pk1u(id, uk, v) values("abc", 2, 1); select * from rt1pk1u; id uk v abc 2 1 replace into rt1pk1u(id, uk, v) values("aaa", 2, 11); select * from rt1pk1u; id uk v aaa 2 11 set tidb_enable_clustered_index = default; drop table if exists t; create table t(ts int(10) unsigned NULL DEFAULT NULL); insert into t values(1); update t set ts = IF(ts < (0 - ts), 1,1) where ts>0; Error 1690 (22003): BIGINT UNSIGNED value is out of range in '(0 - executor__update.t.ts)' drop table if exists tt; create table tt (m0 varchar(64), status tinyint not null); insert into tt values('1',0),('1',0),('1',0); update tt a inner join (select m0 from tt where status!=1 group by m0 having count(*)>1) b on a.m0=b.m0 set a.status=1; drop table if exists t1; create table t1(id int, a int unsigned); set sql_mode=''; insert into t1 values(1, 10), (2, 20); update t1 set a='-1' where id=1; update t1 set a='1000000000000000000' where id=2; select id, a from t1 order by id asc; id a 1 0 2 4294967295 set sql_mode=default; drop table if exists t1; create table t1(id int primary key, name varchar(40)); insert into t1 values(1, 'abc'); begin pessimistic; begin pessimistic; update t1 set name='xyz' where id=1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 select * from t1 where id = 1; id name 1 xyz commit; update t1 set name='xyz' where id=1; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 0 select * from t1 where id = 1; id name 1 abc select * from t1 where id = 1 for update; id name 1 xyz select * from t1 where id in (1, 2); id name 1 abc select * from t1 where id in (1, 2) for update; id name 1 xyz commit; drop table if exists update_test; create table update_test(id int not null default 1, name varchar(255), PRIMARY KEY(id)); insert INTO update_test VALUES (1, "hello"); insert into update_test values (2, "hello"); UPDATE update_test SET name = "abc" where id > 0; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 begin; SELECT * from update_test limit 2; id name 1 abc 2 abc commit; UPDATE update_test SET name = "foo"; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 begin; drop table if exists update_test; commit; begin; create table update_test(id int not null auto_increment, name varchar(255), primary key(id)); insert into update_test(name) values ('aa'); update update_test set id = 8 where name = 'aa'; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 insert into update_test(name) values ('bb'); commit; begin; select * from update_test; id name 8 aa 9 bb commit; begin; drop table if exists update_test; commit; begin; create table update_test(id int not null auto_increment, name varchar(255), index(id)); insert into update_test(name) values ('aa'); update update_test set id = null where name = 'aa'; Error 1048 (23000): Column 'id' cannot be null drop table update_test; create table update_test(id int); begin; insert into update_test(id) values (1); update update_test set id = 2 where id = 1 limit 1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 select * from update_test; id 2 commit; drop table if exists update_unique; create table update_unique (id int primary key, name int unique); insert update_unique values (1, 1), (2, 2); begin; update update_unique set name = 1 where id = 2; Error 1062 (23000): Duplicate entry '1' for key 'update_unique.name' commit; select * from update_unique; id name 1 1 2 2 drop table if exists t; create table t(a bigint, primary key (a)); insert into t values (1); insert into t values (2); update ignore t set a = 1 where a = 2; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 1 SHOW WARNINGS; Level Code Message Warning 1062 Duplicate entry '1' for key 't.PRIMARY' select * from t; a 1 2 update ignore t set a = 1 where a = (select '2a'); SHOW WARNINGS; Level Code Message Warning 1292 Truncated incorrect DOUBLE value: '2a' Warning 1292 Truncated incorrect DOUBLE value: '2a' Warning 1062 Duplicate entry '1' for key 't.PRIMARY' update ignore t set a = 42 where a = 2; select * from t; a 1 42 drop table if exists t; create table t(a bigint, unique key I_uniq (a)); insert into t values (1); insert into t values (2); update ignore t set a = 1 where a = 2; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 1 SHOW WARNINGS; Level Code Message Warning 1062 Duplicate entry '1' for key 't.I_uniq' select * from t; a 1 2 drop table if exists t; create table t (a int) partition by list (a) (partition p0 values in (0,1)); analyze table t; insert ignore into t values (1); update ignore t set a=2 where a=1; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 1 drop table if exists t; create table t (a int key) partition by list (a) (partition p0 values in (0,1)); insert ignore into t values (1); update ignore t set a=2 where a=1; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 1 drop table if exists t; create table t(id integer auto_increment, t1 datetime, t2 datetime, primary key (id)); insert into t(t1, t2) values('2000-10-01 01:01:01', '2017-01-01 10:10:10'); select * from t; id t1 t2 1 2000-10-01 01:01:01 2017-01-01 10:10:10 update t set t1 = '2017-10-01 10:10:11', t2 = date_add(t1, INTERVAL 10 MINUTE) where id = 1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 select * from t; id t1 t2 1 2017-10-01 10:10:11 2000-10-01 01:11:01 drop table if exists tt1; CREATE TABLE `tt1` (`a` int(11) NOT NULL,`b` varchar(32) DEFAULT NULL,`c` varchar(32) DEFAULT NULL,PRIMARY KEY (`a`),UNIQUE KEY `b_idx` (`b`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; insert into tt1 values(1, 'a', 'a'); insert into tt1 values(2, 'd', 'b'); select * from tt1; a b c 1 a a 2 d b update tt1 set a=5 where c='b'; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 select * from tt1; a b c 1 a a 5 d b drop table if exists tsup; CREATE TABLE `tsup` (`a` int,`ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,KEY `idx` (`ts`)); set @@sql_mode=''; insert into tsup values(1, '0000-00-00 00:00:00'); update tsup set a=5; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 select t1.ts = t2.ts from (select ts from tsup use index (idx)) as t1, (select ts from tsup use index ()) as t2; t1.ts = t2.ts 1 update tsup set ts='2019-01-01'; select ts from tsup; ts 2019-01-01 00:00:00 set @@sql_mode=default; drop table if exists decimals; create table decimals (a decimal(20, 0) not null); insert into decimals values (201); update decimals set a = a + 1.23; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 1 show warnings; Level Code Message Warning 1292 Truncated incorrect DECIMAL value: '202.23' select * from decimals; a 202 drop table t; CREATE TABLE `t` ( `c1` year DEFAULT NULL, `c2` year DEFAULT NULL, `c3` date DEFAULT NULL, `c4` datetime DEFAULT NULL, KEY `idx` (`c1`,`c2`)); UPDATE t SET c2=16777215 WHERE c1>= -8388608 AND c1 < -9 ORDER BY c1 LIMIT 2; update (select * from t) t set c1 = 1111111; Error 1288 (HY000): The target table t of the UPDATE is not updatable drop table if exists t; create table t (i int not null default 10); insert into t values (1); update ignore t set i = null; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 1 SHOW WARNINGS; Level Code Message Warning 1048 Column 'i' cannot be null select * from t; i 0 drop table t; create table t (k int, v int); update t, (select * from t) as b set b.k = t.k; Error 1288 (HY000): The target table b of the UPDATE is not updatable update t, (select * from t) as b set t.k = b.k; drop table if exists t1; CREATE TABLE t1 (c1 float); INSERT INTO t1 SET c1 = 1; UPDATE t1 SET c1 = 1.2 WHERE c1=1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 drop table if exists t; create table t (c1 float(1,1)); insert into t values (0.0); update t set c1 = 2.0; Error 1264 (22003): Out of range value for column 'c1' at row 1 drop table if exists t; create table t(a datetime not null, b datetime); insert into t value('1999-12-12', '1999-12-13'); set @@sql_mode=''; select * from t; a b 1999-12-12 00:00:00 1999-12-13 00:00:00 update t set a = ''; select * from t; a b 0000-00-00 00:00:00 1999-12-13 00:00:00 update t set b = ''; select * from t; a b 0000-00-00 00:00:00 0000-00-00 00:00:00 set @@sql_mode=default; drop view if exists v; create view v as select * from t; update v set a = '2000-11-11'; Error 1288 (HY000): The target table v of the UPDATE is not updatable drop view v; drop sequence if exists seq; create sequence seq; update seq set minvalue=1; Error 1054 (42S22): Unknown column 'minvalue' in 'field list' drop sequence seq; drop table if exists t1, t2; create table t1(a int, b int, c int, d int, e int, index idx(a)); create table t2(a int, b int, c int); update t1 join t2 on t1.a=t2.a set t1.a=1 where t2.b=1 and t2.c=2; drop table if exists t1, t2; create table t1 (a int default 1, b int default 2); insert into t1 values (10, 10), (20, 20); update t1 set a=default where b=10; select * from t1; a b 1 10 20 20 update t1 set a=30, b=default where a=20; select * from t1; a b 1 10 30 2 update t1 set a=default, b=default where a=30; select * from t1; a b 1 10 1 2 insert into t1 values (40, 40); update t1 set a=default, b=default; select * from t1; a b 1 2 1 2 1 2 update t1 set a=default(b), b=default(a); select * from t1; a b 2 1 2 1 2 1 create table t2 (a int default 1, b int generated always as (-a) virtual, c int generated always as (-a) stored); insert into t2 values (10, default, default), (20, default, default); update t2 set b=default; select * from t2; a b c 10 -10 -10 20 -20 -20 update t2 set a=30, b=default where a=10; select * from t2; a b c 30 -30 -30 20 -20 -20 update t2 set c=default, a=40 where c=-20; select * from t2; a b c 30 -30 -30 40 -40 -40 update t2 set a=default, b=default, c=default where b=-30; select * from t2; a b c 1 -1 -1 40 -40 -40 update t2 set a=default(a), b=default, c=default; select * from t2; a b c 1 -1 -1 1 -1 -1 update t2 set a=default(b), b=default, c=default; select * from t2; a b c NULL NULL NULL NULL NULL NULL update t2 set b=default(a); Error 3105 (HY000): The value specified for generated column 'b' in table 't2' is not allowed. update t2 set a=default(a), c=default(c); select * from t2; a b c 1 -1 -1 1 -1 -1 update t2 set a=default(b), b=default(b); select * from t2; a b c NULL NULL NULL NULL NULL NULL update t2 set a=default(a), c=default(c); select * from t2; a b c 1 -1 -1 1 -1 -1 update t2 set a=default(a), c=default(a); Error 3105 (HY000): The value specified for generated column 'c' in table 't2' is not allowed. drop table t1, t2; drop table if exists msg, detail; create table msg (id varchar(8), b int, status int, primary key (id, b)); insert msg values ('abc', 1, 1); create table detail (id varchar(8), start varchar(8), status int, index idx_start(start)); insert detail values ('abc', '123', 2); UPDATE msg SET msg.status = (SELECT detail.status FROM detail WHERE msg.id = detail.id); affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 admin check table msg; drop table if exists ttt; CREATE TABLE ttt (id bigint(20) NOT NULL, host varchar(30) NOT NULL, PRIMARY KEY (id), UNIQUE KEY i_host (host)); insert into ttt values (8,8),(9,9); begin; update ttt set id = 0, host='9' where id = 9 limit 1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 delete from ttt where id = 0 limit 1; select * from ttt use index (i_host) order by host; id host 8 8 update ttt set id = 0, host='8' where id = 8 limit 1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 delete from ttt where id = 0 limit 1; select * from ttt use index (i_host) order by host; id host commit; admin check table ttt; drop table ttt; drop table if exists a; create table a(id int auto_increment, a int default null, primary key(id)); insert into a values (1, 1001), (2, 1001), (10001, 1), (3, 1); update a set id = id*10 where a = 1001; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 drop table a; create table a ( a bigint, b bigint); insert into a values (1, 1001), (2, 1001), (10001, 1), (3, 1); update a set a = a*10 where b = 1001; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 drop table if exists items, month; CREATE TABLE items (id int, price TEXT); insert into items values (11, "items_price_11"), (12, "items_price_12"), (13, "items_price_13"); affected rows: 3 info: Records: 3 Duplicates: 0 Warnings: 0 CREATE TABLE month (mid int, mprice TEXT); insert into month values (11, "month_price_11"), (22, "month_price_22"), (13, "month_price_13"); affected rows: 3 info: Records: 3 Duplicates: 0 Warnings: 0 UPDATE items, month SET items.price=month.mprice WHERE items.id=month.mid; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 begin; SELECT * FROM items; id price 11 month_price_11 12 items_price_12 13 month_price_13 commit; UPDATE items join month on items.id=month.mid SET items.price=month.mid; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 begin; SELECT * FROM items; id price 11 11 12 items_price_12 13 13 commit; UPDATE items T0 join month T1 on T0.id=T1.mid SET T0.price=T1.mprice; affected rows: 2 info: Rows matched: 2 Changed: 2 Warnings: 0 begin; SELECT * FROM items; id price 11 month_price_11 12 items_price_12 13 month_price_13 commit; DROP TABLE IF EXISTS t1, t2; create table t1 (c int); create table t2 (c varchar(256)); insert into t1 values (1), (2); insert into t2 values ("a"), ("b"); update t1, t2 set t1.c = 10, t2.c = "abc"; affected rows: 4 info: Rows matched: 4 Changed: 4 Warnings: 0 DROP TABLE IF EXISTS t1, t2; create table t1 (c1 int); create table t2 (c2 int); insert into t1 values (1), (2); insert into t2 values (1), (2); update t1, t2 set t1.c1 = 10, t2.c2 = 2 where t2.c2 = 1; affected rows: 3 info: Rows matched: 3 Changed: 3 Warnings: 0 select * from t1; c1 10 10 drop table if exists t; create table t (a int, b int); insert into t values(1, 1), (2, 2), (3, 3); affected rows: 3 info: Records: 3 Duplicates: 0 Warnings: 0 update t m, t n set m.a = m.a + 1; affected rows: 3 info: Rows matched: 3 Changed: 3 Warnings: 0 select * from t; a b 2 1 3 2 4 3 update t m, t n set n.a = n.a - 1, n.b = n.b + 1; affected rows: 3 info: Rows matched: 3 Changed: 3 Warnings: 0 select * from t; a b 1 2 2 3 3 4 drop table if exists update_modified; create table update_modified (col_1 int, col_2 enum('a', 'b')); set SQL_MODE=''; insert into update_modified values (0, 3); SELECT * FROM update_modified; col_1 col_2 0 set SQL_MODE=STRICT_ALL_TABLES; update update_modified set col_1 = 1; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM update_modified; col_1 col_2 1 update update_modified set col_1 = 2, col_2 = 'c'; Error 1265 (01000): Data truncated for column '%s' at row %d SELECT * FROM update_modified; col_1 col_2 1 update update_modified set col_1 = 3, col_2 = 'a'; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT * FROM update_modified; col_1 col_2 3 a drop table if exists update_with_diff_type; CREATE TABLE update_with_diff_type (a int, b JSON); INSERT INTO update_with_diff_type VALUES(3, '{"a": "测试"}'); UPDATE update_with_diff_type SET a = '300'; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 SELECT a FROM update_with_diff_type; a 300 UPDATE update_with_diff_type SET b = '{"a": "\\u6d4b\\u8bd5"}'; affected rows: 0 info: Rows matched: 1 Changed: 0 Warnings: 0 SELECT b FROM update_with_diff_type; b {"a": "测试"} set SQL_MODE=default; drop table if exists parent, child; create table parent (id int primary key, ref int, key(ref)); create table child (id int primary key, ref int, foreign key (ref) references parent(ref)); insert into parent values (1, 1), (2, 2); insert into child values (1, 1); update child set ref = 2 where id = 1; update child set ref = 3 where id = 1; Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`executor__update`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`ref`) REFERENCES `parent` (`ref`)) update ignore child set ref = 3 where id = 1; Level Code Message Warning 1452 Cannot add or update a child row: a foreign key constraint fails (`executor__update`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`ref`) REFERENCES `parent` (`ref`)) update parent set ref = 3 where id = 2; Error 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`executor__update`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`ref`) REFERENCES `parent` (`ref`)) update ignore parent set ref = 3 where id = 2; DROP TABLE IF EXISTS t, tp; CREATE TABLE t (a INT, b INT, dt DATE, PRIMARY KEY (a) NONCLUSTERED); CREATE TABLE tp (a INT, b INT, dt DATE, PRIMARY KEY (a) NONCLUSTERED) PARTITION BY RANGE (a) ( PARTITION p0 VALUES LESS THAN (5), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (20) ); INSERT INTO tp(a,b) VALUES (2,2),(4,4),(6,6); INSERT INTO t(a,b) VALUES (12,12),(14,14),(15,15),(16,16); SELECT *, _tidb_rowid FROM t ORDER BY a; a b dt _tidb_rowid 12 12 NULL 1 14 14 NULL 2 15 15 NULL 3 16 16 NULL 4 SELECT *, _tidb_rowid FROM tp ORDER BY a; a b dt _tidb_rowid 2 2 NULL 1 4 4 NULL 2 6 6 NULL 3 ALTER TABLE tp EXCHANGE PARTITION p2 WITH TABLE t; SELECT *, _tidb_rowid FROM tp ORDER BY a; a b dt _tidb_rowid 2 2 NULL 1 4 4 NULL 2 6 6 NULL 3 12 12 NULL 1 14 14 NULL 2 15 15 NULL 3 16 16 NULL 4 UPDATE tp SET dt = '2025-12-16'; SELECT *, _tidb_rowid FROM tp ORDER BY a; a b dt _tidb_rowid 2 2 2025-12-16 1 4 4 2025-12-16 2 6 6 2025-12-16 3 12 12 2025-12-16 1 14 14 2025-12-16 2 15 15 2025-12-16 3 16 16 2025-12-16 4 UPDATE tp SET b = 333; SELECT *, _tidb_rowid FROM tp ORDER BY a; a b dt _tidb_rowid 2 333 2025-12-16 1 4 333 2025-12-16 2 6 333 2025-12-16 3 12 333 2025-12-16 1 14 333 2025-12-16 2 15 333 2025-12-16 3 16 333 2025-12-16 4 DROP TABLE t, tp;