diff options
-rw-r--r-- | mysql-test/r/delete.result | 10 | ||||
-rw-r--r-- | mysql-test/t/delete.test | 11 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
3 files changed, 23 insertions, 1 deletions
diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result index f1acc5d2dfa..c6b7a40214d 100644 --- a/mysql-test/r/delete.result +++ b/mysql-test/r/delete.result @@ -120,3 +120,13 @@ a b 0 10 1 11 drop table t11, t12, t2; +create table t1 (a int, b int, unique key (a), key (b)); +insert into t1 values (3, 3), (7, 7); +delete t1 from t1 where a = 3; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +select * from t1; +a b +7 7 +drop table t1; diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test index e370b545eff..56c8ce77627 100644 --- a/mysql-test/t/delete.test +++ b/mysql-test/t/delete.test @@ -98,3 +98,14 @@ select * from t11; delete ignore from t11 where t11.b <> (select b from t2 where t11.a < t2.a); select * from t11; drop table t11, t12, t2; + +# +# Bug #4198: deletion and KEYREAD +# + +create table t1 (a int, b int, unique key (a), key (b)); +insert into t1 values (3, 3), (7, 7); +delete t1 from t1 where a = 3; +check table t1; +select * from t1; +drop table t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b32cb228c72..d6e76ce81d8 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5972,7 +5972,8 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos) else { if (!table->key_read && table->used_keys.is_set(tab->ref.key) && - !table->no_keyread) + !table->no_keyread && + (int) table->reginfo.lock_type <= (int) TL_READ_HIGH_PRIORITY) { table->key_read=1; table->file->extra(HA_EXTRA_KEYREAD); |