Files
oceanbase/tools/deploy/mysql_test/test_suite/update/t/update2.test
2023-11-15 11:44:44 +00:00

888 lines
34 KiB
Plaintext

# owner: yuchen.wyc
#tags: pl, optimizer
# owner group: SQL1
# description: foobar
# tags: dml
# case_transfer:
# (1) update ignore语法不支持;
# (2)update 多表操作不支持;
# (3)create table t1 (a int, b char(255), key(a, b(20))); 不支持key为列的部分长度
# (4)alter table t1 disable keys; 不支持;
# (5)flush status;不支持
# (6)系统变量%Handler_read% 不支持;
# (7)set tmp_table_size=1024; 不支持
# (8)系统变量不支持;SET SESSION sql_safe_updates = DEFAULT;
# (9)HANDLER_UPDATE 系统变量不支持
#
# test of updating of keys
#
--source mysql_test/include/backup_spm_var.inc
--disable_query_log
set @@session.explicit_defaults_for_timestamp=off;
connect (conn_admin, $OBMYSQL_MS0,admin,$OBMYSQL_PWD,test,$OBMYSQL_PORT);
connection conn_admin;
alter system set_tp tp_no = 509, error_code = 4016, frequency = 1;
connection default;
--enable_query_log
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
--explain_protocol 1
--result_format 4
alter system set ob_enable_batched_multi_statement=true;
--real_sleep 1
create table t1 (a int auto_increment , primary key (a));
insert into t1 values (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
update t1 set a=a+10 where a > 34;
update t1 set a=a+100 where a > 0;
# Some strange updates to test some otherwise unused code
update t1 set a=a+100 where a=1 and a=2;
--error 1054
update t1 set a=b+100 where a=1 and a=2;
--error 1054
update t1 set a=b+100 where c=1 and a=2;
--error 1054
update t1 set d=a+100 where a=1;
select * from t1;
drop table t1;
create table t1(a int primary key, b int) partition by hash(a) partitions 3;
insert into t1 values(1, 1), (2, 2);
update t1 set b=b+1 where a>0;
select * from t1;
drop table t1;
create table t1(a int primary key, b int) partition by hash(a) partitions 3;
insert into t1 values(1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
update t1 set b=b+1 where a>0;
select * from t1;
drop table t1;
create table t1(a int primary key, b int) partition by hash(a) partitions 3;
create index gkey on t1(b) global;
insert into t1 values(1, 1), (2, 2);
update t1 set b=b+1 where a>0;
select * from t1;
drop table t1;
create table t1(a int primary key, b int) partition by hash(a) partitions 3;
create index gkey on t1(b) global;
insert into t1 values(1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
update t1 set b=b+1 where a>0;
select * from t1;
drop table t1;
create table t1(a int primary key, b int);
create index gkey on t1(b) partition by hash(b) partitions 2;
insert into t1 values(1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
update /*+index(t1 gkey)*/ t1 set b=b+1 where b>0 and b<5;
select /*+index(t1 primary)*/ * from t1 order by a;
drop table t1;
create table t1(a int primary key, b int) partition by hash(a) partitions 3;
create table t2(a int primary key, b int) partition by hash(a) partitions 3;
insert into t1 values(1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
update /*+use_nl(t1, t2), leading(t1)*/ t1 set b=b+1 where a in (select a from t2);
select * from t1;
drop table t1, t2;
CREATE TABLE t1
(
place_id int (10) unsigned NOT NULL,
shows int(10) unsigned DEFAULT '0' NOT NULL,
ishows int(10) unsigned DEFAULT '0' NOT NULL,
ushows int(10) unsigned DEFAULT '0' NOT NULL,
clicks int(10) unsigned DEFAULT '0' NOT NULL,
iclicks int(10) unsigned DEFAULT '0' NOT NULL,
uclicks int(10) unsigned DEFAULT '0' NOT NULL,
ts timestamp,
PRIMARY KEY (place_id,ts)
);
INSERT INTO t1 (place_id,shows,ishows,ushows,clicks,iclicks,uclicks,ts)
VALUES (1,0,0,0,0,0,0,20000928174434);
UPDATE t1 SET shows=shows+1,ishows=ishows+1,ushows=ushows+1,clicks=clicks+1,iclicks=iclicks+1,uclicks=uclicks+1 WHERE place_id=1 AND ts>="2000-09-28 00:00:00";
select place_id,shows from t1;
drop table t1;
#
# Test bug with update reported by Jan Legenhausen
#
CREATE TABLE t1 (
lfdnr int(10) unsigned NOT NULL default '0',
ticket int(10) unsigned NOT NULL default '0',
client varchar(255) NOT NULL default '',
replyto varchar(255) NOT NULL default '',
subject varchar(100) NOT NULL default '',
timestamp int(10) unsigned NOT NULL default '0',
tstamp timestamp NOT NULL,
status int(3) NOT NULL default '0',
type varchar(15) NOT NULL default '',
assignment int(10) unsigned NOT NULL default '0',
fupcount int(4) unsigned NOT NULL default '0',
parent int(10) unsigned NOT NULL default '0',
activity int(10) unsigned NOT NULL default '0',
priority tinyint(1) unsigned NOT NULL default '1',
cc varchar(255) NOT NULL default '',
bcc varchar(255) NOT NULL default '',
body varchar(255) NOT NULL,
comment varchar(255),
header varchar(255),
PRIMARY KEY (lfdnr),
KEY k1 (timestamp),
KEY k2 (type),
KEY k3 (parent),
KEY k4 (assignment),
KEY ticket (ticket)
) ;
INSERT INTO t1 VALUES (773,773,'','','',980257344,20010318180652,0,'Open',10,0,0,0,1,'','','','','');
alter table t1 change lfdnr lfdnr int(10) unsigned not null auto_increment;
update t1 set status=1 where type='Open';
select status from t1;
drop table t1;
#
# Test of ORDER BY
#
create table t1 (a int not null, b int not null, key (a));
insert into t1 values (1,1),(1,2),(1,3),(3,1),(3,2),(3,3),(3,1),(3,2),(3,3),(2,1),(2,2),(2,3);
SET @tmp=0;
update t1 set b=(@tmp:=@tmp+1) order by a;
update /*+index(t1 a)*/ t1 set b=99 where a=1 order by b asc limit 1;
select * from t1 order by a,b;
update t1 set b=100 where a=1 order by b desc limit 2;
update t1 set a=a+10+b where a=1 order by b;
select * from t1 order by a,b;
create table t2 (a int not null, b int not null);
insert into t2 values (1,1),(1,2),(1,3);
update t1 set b=(select distinct 1 from (select * from t2) a);
drop table t1,t2;
#
# Test with limit (Bug #393)
#
CREATE TABLE t1 (
`id_param` smallint(3) unsigned NOT NULL default '0',
`nom_option` char(40) NOT NULL default '',
`valid` tinyint(1) NOT NULL default '0',
KEY `id_param` (`id_param`,`nom_option`)
);
INSERT INTO t1 (id_param,nom_option,valid) VALUES (185,'600x1200',1);
UPDATE t1 SET nom_option='test' WHERE id_param=185 AND nom_option='600x1200' AND valid=1 LIMIT 1;
select * from t1;
drop table t1;
#
# Multi table update test from bugs
#
create table t1 (F1 VARCHAR(30), F2 VARCHAR(30), F3 VARCHAR(30), cnt int, groupid int, KEY groupid_index (groupid));
insert into t1 (F1,F2,F3,cnt,groupid) values ('0','0','0',1,6),
('0','1','2',1,5), ('0','2','0',1,3), ('1','0','1',1,2),
('1','2','1',1,1), ('1','2','2',1,1), ('2','0','1',2,4),
('2','2','0',1,7);
delete from m1 using t1 m1,t1 m2 where m1.groupid=m2.groupid and (m1.cnt < m2.cnt or m1.cnt=m2.cnt and m1.F3>m2.F3);
select * from t1;
drop table t1;
# Bug#5553 - Multi table UPDATE IGNORE fails on duplicate keys
CREATE TABLE t1 (
`colA` int(10) unsigned NOT NULL auto_increment,
`colB` int(11) NOT NULL default '0',
PRIMARY KEY (`colA`)
);
INSERT INTO t1 VALUES (4433,5424);
CREATE TABLE t2 (
`colC` int(10) unsigned NOT NULL default '0',
`colA` int(10) unsigned NOT NULL default '0',
`colD` int(10) unsigned NOT NULL default '0',
`colE` int(10) unsigned NOT NULL default '0',
`colF` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`colC`,`colA`,`colD`,`colE`)
);
INSERT INTO t2 VALUES (3,4433,10005,495,500);
INSERT INTO t2 VALUES (3,4433,10005,496,500);
INSERT INTO t2 VALUES (3,4433,10009,494,500);
INSERT INTO t2 VALUES (3,4433,10011,494,500);
INSERT INTO t2 VALUES (3,4433,10005,497,500);
INSERT INTO t2 VALUES (3,4433,10013,489,500);
INSERT INTO t2 VALUES (3,4433,10005,494,500);
INSERT INTO t2 VALUES (3,4433,10005,493,500);
INSERT INTO t2 VALUES (3,4433,10005,492,500);
#UPDATE IGNORE t2,t1 set t2.colE = t2.colE + 1,colF=0 WHERE t1.colA = t2.colA AND (t1.colB & 4096) > 0 AND (colE + 1) < colF;
--error 1062
UPDATE t2,t1 set t2.colE = t2.colE + 1,colF=0 WHERE t1.colA = t2.colA AND (t1.colB & 4096) > 0 AND (colE + 1) < colF;
SELECT * FROM t2;
DROP TABLE t1;
DROP TABLE t2;
#
# Bug #6054
#
create table t1 (c1 int, c2 char(6), c3 int);
create table t2 (c1 int, c2 char(6));
insert into t1 values (1, "t1c2-1", 10), (2, "t1c2-2", 20);
update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1";
update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1" where t1.c3 = 10;
drop table t1, t2;
#
# Bug #8057
#
create table t1 (id int not null auto_increment primary key, id_str varchar(32));
insert into t1 (id_str) values ("test");
update t1 set id_str = concat(id_str, id) where id = last_insert_id();
select * from t1;
drop table t1;
#
# Bug #8942: a problem with update and partial key part
#
create table t1 (a int, b char(255), key(a, b(20)));
insert into t1 values (0, '1');
update /*+index(t1 a)*/ t1 set b = b + 1 where a = 0;
select * from t1;
drop table t1;
# BUG#9103 "Erroneous data truncation warnings on multi-table updates"
create table t1 (a int, b varchar(10), key b(b(5)));
create table t2 (a int, b varchar(10));
insert into t1 values ( 1, 'abcd1e');
insert into t1 values ( 2, 'abcd2e');
insert into t2 values ( 1, 'abcd1e');
insert into t2 values ( 2, 'abcd2e');
update t1, t2 set t1.a = t2.a where t2.b = t1.b;
show warnings;
select * from t1;
select * from t2;
drop table t1, t2;
#
# Bug #11868 Update with subquery with ref built with a key from the updated
# table crashes server
#
create table t1(f1 int, f2 int);
create table t2(f3 int, f4 int);
create index idx on t2(f3);
insert into t1 values(1,0),(2,0);
insert into t2 values(1,1),(2,2);
UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1);
select * from t1;
drop table t1,t2;
#
# Bug #13180 sometimes server accepts sum func in update/delete where condition
#
create table t1(f1 int);
select DATABASE();
--error 1111
update t1 set f1=1 where count(*)=1;
select DATABASE();
--error 1111
delete from t1 where count(*)=1;
drop table t1;
# BUG#12915: Optimize "DELETE|UPDATE ... ORDER BY ... LIMIT n" to use an index
create table t1 ( a int, b int default 0, index (a) );
insert into t1 (a) values (0),(0),(0),(0),(0),(0),(0),(0);
#flush status;
select a from t1 order by a limit 1;
#show status like 'handler_read%';
#flush status;
update t1 set a=9999 order by a limit 1;
update t1 set b=9999 order by a limit 1;
#show status like 'handler_read%';
#flush status;
delete from t1 order by a limit 1;
#show status like 'handler_read%';
#flush status;
delete from t1 order by a desc limit 1;
#show status like 'handler_read%';
#alter table t1 disable keys;
#flush status;
delete from t1 order by a limit 1;
#show status like 'handler_read%';
select * from t1;
update t1 set a=a+10,b=1 order by a limit 3;
update t1 set a=a+11,b=2 order by a limit 3;
update t1 set a=a+12,b=3 order by a limit 3;
select * from t1 order by a;
drop table t1;
#
# Bug#14186 select datefield is null not updated
#
create table t1 (f1 date not null);
insert into t1 values('2000-01-01'),('0000-00-00');
update t1 set f1='2002-02-02' where f1 is null;
select * from t1;
drop table t1;
#
# Bug#15028 Multitable update returns different numbers of matched rows
# depending on table order
create table t1 (f1 int);
create table t2 (f2 int);
insert into t1 values(1),(2);
insert into t2 values(1),(1);
#--enable_info
#update t1,t2 set f1=3,f2=3 where f1=f2 and f1=1;
#--disable_info
update t2 set f2=1;
update t1 set f1=1 where f1=3;
#--enable_info
#update t2,t1 set f1=3,f2=3 where f1=f2 and f1=1;
#--disable_info
drop table t1,t2;
# BUG#15935
#create table t1 (a int);
#insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
#create table t2 (a int, filler1 char(200), filler2 char(200), key(a));
#insert into t2 select A.a + 10*B.a, 'filler','filler' from t1 A, t1 B;
#flush status;
#update t2 set a=3 where a=2;
#show status like 'handler_read%';
#drop table t1, t2;
#
# Bug #16510 Updating field named like '*name' caused server crash
#
create table t1(f1 int, `*f2` int);
insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
#
# Bug#25126: Wrongly resolved field leads to a crash
#
create table t1(f1 int);
--error 1054
update t1 set f2=1 order by f2;
drop table t1;
# End of 4.1 tests
#
# Bug #24035: performance degradation with condition int_field=big_decimal
#
CREATE TABLE t1 (
request_id int unsigned NOT NULL auto_increment,
user_id varchar(12) default NULL,
time_stamp datetime NOT NULL default '0000-00-00 00:00:00',
ip_address varchar(15) default NULL,
PRIMARY KEY (request_id),
KEY user_id_2 (user_id,time_stamp)
);
INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1 (user_id) VALUES ('user1');
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#INSERT INTO t1(user_id) SELECT user_id FROM t1;
#
#flush status;
SELECT user_id FROM t1 WHERE request_id=9999999999999;
#show status like '%Handler_read%';
SELECT user_id FROM t1 WHERE request_id=999999999999999999999999999999;
#show status like '%Handler_read%';
UPDATE t1 SET user_id=null WHERE request_id=9999999999999;
#show status like '%Handler_read%';
UPDATE t1 SET user_id=null WHERE request_id=999999999999999999999999999999;
#show status like '%Handler_read%';
DROP TABLE t1;
#
# Bug #24010: INSERT INTO ... SELECT fails on unique constraint with data it
# doesn't select
#
CREATE TABLE t1 (
a INT(11),
quux decimal( 31, 30 ),
UNIQUE KEY bar (a),
KEY quux (quux)
);
INSERT INTO
t1 ( a, quux )
VALUES
( 1, 1 ),
( 2, 0.1 );
#INSERT INTO t1( a )
# SELECT @newA := 1 + a FROM t1 WHERE quux <= 0.1;
SELECT * FROM t1;
DROP TABLE t1;
#
# Bug #22364: Inconsistent "matched rows" when executing UPDATE
#
#connect (con1,localhost,root,,test);
#connection con1;
#
#set tmp_table_size=1024;
#
## Create the test tables
#create table t1 (id int, a int, key idx(a));
#create table t2 (id int unsigned not null auto_increment primary key, a int);
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
##insert into t2(a) select a from t2;
##insert into t2(a) select a from t2;
##insert into t2(a) select a from t2;
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
#insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
#update t2 set a=id;
#insert into t1 select * from t2;
#
## Check that the number of matched rows is correct when the temporary
## table is small enough to not be converted to MyISAM
#select count(*) from t1 join t2 on (t1.a=t2.a);
##--enable_info
##update t1 join t2 on (t1.a=t2.a) set t1.id=t2.id;
##--disable_info
#
## Increase table sizes
##insert into t2(a) select a from t2;
#update t2 set a=id;
#truncate t1;
##insert into t1 select * from t2;
#
## Check that the number of matched rows is correct when the temporary
## table has to be converted to MyISAM
#select count(*) from t1 join t2 on (t1.a=t2.a);
#--enable_info
#update t1 join t2 on (t1.a=t2.a) set t1.id=t2.id;
#--disable_info
#
## Check that the number of matched rows is correct when there are duplicate
## key errors
#update t1 set a=1;
#update t2 set a=1;
#select count(*) from t1 join t2 on (t1.a=t2.a);
#--enable_info
#update t1 join t2 on (t1.a=t2.a) set t1.id=t2.id;
#--disable_info
#
#drop table t1,t2;
#
#connection default;
#disconnect con1;
#
# Bug #40745: Error during WHERE clause calculation in UPDATE
# leads to an assertion failure
#
#--disable_warnings
#DROP TABLE IF EXISTS t1;
#DROP FUNCTION IF EXISTS f1;
#--enable_warnings
#
#CREATE FUNCTION f1() RETURNS INT RETURN f1();
#CREATE TABLE t1 (i INT);
#INSERT INTO t1 VALUES (1);
#
#--error ER_SP_NO_RECURSION
#UPDATE t1 SET i = 3 WHERE f1();
#--error ER_SP_NO_RECURSION
#UPDATE t1 SET i = f1();
#
#DROP TABLE t1;
#DROP FUNCTION f1;
#
#--echo End of 5.0 tests
#
#--echo #
#--echo # Bug #47919 assert in open_table during ALTER temporary table
#--echo #
#
CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT, PRIMARY KEY (f1));
#CREATE TEMPORARY TABLE t2 LIKE t1;
CREATE TABLE t2(f1 INTEGER AUTO_INCREMENT, PRIMARY KEY (f1));
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (1);
ALTER TABLE t2 COMMENT = 'ABC';
#UPDATE t2, t1 SET t2.f1 = 2, t1.f1 = 9;
ALTER TABLE t2 COMMENT = 'DEF';
DROP TABLE t1, t2;
--echo #
--echo # Bug#50545: Single table UPDATE IGNORE crashes on join view in
--echo # sql_safe_updates mode.
--echo #
CREATE TABLE t1 ( a INT, KEY( a ) );
INSERT INTO t1 VALUES (0), (1);
CREATE VIEW v1 AS SELECT t11.a, t12.a AS b FROM t1 t11, t1 t12;
#SET SESSION sql_safe_updates = 1;
#--error ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE
#UPDATE IGNORE v1 SET a = 1;
#SET SESSION sql_safe_updates = DEFAULT;
DROP TABLE t1;
DROP VIEW v1;
--echo #
--echo # Bug#54734 assert in Diagnostics_area::set_ok_status
--echo #
#--disable_warnings
#DROP TABLE IF EXISTS t1, not_exists;
#DROP FUNCTION IF EXISTS f1;
#DROP VIEW IF EXISTS v1;
#--enable_warnings
#
#CREATE TABLE t1 (PRIMARY KEY(pk)) AS SELECT 1 AS pk;
#CREATE FUNCTION f1() RETURNS INTEGER RETURN (SELECT 1 FROM not_exists);
#CREATE VIEW v1 AS SELECT pk FROM t1 WHERE f1() = 13;
#--error ER_VIEW_INVALID
#UPDATE v1 SET pk = 7 WHERE pk > 0;
#
#DROP VIEW v1;
#DROP FUNCTION f1;
#DROP TABLE t1;
--echo #
--echo # Verify that UPDATE does the same number of handler_update
--echo # operations, no matter if there is ORDER BY or not.
--echo #
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
(30),(31),(32),(33),(34),(35);
#CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2),
# INDEX idx (a,b(1),c));
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2),
INDEX idx (a,b,c));
INSERT INTO t2 VALUES (10,10,10,10),(11,11,11,11),(12,12,12,12),(13,13,13,13),(14,14,14,14),(15,15,15,15),(16,16,16,16),(17,17,17,17),(18,18,18,18),(19,19,19,19);
#INSERT INTO t2 SELECT i, i, i, i FROM t1;
#FLUSH STATUS; # FLUSH is autocommit, so we put it outside of transaction
START TRANSACTION;
UPDATE t2 SET d = 10 WHERE b = 10 LIMIT 5;
#SHOW STATUS LIKE 'HANDLER_UPDATE';
ROLLBACK;
#FLUSH STATUS;
START TRANSACTION;
UPDATE t2 SET d = 10 WHERE b = 10 ORDER BY a, c LIMIT 5;
#SHOW STATUS LIKE 'HANDLER_UPDATE';
ROLLBACK;
--echo Same test with a different UPDATE.
ALTER TABLE t2 DROP INDEX idx;
alter table t2 ADD INDEX idx2 (a, b);
#FLUSH STATUS;
START TRANSACTION;
UPDATE t2 SET c = 10 LIMIT 5;
#SHOW STATUS LIKE 'HANDLER_UPDATE';
ROLLBACK;
#FLUSH STATUS;
START TRANSACTION;
UPDATE t2 SET c = 10 ORDER BY a, b DESC LIMIT 5;
#SHOW STATUS LIKE 'HANDLER_UPDATE';
ROLLBACK;
DROP TABLE t1, t2;
--disable_warnings
drop table if exists table10_bigint;
--enable_warnings
CREATE TABLE table10_bigint (col_char_34_key char(34),col_char_24 char(24),col_char_48_unique_index char(48),col_char_26_unique_index char(26),col_char_36 char(36),col_char_26 char(26),col_char_20 char(20),col_char_37 char(37),col_char_29_key char(29),pk bigint,col_char_20_unique_index char(20),col_char_39 char(39),col_char_23 char(23),col_char_28_key char(28),col_char_45 char(45),col_char_40_unique_index char(40),col_char_43_unique_index char(43),col_char_21_key char(21),col_char_29 char(29),col_char_25_key char(25),col_timestamp_6 timestamp(6) NULL DEFAULT NULL,col_char_32_key char(32),col_char_22 char(22),col_char_45_key char(45),col_char_20_key char(20),col_char_35_key char(35),col_char_22_unique_index char(22),col_char_46_unique_index char(46),col_char_28_unique_index char(28),col_char_25 char(25),col_char_42_unique_index char(42),col_char_30_key char(30),col_char_33_unique_index char(33),col_char_42 char(42),col_char_23_key char(23),col_char_36_key char(36),col_timestamp_6_unique_index timestamp(6) NULL DEFAULT NULL,col_char_37_unique_index char(37),col_char_46_key char(46),col_char_32_unique_index char(32),col_char_34_unique_index char(34),col_char_28 char(28),col_char_25_unique_index char(25),col_char_39_unique_index char(39),col_char_30 char(30),col_char_36_unique_index char(36),col_char_47_key char(47),col_char_41_unique_index char(41),col_char_42_key char(42),col_char_48 char(48),col_char_46 char(46),col_char_48_key char(48),col_char_22_key char(22),col_bigint_unique_index bigint,col_char_38 char(38),col_char_21 char(21),col_char_43 char(43),col_char_27 char(27),col_char_40_key char(40),col_char_40 char(40),col_char_47_unique_index char(47),col_char_21_unique_index char(21),col_char_33 char(33),col_char_27_unique_index char(27),col_char_44_key char(44),col_char_35_unique_index char(35),col_char_26_key char(26),col_bigint bigint,col_char_30_unique_index char(30),col_char_45_unique_index char(45),col_char_32 char(32),col_char_41 char(41),col_char_24_unique_index char(24),col_char_31_unique_index char(31),col_char_33_key char(33),col_char_39_key char(39),col_char_35 char(35),col_timestamp_6_key timestamp(6) NULL DEFAULT NULL,col_char_44 char(44),col_char_31 char(31),col_char_43_key char(43),col_char_29_unique_index char(29),col_char_37_key char(37),col_char_23_unique_index char(23),col_char_41_key char(41),col_char_38_unique_index char(38),col_char_44_unique_index char(44),col_bigint_key bigint,col_char_24_key char(24),col_char_27_key char(27),col_char_38_key char(38),col_char_47 char(47),col_char_31_key char(31),col_char_34 char(34),key idx46(col_char_34_key ),key idx31(col_char_29_key ),primary key (pk)) ;
insert into table10_bigint values('a', 'b','c','d','e', 'f', 'h','i','j',1,'a', 'b','c','d','e', 'f', 'h','i','j','k','2001-03-04 10:10:10', 'a', 'b','c','d','e', 'f', 'h','i','j','k','j','i','o','p','u','2001-03-04 10:10:10','a', 'b','c','d','e', 'f', 'h','i','j','k','j','i','o','p','u','y',2,'a', 'b','c','d','e', 'f','h','i','j','k','j','i','o',3,'a', 'b','c','d','e', 'f', 'h','i','j','2001-03-04 10:10:10','a', 'b','c','d','e', 'f', 'h','i','j',4,'a', 'b','c','d','e', 'f');
UPDATE table10_bigint SET col_char_20 = 'a' ;
delete from table10_bigint;
alter system set ob_enable_batched_multi_statement=false;
DROP TABLE /*! IF EXISTS*/ table10_bigint;
--disable_warnings
drop table if exists t1,t2;
drop view if exists update_view, update_view1;
--enable_warnings
create table t1 (c1 int, c2 int, c3 int);
create table t2 (c1 int, c2 int, c3 int);
create view update_view (c1,c2) as select t1.c2 as c1, t2.c2 as c2 from t1, t2 where t1.c1 = t2.c1;
create view update_view1 (c1,c2) as select t1.c2 as c1, t2.c2 as c2 from t1 join t2 on t1.c1 = t2.c1;
--error 5868
update t1, t2 set t1.c2 = t2.c2 where t1.c1 = t2.c1 order by t2.c2;
--error 5868
update t1 join t2 on t1.c1 = t2.c1 set t1.c2 = t2.c2 order by t2.c2;
--error 5868
update t1 left join t2 on t1.c1 = t2.c1 set t1.c2 = t2.c2 order by t2.c2;
--error 5868
update update_view set c1 = c2 order by c2;
--error 5868
update update_view1 set c1 = c2 order by c2;
--error 5869
update t1, t2 set t1.c2 = t2.c2 where t1.c1 = t2.c1 limit 10;
--error 5869
update t1 join t2 on t1.c1 = t2.c1 set t1.c2 = t2.c2 limit 10;
--error 5869
update t1 left join t2 on t1.c1 = t2.c1 set t1.c2 = t2.c2 limit 10;
--error 5869
update update_view set c1 = c2 limit 10;
--error 5869
update update_view1 set c1 = c2 limit 10;
drop view update_view;
drop view update_view1;
drop table t1;
drop table t2;
--disable_warnings
drop table if exists gf_ar_mthly_bill;
--enable_warnings
set binlog_row_image='MINIMAL';
CREATE TABLE `gf_ar_mthly_bill` (
`tnt_inst_id` varchar(8) COLLATE utf8mb4_bin NOT NULL COMMENT '租户机构id',
`bill_no` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '账单号',
`ip_id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '结算对象ipid',
`ip_role_id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '结算对象pid',
`inst_id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '分支机构',
`pd_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品码',
`ar_no` varchar(34) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '合约号',
`bill_tp` varchar(2) COLLATE utf8mb4_bin NOT NULL COMMENT '账单类型',
`setl_tp` varchar(2) COLLATE utf8mb4_bin NOT NULL COMMENT '结算方式',
`bill_st` varchar(2) COLLATE utf8mb4_bin NOT NULL COMMENT '核销状态',
`bill_strt_dt` varchar(8) COLLATE utf8mb4_bin NOT NULL COMMENT '账单开始日期',
`bill_end_dt` varchar(8) COLLATE utf8mb4_bin NOT NULL COMMENT '账单结束日期',
`bill_mth` varchar(6) COLLATE utf8mb4_bin NOT NULL COMMENT '账单月份',
`acrd_dt` varchar(8) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '应收日期',
`gmt_pay` timestamp(6) NULL DEFAULT NULL COMMENT '付款时间',
`payee_ac` varchar(34) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '收款方账号',
`payer_ac` varchar(34) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '付款方账号',
`pay_way` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '支付方式',
`pay_orig` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '支付来源',
`clcn_bsc_amt` decimal(25,4) DEFAULT NULL COMMENT '计算交易量',
`clcn_bsc_tp` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '计算依据',
`clcn_mthd` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '计算方法',
`chrg_itm_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '收费项编码',
`ccy` varchar(3) COLLATE utf8mb4_bin NOT NULL COMMENT '币种',
`bill_amt` bigint(20) NOT NULL COMMENT '账单金额',
`adj_amt` bigint(20) NOT NULL COMMENT '调整金额',
`rcvd_amt` bigint(20) NOT NULL COMMENT '已收金额',
`tax_tp` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '税种 01:增值税 02:营业税',
`tax_rate` decimal(10,8) NOT NULL COMMENT '税率',
`tax_amt` bigint(20) NOT NULL COMMENT '税额',
`exn_inf` varchar(4000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '扩展信息',
`anl_dmsn1` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分析维度1',
`anl_dmsn2` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分析维度2',
`anl_dmsn3` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分析维度3',
`anl_dmsn4` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分析维度4',
`wrtof_dtl_cnt` bigint(20) DEFAULT NULL COMMENT '已核销明细数量',
`to_wrtof_dtl_cnt` bigint(20) DEFAULT NULL COMMENT '待核销明细数量',
`rcrd_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '数据唯一ID',
`last_moder` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '最近修改人',
`gmt_create` timestamp(6) NOT NULL COMMENT '创建时间',
`gmt_modified` timestamp(6) NOT NULL COMMENT '修改时间',
`charge_tp` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '计收费环境类型 01 主站云计收费 02 主站离线计收费 03 主站老计收费',
`stl_ip_role_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '结算对象',
`svc_amt` bigint(20) DEFAULT NULL COMMENT '交易金额',
`inved_amt` bigint(20) DEFAULT NULL COMMENT '已开票金额',
`chk_st` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '出账状态 01 初始化 02 待确认出账 03 已出账 04 客户已对账 05 对账差异',
`acnt_day` varchar(14) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '出账日',
`inv_amt` bigint(20) DEFAULT NULL COMMENT '可开票金额',
`rel_inv_amt` bigint(20) DEFAULT NULL COMMENT '已关联发票金额',
`tp` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '应收1 返点2',
`payer_ip_role_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '扣款对象pid',
`sgn_ip_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '签约对象ipid',
`sgn_ip_role_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '签约对象pid',
`chking_amt` bigint(20) DEFAULT '0' COMMENT '出账中金额',
`frz_amt` bigint(20) DEFAULT '0' COMMENT '冻结金额(用于控制流程上互斥的业务)',
`chked_amt` bigint(20) DEFAULT '0' COMMENT '已出账金额',
`writingoff_amt` bigint(20) DEFAULT '0' COMMENT '核销中金额',
`svc_bill_amt` bigint(20) DEFAULT NULL COMMENT '账单计费金额,计收费计费时生成的中间金额',
`svc_ccy` varchar(3) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账单计费币种',
`env_source` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '环境标识',
`metadata_source` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '元数据来源标识,包括(用户、商户、产品、合约、计费)来源',
`setl_time_zone` varchar(12) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账单结算时区',
`actg_time_zone` varchar(12) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账单核算时区',
`inter_trade_flag` varchar(1) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Y: 是关联交易 N: 不是关联交易',
`actg_bill_mth` varchar(6) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '核算时区账单月份',
`auto_writeoff_group_no` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自动核销关联组号',
`partition_id` varchar(4) COLLATE utf8mb4_bin GENERATED ALWAYS AS (substr(`bill_no`,23,2)) VIRTUAL,
PRIMARY KEY (`tnt_inst_id`, `bill_no`),
UNIQUE KEY `uk_tnt_inst_id_rcrd_id` (`tnt_inst_id`, `rcrd_id`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_acnt_day_chk_st_gmt_create` (`tnt_inst_id`, `acnt_day`, `chk_st`, `gmt_create`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_acnt_day_chk_st` (`tnt_inst_id`, `acnt_day`, `chk_st`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_ip_role_id` (`tnt_inst_id`, `ip_role_id`) LOCAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_setl_tp_bill_st` (`tnt_inst_id`, `setl_tp`, `bill_st`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_ar_no` (`tnt_inst_id`, `ar_no`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_bill_mth` (`tnt_inst_id`, `bill_mth`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_ip_role_id_bill_mth` (`tnt_inst_id`, `ip_role_id`, `bill_mth`) LOCAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_ip_id` (`tnt_inst_id`, `ip_id`, `bill_mth`, `setl_tp`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_acrd_dt_setl_tp_bill_st` (`tnt_inst_id`, `acrd_dt`, `setl_tp`, `bill_st`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_tnt_inst_id_ip_role_id_bill_mth_setl_tp` (`tnt_inst_id`, `ip_role_id`, `bill_mth`, `setl_tp`) LOCAL BLOCK_SIZE 16384,
KEY `idx_bill_mth` (`bill_mth`, `tnt_inst_id`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_payer_ip_role_id_bill_mth` (`tnt_inst_id`, `payer_ip_role_id`, `bill_mth`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_ip_id_bill_mth` (`tnt_inst_id`, `ip_id`, `bill_mth`) GLOBAL BLOCK_SIZE 16384,
KEY `idx_policy_id_bill_mth_inst_id_type` (`tnt_inst_id`, `inst_id`, `bill_mth`, `tp`, `anl_dmsn2`) GLOBAL,
KEY `idx_tnt_inst_id_inst_id_tp_anl_dmsn_1_bill_mth` (`tnt_inst_id`, `inst_id`, `tp`, `anl_dmsn1`, `bill_mth`) GLOBAL,
KEY `idx_tnt_inst_id_inst_id_tp_anl_dmsn_3_bill_mth` (`tnt_inst_id`, `inst_id`, `tp`, `anl_dmsn3`, `bill_mth`) GLOBAL,
KEY `idx_tnt_inst_id_inst_id_tp_anl_dmsn_4_bill_mth` (`tnt_inst_id`, `inst_id`, `tp`, `anl_dmsn4`, `bill_mth`) GLOBAL,
KEY `idx_tnt_inst_id_inst_id_tp_anl_dmsn_2_bill_mth` (`tnt_inst_id`, `inst_id`, `tp`, `anl_dmsn2`, `bill_mth`) GLOBAL
) partition by list columns(partition_id)
(partition p0 values in ('00'),
partition p80 values in ('80'),
partition p81 values in ('81'),
partition p82 values in ('82'),
partition p95 values in ('95'),
partition p96 values in ('96'),
partition p97 values in ('97'),
partition p98 values in ('98'),
partition p99 values in ('99'));
insert into gf_ar_mthly_bill(tnt_inst_id, bill_no, ip_id, ip_role_id, inst_id,
bill_tp, setl_tp, bill_st, bill_strt_dt, bill_end_dt, bill_mth, ccy, bill_amt,
adj_amt, rcvd_amt, tax_tp, tax_rate, tax_amt, rcrd_id, last_moder, gmt_create, gmt_modified)
values('ylctest', '2018090310122000040400820033834415',
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, '2021-05-17 12:09:34', '2021-05-17 12:09:34');
begin;
update gf_ar_mthly_bill
set bill_st='01',
gmt_pay='2021-05-17 12:09:35',
clcn_bsc_amt='123.12',
bill_amt=1,
rcvd_amt=2,
tax_amt=3,
exn_inf='123456',
anl_dmsn1='123456',
anl_dmsn2='234567',
anl_dmsn3='345678',
anl_dmsn4='456789',
last_moder='ylc',
adj_amt=4,
svc_amt = 5,
chk_st = '06',
inv_amt = 6,
writingoff_amt = 7,
wrtof_dtl_cnt = 9 ,
to_wrtof_dtl_cnt = 8,
chking_amt=10,
chked_amt=11,
frz_amt=12,
svc_bill_amt=13,
gmt_modified='2021-05-17 12:09:34'
where
tnt_inst_id='ylctest' and bill_no='2018090310122000040400820033834415';
select * from gf_ar_mthly_bill;
rollback;
connect (obsys,$OBMYSQL_MS0,admin,$OBMYSQL_PWD,test,$OBMYSQL_PORT);
connection obsys;
--sleep 3
connection default;
set binlog_row_image='MINIMAL';
update gf_ar_mthly_bill
set bill_st='01',
gmt_pay='2021-05-17 12:09:35',
clcn_bsc_amt='123.12',
bill_amt=1,
rcvd_amt=2,
tax_amt=3,
exn_inf='123456',
anl_dmsn1='123456',
anl_dmsn2='234567',
anl_dmsn3='345678',
anl_dmsn4='456789',
last_moder='ylc',
adj_amt=4,
svc_amt = 5,
chk_st = '06',
inv_amt = 6,
writingoff_amt = 7,
wrtof_dtl_cnt = 9 ,
to_wrtof_dtl_cnt = 8,
chking_amt=10,
chked_amt=11,
frz_amt=12,
svc_bill_amt=13,
gmt_modified='2021-05-17 12:09:34'
where
tnt_inst_id='ylctest' and bill_no='2018090310122000040400820033834415';
select * from gf_ar_mthly_bill;
drop table gf_ar_mthly_bill;
set binlog_row_image='FULL';
connection obsys;
connection default;
#bug fix:
drop table if exists TBFUNDSALESTAT;
CREATE TABLE TBFUNDSALESTAT (
PRD_CODE VARCHAR(32) DEFAULT ' ',
SELLER_CODE VARCHAR(9) DEFAULT ' ',
HOLD_AMT NUMBER(18,2) DEFAULT 0
);
connection obsys;
connection default;
UPDATE tbfundsalestat a
SET a.hold_amt = (SELECT /*+merge*/Sum(c.hold_amt)
FROM tbfundsalestat c
WHERE c.prd_code = a.prd_code)
WHERE a.seller_code = (SELECT /*+unnest*/Max(b.seller_code)
FROM tbfundsalestat b
WHERE a.prd_code = b.prd_code);
connection obsys;
connection default;
UPDATE tbfundsalestat a
SET a.hold_amt = (SELECT /*+merge*/Sum(c.hold_amt)
FROM tbfundsalestat c
WHERE c.prd_code = a.prd_code)
WHERE a.seller_code = (SELECT /*+unnest*/Max(b.seller_code)
FROM tbfundsalestat b
WHERE a.prd_code = b.prd_code);
drop table if exists TBFUNDSALESTAT;
--source mysql_test/include/recover_spm_var.inc