mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
7ffc9da093
Using CREATE OR REPLACE TABLE is be identical to DROP TABLE IF EXISTS table_name; CREATE TABLE ...; Except that: * CREATE OR REPLACE is be atomic (now one can create the same table between drop and create). * Temporary tables will not shadow the table name for the DROP as the CREATE TABLE tells us already if we are using a temporary table or not. * If the table was locked with LOCK TABLES, the new table will be locked with the same lock after it's created. Implementation details: - We don't anymore open the to-be-created table during CREATE TABLE, which the original code did. - There is no need to open a table we are planning to create. It's enough to check if the table exists or not. - Removed some of duplicated code for CREATE IF NOT EXISTS. - Give an error when using CREATE OR REPLACE with IF NOT EXISTS (conflicting options). - As a side effect of the code changes, we don't anymore have to internally re-prepare prepared statements with CREATE TABLE if the table exists. - Made one code path for all testing if log table are in use. - Better error message if one tries to create/drop/alter a log table in use - Added back disabled rpl_row_create_table test as it now seams to work and includes a lot of interesting tests. - Added HA_LEX_CREATE_REPLACE to mark if we are using CREATE OR REPLACE - Aligned CREATE OR REPLACE parsing code in sql_yacc.yy for TABLE and VIEW - Changed interface for drop_temporary_table() to make it more reusable - Changed Locked_tables_list::init_locked_tables() to work on the table object instead of the table list object. Before this it used a mix of both, which was not good. - Locked_tables_list::unlock_locked_tables(THD *thd) now requires a valid thd argument. Old usage of calling this with 0 i changed to instead call Locked_tables_list::reset() - Added functions Locked_tables_list:restore_lock() and Locked_tables_list::add_back_last_deleted_lock() to be able to easily add back a locked table to the lock list. - Added restart_trans_for_tables() to be able to restart a transaction. - DROP_ACL is required if one uses CREATE TABLE OR REPLACE. - Added drop of normal and temporary tables in create_table_imp() if CREATE OR REPLACE was used. - Added reacquiring of table locks in mysql_create_table() and mysql_create_like_table() mysql-test/include/commit.inc: With new code we get fewer status increments mysql-test/r/commit_1innodb.result: With new code we get fewer status increments mysql-test/r/create.result: Added testing of create or replace with timeout mysql-test/r/create_or_replace.result: Basic testing of CREATE OR REPLACE TABLE mysql-test/r/partition_exchange.result: New error message mysql-test/r/ps_ddl.result: Fewer reprepares with new code mysql-test/suite/archive/discover.result: Don't rediscover archive tables if the .frm file exists (Sergei will look at this if there is a better way...) mysql-test/suite/archive/discover.test: Don't rediscover archive tables if the .frm file exists (Sergei will look at this if there is a better way...) mysql-test/suite/funcs_1/r/innodb_views.result: New error message mysql-test/suite/funcs_1/r/memory_views.result: New error message mysql-test/suite/rpl/disabled.def: rpl_row_create_table should now be safe to use mysql-test/suite/rpl/r/rpl_row_create_table.result: Updated results after adding back disabled test mysql-test/suite/rpl/t/rpl_create_if_not_exists.test: Added comment mysql-test/suite/rpl/t/rpl_row_create_table.test: Added CREATE OR REPLACE TABLE test mysql-test/t/create.test: Added CREATE OR REPLACE TABLE test mysql-test/t/create_or_replace-master.opt: Create logs mysql-test/t/create_or_replace.test: Basic testing of CREATE OR REPLACE TABLE mysql-test/t/partition_exchange.test: Error number changed as we are now using same code for all log table change issues mysql-test/t/ps_ddl.test: Fewer reprepares with new code sql/handler.h: Moved things around a bit in a structure to get better alignment. Added HA_LEX_CREATE_REPLACE to mark if we are using CREATE OR REPLACE Added 3 elements to end of HA_CREATE_INFO to be able to store state to add backs locks in case of LOCK TABLES. sql/log.cc: Reimplemented check_if_log_table(): - Simpler and faster usage - Can give error messages This gives us one code path for allmost all error messages if log tables are in use sql/log.h: New interface for check_if_log_table() sql/slave.cc: More logging sql/sql_alter.cc: New interface for check_if_log_table() sql/sql_base.cc: More documentation Changed interface for drop_temporary_table() to make it more reusable Changed Locked_tables_list::init_locked_tables() to work on the table object instead of the table list object. Before this it used a mix of both, which was not good. Locked_tables_list::unlock_locked_tables(THD *thd) now requires a valid thd argument. Old usage of calling this with 0 i changed to instead call Locked_tables_list::reset() Added functions Locked_tables_list:restore_lock() and Locked_tables_list::add_back_last_deleted_lock() to be able to easily add back a locked table to the lock list. Check for command number instead of open_strategy of CREATE TABLE was used. Added restart_trans_for_tables() to be able to restart a transaction. This was needed in "create or replace ... select" between the drop table and the select. sql/sql_base.h: Added and updated function prototypes sql/sql_class.h: Added new prototypes to Locked_tables_list class Added extra argument to select_create to avoid double call to eof() or send_error() - I needed this in some edge case where the table was not created against expections. sql/sql_db.cc: New interface for check_if_log_table() sql/sql_insert.cc: Remember position to lock information so that we can reaquire table lock for LOCK TABLES + CREATE OR REPLACE TABLE SELECT. Later add back the lock by calling restore_lock(). Removed one not needed indentation level in create_table_from_items() Ensure we don't call send_eof() or abort_result_set() twice. sql/sql_lex.h: Removed variable that I temporarly added in an earlier changeset sql/sql_parse.cc: Removed old test code (marked with QQ) Ensure that we have open_strategy set as TABLE_LIST::OPEN_STUB in CREATE TABLE Removed some IF NOT EXISTS code as this is now handled in create_table_table_impl(). Set OPTION_KEEP_LOGS later. This code had to be moved as the test for IF EXISTS has changed place. DROP_ACL is required if one uses CREATE TABLE OR REPLACE. sql/sql_partition_admin.cc: New interface for check_if_log_table() sql/sql_rename.cc: New interface for check_if_log_table() sql/sql_table.cc: New interface for check_if_log_table() Moved some code in mysql_rm_table() under a common test. - Safe as temporary tables doesn't have statistics. - !is_temporary_table(table) test was moved out from drop_temporary_table() and merged with upper level code. - Added drop of normal and temporary tables in create_table_imp() if CREATE OR REPLACE was used. - Added reacquiring of table locks in mysql_create_table() and mysql_create_like_table() - In mysql_create_like_table(), restore table->open_strategy() if it was changed. - Re-test if table was a view after opening it. sql/sql_table.h: New prototype for mysql_create_table_no_lock() sql/sql_yacc.yy: Added syntax for CREATE OR REPLACE TABLE Reuse new code for CREATE OR REPLACE VIEW sql/table.h: Added name for enum type sql/table_cache.cc: More DBUG
1291 lines
39 KiB
Text
1291 lines
39 KiB
Text
DROP TABLE IF EXISTS t1, t2, t3, t, tp, tsp, tmp;
|
|
#
|
|
# Bug#11894100: EXCHANGE PARTITION CAN'T BE EXECUTED IF
|
|
# ROW_FORMAT WAS SET EXPLICITLY
|
|
#
|
|
# Same definition (both have ROW_FORMAT set)
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT=COMPACT
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 LIKE t1;
|
|
Warnings:
|
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t2 REMOVE PARTITIONING;
|
|
Warnings:
|
|
Note 1287 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT
|
|
DROP TABLE t2;
|
|
# Only the partitioned table have ROW_FORMAT set.
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS
|
|
# Only the non partitioned table have ROW_FORMAT set.
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = COMPACT;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT
|
|
# No table have ROW_FORMAT set.
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS
|
|
# Not same ROW_FORMAT as default (but same).
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = REDUNDANT
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = REDUNDANT;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Redundant
|
|
CREATE_OPTIONS row_format=REDUNDANT partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Redundant
|
|
CREATE_OPTIONS row_format=REDUNDANT
|
|
# Not same ROW_FORMAT as default (tables differs).
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = REDUNDANT;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
ERROR HY000: Non matching attribute 'ROW_FORMAT' between partition and table
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Redundant
|
|
CREATE_OPTIONS row_format=REDUNDANT
|
|
# Different than default (forced ROW_TYPE)
|
|
DROP TABLE t1, t2;
|
|
CREATE TABLE t1 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = COMPACT
|
|
PARTITION BY HASH (id)
|
|
PARTITIONS 2;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
CREATE TABLE t2 (
|
|
id int(11) NOT NULL AUTO_INCREMENT,
|
|
year year(2) DEFAULT NULL,
|
|
modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ROW_FORMAT = REDUNDANT;
|
|
Warnings:
|
|
Level Note
|
|
Code 1287
|
|
Message 'YEAR(2)' is deprecated and will be removed in a future release. Please use YEAR(4) instead
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
ERROR HY000: Non matching attribute 'ROW_FORMAT' between partition and table
|
|
SHOW CREATE TABLE t1;
|
|
Table t1
|
|
Create Table CREATE TABLE `t1` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
|
/*!50100 PARTITION BY HASH (id)
|
|
PARTITIONS 2 */
|
|
SHOW CREATE TABLE t2;
|
|
Table t2
|
|
Create Table CREATE TABLE `t2` (
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
`year` year(2) DEFAULT NULL,
|
|
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
PRIMARY KEY (`id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
|
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, CREATE_OPTIONS
|
|
FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME IN ('t1', 't2');
|
|
TABLE_NAME t1
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Compact
|
|
CREATE_OPTIONS row_format=COMPACT partitioned
|
|
TABLE_NAME t2
|
|
TABLE_TYPE BASE TABLE
|
|
ENGINE InnoDB
|
|
ROW_FORMAT Redundant
|
|
CREATE_OPTIONS row_format=REDUNDANT
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# Bug#56484: !table || (!table->read_set ||
|
|
# bitmap_is_set(table->read_set, field_index))
|
|
#
|
|
CREATE TABLE t1 (a INT NOT NULL,b TIME NOT NULL DEFAULT '00:00:00')
|
|
ENGINE=MyISAM
|
|
PARTITION BY HASH (a) PARTITIONS 2;
|
|
CREATE TABLE t2 (a INT) ENGINE=MYISAM;
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
|
ERROR HY000: Tables have different definitions
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# Bug#55784: Foreign key integrity broken by alter table
|
|
#
|
|
CREATE TABLE t1 (s1 INT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE TABLE t2 (s1 INT, FOREIGN KEY (s1) REFERENCES t1 (s1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1),(2),(3);
|
|
INSERT INTO t2 VALUES (1),(2),(3);
|
|
CREATE TABLE t3 (s1 INT PRIMARY KEY)
|
|
ENGINE=InnoDB
|
|
PARTITION BY LIST (s1)
|
|
(PARTITION p1 VALUES IN (1,2,3));
|
|
ALTER TABLE t3 EXCHANGE PARTITION p1 WITH TABLE t1;
|
|
ERROR HY000: Table to exchange with partition has foreign key references: 't1'
|
|
DROP TABLE t2, t1, t3;
|
|
# Tests for WL#4445
|
|
CREATE TABLE t (a INT,
|
|
b VARCHAR(55),
|
|
PRIMARY KEY (a))
|
|
ENGINE = MyISAM;
|
|
CREATE TABLE tp (a INT,
|
|
b VARCHAR(55),
|
|
PRIMARY KEY (a))
|
|
ENGINE = MyISAM
|
|
PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100),
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
|
CREATE TABLE tsp (a INT,
|
|
b VARCHAR(55),
|
|
PRIMARY KEY (a))
|
|
ENGINE = MyISAM
|
|
PARTITION BY RANGE (a)
|
|
SUBPARTITION BY HASH(a)
|
|
(PARTITION p0 VALUES LESS THAN (100)
|
|
(SUBPARTITION sp0,
|
|
SUBPARTITION sp1),
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
|
(SUBPARTITION sp2,
|
|
SUBPARTITION sp3));
|
|
INSERT INTO t VALUES (1, "First value"), (3, "Three"), (5, "Five"), (99, "End of values");
|
|
INSERT INTO tp VALUES (2, "First value"), (10, "Ten"), (50, "Fifty"), (200, "Two hundred, end of values"), (61, "Sixty one"), (62, "Sixty two"), (63, "Sixty three"), (64, "Sixty four"), (161, "161"), (162, "162"), (163, "163"), (164, "164");
|
|
INSERT INTO tsp VALUES (2, "First value"), (10, "Ten"), (50, "Fifty"), (200, "Two hundred, end of values"), (61, "Sixty one"), (62, "Sixty two"), (63, "Sixty three"), (64, "Sixty four"), (161, "161"), (162, "162"), (163, "163"), (164, "164");
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
10 Ten
|
|
2 First value
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
SELECT * FROM tp;
|
|
a b
|
|
1 First value
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
200 Two hundred, end of values
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
ALTER TABLE tp EXCHANGE PARTITION p1 WITH TABLE t;
|
|
ERROR HY000: Found a row that does not match the partition
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
# Test list of partitions
|
|
ALTER TABLE tp EXCHANGE PARTITION p1 WITH TABLE t IGNORE;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IGNORE' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION p0,p1 WITH TABLE t IGNORE;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'p1 WITH TABLE t IGNORE' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION p0,p1 WITH TABLE t;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'p1 WITH TABLE t' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION (p0,p1) WITH TABLE t;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(p0,p1) WITH TABLE t' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE (t,t2);
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(t,t2)' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t,t2;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 't2' at line 1
|
|
ALTER TABLE tp EXCHANGE PARTITION non_existent WITH TABLE t;
|
|
ERROR HY000: Unknown partition 'non_existent' in table 'tp'
|
|
ALTER TABLE tsp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Subpartitioned table, use subpartition instead of partition
|
|
ALTER TABLE tsp EXCHANGE PARTITION sp0 WITH TABLE tp;
|
|
ERROR HY000: Table to exchange with partition is partitioned: 'tp'
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SHOW CREATE TABLE tsp;
|
|
Table Create Table
|
|
tsp CREATE TABLE `tsp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
SUBPARTITION BY HASH (a)
|
|
(PARTITION p0 VALUES LESS THAN (100)
|
|
(SUBPARTITION sp0 ENGINE = MyISAM,
|
|
SUBPARTITION sp1 ENGINE = MyISAM),
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
|
(SUBPARTITION sp2 ENGINE = MyISAM,
|
|
SUBPARTITION sp3 ENGINE = MyISAM)) */
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
# Test exchange partition
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
10 Ten
|
|
2 First value
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
SELECT * FROM tp;
|
|
a b
|
|
1 First value
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
200 Two hundred, end of values
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
# Test exchange subpartition
|
|
ALTER TABLE tsp EXCHANGE PARTITION sp1 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tsp;
|
|
Table Create Table
|
|
tsp CREATE TABLE `tsp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
SUBPARTITION BY HASH (a)
|
|
(PARTITION p0 VALUES LESS THAN (100)
|
|
(SUBPARTITION sp0 ENGINE = MyISAM,
|
|
SUBPARTITION sp1 ENGINE = MyISAM),
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
|
(SUBPARTITION sp2 ENGINE = MyISAM,
|
|
SUBPARTITION sp3 ENGINE = MyISAM)) */
|
|
SELECT * FROM t;
|
|
a b
|
|
61 Sixty one
|
|
63 Sixty three
|
|
SELECT * FROM tsp;
|
|
a b
|
|
1 First value
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
3 Three
|
|
5 Five
|
|
50 Fifty
|
|
62 Sixty two
|
|
64 Sixty four
|
|
99 End of values
|
|
ALTER TABLE tsp EXCHANGE PARTITION sp1 WITH TABLE t;
|
|
ALTER TABLE t ENGINE = InnoDB;
|
|
ALTER TABLE tp ENGINE = InnoDB;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
|
SELECT * FROM t;
|
|
a b
|
|
1 First value
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
SELECT * FROM tp;
|
|
a b
|
|
10 Ten
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
2 First value
|
|
200 Two hundred, end of values
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
|
SELECT * FROM t;
|
|
a b
|
|
10 Ten
|
|
2 First value
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
SELECT * FROM tp;
|
|
a b
|
|
1 First value
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
200 Two hundred, end of values
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
# test different engines
|
|
ALTER TABLE t ENGINE = MyISAM;
|
|
ALTER TABLE tp ENGINE = InnoDB;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MariaDB
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
|
# Test different charsets
|
|
ALTER TABLE t ENGINE = MyISAM;
|
|
CREATE TABLE tmp LIKE t;
|
|
INSERT INTO tmp SELECT * FROM t;
|
|
RENAME TABLE t TO tmp2, tmp TO t;
|
|
ALTER TABLE tp ENGINE = MyISAM;
|
|
ALTER TABLE t CHARACTER SET = koi8r COLLATE koi8r_general_ci;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Non matching attribute 'CHARACTER SET' between partition and table
|
|
DROP TABLE t;
|
|
# Test multiple different table options
|
|
CREATE TABLE t (a INT,
|
|
b VARCHAR(55),
|
|
PRIMARY KEY (a))
|
|
ENGINE = MyISAM MAX_ROWS = 100000 MIN_ROWS = 1000;
|
|
INSERT INTO t SELECT * FROM tmp2;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MIN_ROWS=1000 MAX_ROWS=100000
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Non matching attribute 'MAX_ROWS' between partition and table
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1731 Non matching attribute 'MAX_ROWS' between partition and table
|
|
Error 1731 Non matching attribute 'MIN_ROWS' between partition and table
|
|
DROP TABLE t;
|
|
RENAME TABLE tmp2 TO t;
|
|
ALTER TABLE t ADD KEY ba_key (b, a);
|
|
ALTER TABLE tp ADD KEY ba_key (b, a);
|
|
ALTER TABLE tsp ADD KEY ba_key (b, a);
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
SELECT * FROM t;
|
|
a b
|
|
10 Ten
|
|
2 First value
|
|
50 Fifty
|
|
61 Sixty one
|
|
62 Sixty two
|
|
63 Sixty three
|
|
64 Sixty four
|
|
SELECT * FROM tp;
|
|
a b
|
|
1 First value
|
|
161 161
|
|
162 162
|
|
163 163
|
|
164 164
|
|
200 Two hundred, end of values
|
|
3 Three
|
|
5 Five
|
|
99 End of values
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ALTER TABLE t DROP KEY ba_key;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Tables have different definitions
|
|
ALTER TABLE t ADD KEY b_key (b);
|
|
ALTER TABLE tsp EXCHANGE PARTITION sp1 WITH TABLE t;
|
|
ERROR HY000: Tables have different definitions
|
|
ALTER TABLE t ADD KEY ba_key (b, a);
|
|
ALTER TABLE t DROP KEY b_key;
|
|
ALTER TABLE t CHANGE a c INT;
|
|
ALTER TABLE tsp EXCHANGE PARTITION sp1 WITH TABLE t;
|
|
ERROR HY000: Tables have different definitions
|
|
ALTER TABLE t CHANGE c a INT;
|
|
# test temporary table
|
|
ALTER TABLE t ENGINE = MyISAM;
|
|
ALTER TABLE tp ENGINE = MyISAM;
|
|
CREATE TEMPORARY TABLE tmp LIKE t;
|
|
INSERT INTO tmp SELECT * FROM t;
|
|
ALTER TABLE t RENAME TO tmp2;
|
|
ALTER TABLE tmp RENAME TO t;
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TEMPORARY TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Table to exchange with partition is temporary: 't'
|
|
SHOW CREATE TABLE t;
|
|
Table Create Table
|
|
t CREATE TEMPORARY TABLE `t` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE tp;
|
|
Table Create Table
|
|
tp CREATE TABLE `tp` (
|
|
`a` int(11) NOT NULL DEFAULT '0',
|
|
`b` varchar(55) DEFAULT NULL,
|
|
PRIMARY KEY (`a`),
|
|
KEY `ba_key` (`b`,`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (a)
|
|
(PARTITION p0 VALUES LESS THAN (100) ENGINE = MyISAM,
|
|
PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
|
DROP TEMPORARY TABLE t;
|
|
ALTER TABLE tmp2 RENAME TO t;
|
|
# Test non partitioned table
|
|
ALTER TABLE tp REMOVE PARTITIONING;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
|
DROP TABLE t, tp, tsp;
|
|
# Test with general_log
|
|
use mysql;
|
|
SET @old_general_log_state = @@global.general_log;
|
|
SET GLOBAL general_log = 0;
|
|
ALTER TABLE general_log ENGINE = MyISAM;
|
|
CREATE TABLE t LIKE general_log;
|
|
ALTER TABLE t PARTITION BY RANGE (UNIX_TIMESTAMP(event_time) DIV 1)
|
|
(PARTITION p0 VALUES LESS THAN (123456789),
|
|
PARTITION pMAX VALUES LESS THAN MAXVALUE);
|
|
ALTER TABLE t EXCHANGE PARTITION p0 WITH TABLE general_log;
|
|
ERROR HY000: You cannot 'ALTER PARTITION' a log table if logging is enabled
|
|
ALTER TABLE general_log ENGINE = CSV;
|
|
SET @@global.general_log = @old_general_log_state;
|
|
DROP TABLE t;
|
|
use test;
|
|
# Test with LOCK TABLE
|
|
CREATE TABLE tp
|
|
(a VARCHAR(24),
|
|
b DATETIME,
|
|
PRIMARY KEY (a,b))
|
|
PARTITION BY RANGE COLUMNS (a, b)
|
|
(PARTITION p0 VALUES LESS THAN ("Middle", '0000-00-00'),
|
|
PARTITION p1 VALUES LESS THAN (MAXVALUE, '9999-12-31 23:59:59'));
|
|
CREATE TABLE t LIKE tp;
|
|
ALTER TABLE t REMOVE PARTITIONING;
|
|
CREATE TABLE t2 LIKE t;
|
|
INSERT INTO tp VALUES ("First in tp", '2000-01-02 03:04:25'), ("Zebra in tp", '0000-00-00 00:00:00'), ("Second in tp", '2010-01-01 05:12:24');
|
|
INSERT INTO t VALUES ("First in t", '2000-01-02 03:04:25'), ("a test in t", '0000-00-00 00:00:00'), ("Echo in t", '2010-01-01 05:12:24');
|
|
# tp_lock '0' t_lock 'READ' t2_lock 'READ' count '17'
|
|
LOCK TABLE t READ, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
UNLOCK TABLES;
|
|
# tp_lock '0' t_lock 'WRITE' t2_lock 'READ' count '16'
|
|
LOCK TABLE t WRITE, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock '0' t2_lock 'READ' count '15'
|
|
LOCK TABLE tp READ, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock 'READ' t2_lock 'READ' count '14'
|
|
LOCK TABLE t READ, tp READ, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock 'WRITE' t2_lock 'READ' count '13'
|
|
LOCK TABLE t WRITE, tp READ, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock '0' t2_lock 'READ' count '12'
|
|
LOCK TABLE tp WRITE, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 't' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 't2' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock 'READ' t2_lock 'READ' count '11'
|
|
LOCK TABLE t READ, tp WRITE, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 't' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 't2' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock 'WRITE' t2_lock 'READ' count '10'
|
|
LOCK TABLE t WRITE, tp WRITE, t2 READ;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 't2' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock '0' t_lock '0' t2_lock 'WRITE' count '9'
|
|
LOCK TABLE t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
UNLOCK TABLES;
|
|
# tp_lock '0' t_lock 'READ' t2_lock 'WRITE' count '8'
|
|
LOCK TABLE t READ, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
UNLOCK TABLES;
|
|
# tp_lock '0' t_lock 'WRITE' t2_lock 'WRITE' count '7'
|
|
LOCK TABLE t WRITE, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 'tp' was not locked with LOCK TABLES
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock '0' t2_lock 'WRITE' count '6'
|
|
LOCK TABLE tp READ, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock 'READ' t2_lock 'WRITE' count '5'
|
|
LOCK TABLE t READ, tp READ, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'READ' t_lock 'WRITE' t2_lock 'WRITE' count '4'
|
|
LOCK TABLE t WRITE, tp READ, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 'tp' was locked with a READ lock and can't be updated
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock '0' t2_lock 'WRITE' count '3'
|
|
LOCK TABLE tp WRITE, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1100 Table 't' was not locked with LOCK TABLES
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock 'READ' t2_lock 'WRITE' count '2'
|
|
LOCK TABLE t READ, tp WRITE, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1099 Table 't' was locked with a READ lock and can't be updated
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
UNLOCK TABLES;
|
|
# tp_lock 'WRITE' t_lock 'WRITE' t2_lock 'WRITE' count '1'
|
|
LOCK TABLE t WRITE, tp WRITE, t2 WRITE;
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t2;
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
UNLOCK TABLES;
|
|
DROP TABLE t, t2, tp;
|