mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
f4ff086abe
PROBLEMS Description:- Server variable "--lower_case_tables_names" when set to "0" on windows platform which does not support case sensitive file operations leads to problems. A warning message is printed in the error log while starting the server with "--lower_case_tables_names=0". Also according to the documentation, seting "lower_case_tables_names" to "0" on a case-insensitive filesystem might lead to index corruption. Analysis:- The problem reported in the bug is:- Creating an INNODB table 'a' and executing a query, "INSERT INTO a SELECT a FROM A;" on a server started with "--lower_case_tables_names=0" and running on a case-insensitive filesystem leads innodb to flat spin. Optimizer thinks that "a" and "A" are two different tables as the variable "lower_case_table_names" is set to "0". As a result, optimizer comes up with a plan which does not need a temporary table. If the same table is used in select and insert, a temporary table is needed. This incorrect optimizer plan leads to infinite insertions. Fix:- If the server is started with "--lower_case_tables_names" set to 0 on a case-insensitive filesystem, an error, "The server option 'lower_case_table_names'is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode.", is printed in the server error log and the server exits.
43 lines
1.3 KiB
Text
43 lines
1.3 KiB
Text
#
|
|
# Bug #13083023 - 60229: BROKEN COMPATIBILITY: ERROR WHILE CREATE TABLE
|
|
# WITH FOREIGN KEY CONSTRAINT.
|
|
|
|
#Server variable option 'lower_case_table_names' sets '0' as default value
|
|
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
|
#insensitive filsystem is not allowed.
|
|
-- source include/have_case_sensitive_file_system.inc
|
|
-- source include/have_innodb.inc
|
|
|
|
CREATE TABLE PERSON (
|
|
PERSON_ID VARCHAR(50) NOT NULL,
|
|
DOB VARCHAR(50) NOT NULL,
|
|
NAME NVARCHAR(255) NOT NULL,
|
|
CONSTRAINT PK_PERSON PRIMARY KEY (PERSON_ID, DOB)
|
|
)Engine=InnoDB;
|
|
|
|
|
|
CREATE TABLE PHOTO (
|
|
PERSON_ID VARCHAR(50) NOT NULL,
|
|
DOB VARCHAR(50) NOT NULL,
|
|
PHOTO_DETAILS VARCHAR(50) NULL,
|
|
CONSTRAINT PK_PHOTO PRIMARY KEY (PERSON_ID, DOB),
|
|
CONSTRAINT FK_PHOTO_2_PERSON FOREIGN KEY (PERSON_ID, DOB) REFERENCES PERSON (PERSON_ID, DOB)
|
|
)Engine=InnoDB;
|
|
|
|
|
|
CREATE TABLE ADDRESS (
|
|
PERSON_ID VARCHAR(50) NOT NULL,
|
|
DOB VARCHAR(50) NOT NULL,
|
|
ADDRESS_ID VARCHAR(50) NOT NULL,
|
|
ADDRESS_DETAILS NVARCHAR(250) NULL,
|
|
CONSTRAINT PK_ADDRESS PRIMARY KEY (PERSON_ID, DOB, ADDRESS_ID),
|
|
CONSTRAINT FK_ADDRESS_2_PERSON FOREIGN KEY (PERSON_ID, DOB) REFERENCES PERSON (PERSON_ID, DOB) ON DELETE CASCADE
|
|
)Engine=InnoDB;
|
|
|
|
INSERT INTO PERSON VALUES("10", "11011999", "John");
|
|
INSERT INTO PHOTO VALUES("10", "11011999", "new photo");
|
|
|
|
DROP TABLE PHOTO;
|
|
DROP TABLE ADDRESS;
|
|
DROP TABLE PERSON;
|
|
|