2
# test of updating of keys
6
drop table if exists t1,t2;
9
create table t1 (a int auto_increment , primary key (a));
10
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);
11
update t1 set a=a+10 where a > 34;
12
update t1 set a=a+100 where a > 0;
14
# Some strange updates to test some otherwise unused code
15
update t1 set a=a+100 where a=1 and a=2;
16
--error ER_BAD_FIELD_ERROR
17
update t1 set a=b+100 where a=1 and a=2;
18
--error ER_BAD_FIELD_ERROR
19
update t1 set a=b+100 where c=1 and a=2;
20
--error ER_BAD_FIELD_ERROR
21
update t1 set d=a+100 where a=1;
27
place_id int NOT NULL,
28
shows int DEFAULT '0' NOT NULL,
29
ishows int DEFAULT '0' NOT NULL,
30
ushows int DEFAULT '0' NOT NULL,
31
clicks int DEFAULT '0' NOT NULL,
32
iclicks int DEFAULT '0' NOT NULL,
33
uclicks int DEFAULT '0' NOT NULL,
35
PRIMARY KEY (place_id,ts)
38
INSERT INTO t1 (place_id,shows,ishows,ushows,clicks,iclicks,uclicks,ts)
39
VALUES (1,0,0,0,0,0,0,20000928174434);
40
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";
41
select place_id,shows from t1;
45
# Test bug with update reported by Jan Legenhausen
48
CREATE TEMPORARY TABLE t1 (
49
lfdnr int NOT NULL default '0',
50
ticket int NOT NULL default '0',
51
client varchar(255) NOT NULL default '',
52
replyto varchar(255) NOT NULL default '',
53
subject varchar(100) NOT NULL default '',
54
timestamp_arg int NOT NULL default '0',
55
tstamp timestamp NOT NULL,
56
status int NOT NULL default '0',
57
type varchar(15) NOT NULL default '',
58
assignment int NOT NULL default '0',
59
fupcount int NOT NULL default '0',
60
parent int NOT NULL default '0',
61
activity int NOT NULL default '0',
62
priority int NOT NULL default '1',
63
cc varchar(255) NOT NULL default '',
64
bcc varchar(255) NOT NULL default '',
69
KEY k1 (timestamp_arg),
76
INSERT INTO t1 VALUES (773,773,'','','',980257344,20010318180652,0,'Open',10,0,0,0,1,'','','','','');
78
alter table t1 change lfdnr lfdnr int not null auto_increment;
79
update t1 set status=1 where type='Open';
80
select status from t1;
87
create table t1 (a int not null, b int not null, key (a));
88
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);
90
update t1 set b=(@tmp:=@tmp+1) order by a;
91
update t1 set b=99 where a=1 order by b asc limit 1;
92
select * from t1 order by a,b;
93
update t1 set b=100 where a=1 order by b desc limit 2;
94
update t1 set a=a+10+b where a=1 order by b;
95
select * from t1 order by a,b;
96
create table t2 (a int not null, b int not null);
97
insert into t2 values (1,1),(1,2),(1,3);
98
update t1 set b=(select distinct 1 from (select * from t2) a);
102
# Test with limit (Bug #393)
105
CREATE TEMPORARY TABLE t1 (
106
`id_param` int NOT NULL default '0',
107
`nom_option` char(40) NOT NULL default '',
108
`valid` int NOT NULL default '0',
109
KEY `id_param` (`id_param`,`nom_option`)
112
INSERT INTO t1 (id_param,nom_option,valid) VALUES (185,'600x1200',1);
114
UPDATE t1 SET nom_option='test' WHERE id_param=185 AND nom_option='600x1200' AND valid=1 LIMIT 1;
121
create table t1 (id int not null auto_increment primary key, id_str varchar(32));
122
insert into t1 (id_str) values ("test");
123
update t1 set id_str = concat(id_str, id) where id = last_insert_id();
128
# Bug #8942: a problem with update and partial key part
131
create table t1 (a int, b char(255), key(a, b(20)));
132
insert into t1 values (0, '1');
133
update t1 set b = b + 1 where a = 0;
138
# Bug #11868 Update with subquery with ref built with a key from the updated
139
# table crashes server
141
create table t1(f1 int, f2 int);
142
create table t2(f3 int, f4 int);
143
create index idx on t2(f3);
144
insert into t1 values(1,0),(2,0);
145
insert into t2 values(1,1),(2,2);
146
UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1);
151
# Bug #13180 sometimes server accepts sum func in update/delete where condition
153
create table t1(f1 int);
155
--error ER_INVALID_GROUP_FUNC_USE
156
update t1 set f1=1 where count(*)=1;
158
--error ER_INVALID_GROUP_FUNC_USE
159
delete from t1 where count(*)=1;
162
# BUG#12915: Optimize "DELETE|UPDATE ... ORDER BY ... LIMIT n" to use an index
163
create table t1 ( a int, b int default 0, index (a) );
164
insert into t1 (a) values (0),(0),(0),(0),(0),(0),(0),(0);
167
select a from t1 order by a limit 1;
169
show status like 'handler_read%';
172
update t1 set a=9999 order by a limit 1;
173
update t1 set b=9999 order by a limit 1;
175
show status like 'handler_read%';
178
delete from t1 order by a limit 1;
180
show status like 'handler_read%';
183
delete from t1 order by a desc limit 1;
185
show status like 'handler_read%';
187
alter table t1 disable keys;
190
delete from t1 order by a limit 1;
192
show status like 'handler_read%';
194
# PBXT: this select returns a different result to
195
# innodb because the 2 updates above change different rows
197
update t1 set a=a+10,b=1 order by a limit 3;
198
update t1 set a=a+11,b=2 order by a limit 3;
199
update t1 set a=a+12,b=3 order by a limit 3;
200
select * from t1 order by a;
205
# Bug#14186 select datefield is null not updated
207
create table t1 (f1 date NULL);
208
insert into t1 values('2000-01-01'),(NULL);
209
update t1 set f1='2002-02-02' where f1 is null;
214
create table t1 (a int);
215
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
216
create table t2 (a int, filler1 char(200), filler2 char(200), key(a));
217
insert into t2 select A.a + 10*B.a, 'filler','filler' from t1 A CROSS JOIN t1 B;
219
update t2 set a=3 where a=2;
221
show status like 'handler_read%';
225
# Bug #16510 Updating field named like '*name' caused server crash
227
create table t1(f1 int, `*f2` int);
228
insert into t1 values (1,1);
229
update t1 set `*f2`=1;
233
# Bug#25126: Wrongly resolved field leads to a crash
235
create table t1(f1 int);
236
--error ER_BAD_FIELD_ERROR
237
update t1 set f2=1 order by f2;
242
# Bug #24035: performance degradation with condition int_field=big_decimal
246
request_id int NOT NULL auto_increment,
247
user_id varchar(12) default NULL,
249
ip_address varchar(15) default NULL,
250
PRIMARY KEY (request_id),
251
KEY user_id_2 (user_id,time_stamp)
254
INSERT INTO t1 (user_id) VALUES ('user1');
255
INSERT INTO t1(user_id) SELECT user_id FROM t1;
256
INSERT INTO t1(user_id) SELECT user_id FROM t1;
257
INSERT INTO t1(user_id) SELECT user_id FROM t1;
258
INSERT INTO t1(user_id) SELECT user_id FROM t1;
259
INSERT INTO t1(user_id) SELECT user_id FROM t1;
260
INSERT INTO t1(user_id) SELECT user_id FROM t1;
261
INSERT INTO t1(user_id) SELECT user_id FROM t1;
262
INSERT INTO t1(user_id) SELECT user_id FROM t1;
265
SELECT user_id FROM t1 WHERE request_id=9999999999999;
267
show status like '%Handler_read%';
268
SELECT user_id FROM t1 WHERE request_id=999999999999999999999999999999;
270
show status like '%Handler_read%';
271
UPDATE t1 SET user_id=null WHERE request_id=9999999999999;
273
show status like '%Handler_read%';
274
UPDATE t1 SET user_id=null WHERE request_id=999999999999999999999999999999;
276
show status like '%Handler_read%';
281
# Bug #24010: INSERT INTO ... SELECT fails on unique constraint with data it
287
quux decimal( 31, 30 ),
300
SELECT @newA := 1 + a FROM t1 WHERE quux <= 0.1;
307
# Bug #22364: Inconsistent "matched rows" when executing UPDATE
310
connect (con1,localhost,root,,test);
313
set tmp_table_size=1024;
315
# Create the test tables
316
create table t1 (id int, a int, key idx(a));
317
create table t2 (id int not null auto_increment primary key, a int);
318
insert into t2(a) values(1),(2),(3),(4),(5),(6),(7),(8);
319
insert into t2(a) select a from t2;
320
insert into t2(a) select a from t2;
321
insert into t2(a) select a from t2;
323
insert into t1 select * from t2;
325
# PBXT: Rows changed are different here between InnoDB and PBXT
326
# because PBXT does not update the rows that are not modified!
327
# InnoDB seems to do this....
328
# Check that the number of matched rows is correct when the temporary
329
# table is small enough to not be converted to MyISAM
330
select count(*) from t1 join t2 on (t1.a=t2.a);
332
# Increase table sizes
333
insert into t2(a) select a from t2;
336
insert into t1 select * from t2;
338
# Check that the number of matched rows is correct when the temporary
339
# table has to be converted to MyISAM
340
select count(*) from t1 join t2 on (t1.a=t2.a);
342
# Check that the number of matched rows is correct when there are duplicate
346
select count(*) from t1 join t2 on (t1.a=t2.a);
351
# Bug #439719: Drizzle crash when running random query generator
353
CREATE TABLE t1(col1 enum('a','b') NOT NULL, col2 enum('a','b') DEFAULT NULL, KEY col2 (col2));
354
UPDATE t1 SET col1 = "crash" WHERE col2 = now() ;
360
--echo End of 5.0 tests