#
# Show what happens during ALTER TABLE when an existing file
# exists in the target location.
#
# Bug #19218794 : IF TABLESPACE EXISTS, CAN'T CREATE TABLE,
# BUT CAN ALTER ENGINE=INNODB
#
CREATE TABLE t1 (a SERIAL, b CHAR(10 )) ENGINE=Memory;
INSERT INTO t1(b) VALUES('one' ), ('two' ), ('three' );
#
# Create a file called MYSQLD_DATADIR/test/t1.ibd
# Directory listing of test/*.ibd
#
t1 . ibd
ALTER TABLE t1 ENGINE = InnoDB ;
ERROR HY000 : Error on rename of ' OLD_FILE_NAME ' to ' NEW_FILE_NAME ' ( errno : 184 " Tablespace already exists " )
#
# Move the file to InnoDB as t2
#
ALTER TABLE t1 RENAME TO t2 , ENGINE = INNODB ;
SHOW CREATE TABLE t2 ;
Table Create Table
t2 CREATE TABLE ` t2 ` (
` a ` bigint ( 20 ) unsigned NOT NULL AUTO_INCREMENT ,
` b ` char ( 10 ) DEFAULT NULL ,
UNIQUE KEY ` a ` ( ` a ` )
) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_uca1400_ai_ci
SELECT * from t2 ;
a b
1 one
2 two
3 three
ALTER TABLE t2 RENAME TO t1 ;
ERROR HY000 : Error on rename of ' OLD_FILE_NAME ' to ' NEW_FILE_NAME ' ( errno : 184 " Tablespace already exists " )
#
# Create another t1 , but in the system tablespace .
#
SET GLOBAL innodb_file_per_table = OFF ;
Warnings :
Warning 1287 ' @ @ innodb_file_per_table ' is deprecated and will be removed in a future release
CREATE TABLE t1 ( a SERIAL , b CHAR ( 20 ) ) ENGINE = InnoDB ;
INSERT INTO t1 ( b ) VALUES ( ' one ' ) , ( ' two ' ) , ( ' three ' ) ;
SHOW CREATE TABLE t1 ;
Table Create Table
t1 CREATE TABLE ` t1 ` (
` a ` bigint ( 20 ) unsigned NOT NULL AUTO_INCREMENT ,
` b ` char ( 20 ) DEFAULT NULL ,
UNIQUE KEY ` a ` ( ` a ` )
) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_uca1400_ai_ci
SELECT name , space = 0 FROM information_schema . innodb_sys_tables WHERE name = ' test / t1 ' ;
name space = 0
test / t1 1
#
# ALTER TABLE from system tablespace to system tablespace
#
ALTER TABLE t1 ADD COLUMN c INT , ALGORITHM = INPLACE ;
ALTER TABLE t1 ADD COLUMN d INT , ALGORITHM = COPY ;
#
# Try to move t1 from the system tablespace to a file - per - table
# while a blocking t1 . ibd file exists .
#
SET GLOBAL innodb_file_per_table = ON ;
Warnings :
Warning 1287 ' @ @ innodb_file_per_table ' is deprecated and will be removed in a future release
ALTER TABLE t1 FORCE , ALGORITHM = INPLACE ;
ERROR HY000 : Tablespace for table ' test / # sql - ib ' exists . Please DISCARD the tablespace before IMPORT
ALTER TABLE t1 FORCE , ALGORITHM = COPY ;
ERROR HY000 : Error on rename of ' OLD_FILE_NAME ' to ' NEW_FILE_NAME ' ( errno : 184 " Tablespace already exists " )
#
# Delete the blocking file called MYSQLD_DATADIR / test / t1 . ibd
# Move t1 to file - per - table using ALGORITHM = INPLACE with no blocking t1 . ibd .
#
ALTER TABLE t1 FORCE , ALGORITHM = INPLACE ;
SHOW CREATE TABLE t1 ;
Table Create Table
t1 CREATE TABLE ` t1 ` (
` a ` bigint ( 20 ) unsigned NOT NULL AUTO_INCREMENT ,
` b ` char ( 20 ) DEFAULT NULL ,
` c ` int ( 11 ) DEFAULT NULL ,
` d ` int ( 11 ) DEFAULT NULL ,
UNIQUE KEY ` a ` ( ` a ` )
) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_uca1400_ai_ci
SELECT name , space = 0 FROM information_schema . innodb_sys_tables WHERE name = ' test / t1 ' ;
name space = 0
test / t1 0
DROP TABLE t1 ;
#
# Rename t2 . ibd to t1 . ibd .
#
ALTER TABLE t2 RENAME TO t1 ;
SELECT name , space = 0 FROM information_schema . innodb_sys_tables WHERE name = ' test / t1 ' ;
name space = 0
test / t1 0
SELECT * from t1 ;
a b
1 one
2 two
3 three
DROP TABLE t1 ;
Warnings :
Warning 1287 ' @ @ innodb_file_per_table ' is deprecated and will be removed in a future release
Messung V0.5 in Prozent C=75 H=100 G=88
¤ Dauer der Verarbeitung: 0.25 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland