ho creato la tavola da script:errore "Impossibile creare la tabella ..." su come aggiungere FOREIGN KEY
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
DROP TABLE IF EXISTS `Table1`;
CREATE TABLE IF NOT EXISTS `Table1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`parentId` bigint(20) DEFAULT NULL,
`name` varchar(1024) NOT NULL,
`description` varchar(16384) NOT NULL DEFAULT '',
`imageId` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(255)),
KEY `parentId` (`parentId`),
KEY `imageId` (`imageId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
INSERT INTO `Table1` (`id`, `parentId`, `name`, `description`, `imageId`) VALUES
(0, NULL, 'name1', '', NULL),
(12, 0, 'name2', '', NULL);
Poi cerco di aggiungere chiave esterna:
ALTER TABLE `Table1`
ADD CONSTRAINT `Table1_ibfk_2`
FOREIGN KEY (`parentId`) REFERENCES `Table1` (`id`);
e ottenere il seguente errore:
ERROR 1005 (HY000): Can't create table 'sandbox.#sql-c28_4c' (errno: 150)
Cosa c'è che non va?
corro
SHOW ENGINE INNODB STATUS;
Non ultimo errore FOREIGN KEY segue:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110504 22:06:55 Error in foreign key constraint of table sandbox/#sql-c28_61:
FOREIGN KEY (`parentId`) REFERENCES `Table1` (`id`):
Cannot resolve table name close to:
(`id`)
------------
Ma non mi aiuta a capire ciò che è sbagliato.
Io uso Windows Vista, MySql 5.5.11
UPDATE:
Il problema appare quando l'aggiornamento da MySql 5.0.67.
Siamo spiacenti, ma la tua risposta corretta non è corretta :) Io uso lower_case_table_names = 0, inoltre voglio avere http://bugs.mysql.com/bug.php?id=55222 corretto. E ancora di più: tutto funziona perfettamente con MySql 5.1.56. Downgrade. Nei nomi di file windows non fa distinzione tra maiuscole e minuscole, ma esistono tabelle interne di mysql che memorizzano altri nomi di tabelle e possono essere trattati con distinzione tra maiuscole e minuscole a seconda del valore lower_case_table_names – sergtk
@sergdev, Da documenti: i nomi di tabelle e database vengono archiviati su disco utilizzando il lettera maiuscola specificata nell'istruzione CREATE TABLE o CREATE DATABASE. I confronti tra nomi sono case sensitive. Non si dovrebbe impostare questa variabile su 0 se si sta eseguendo MySQL su un sistema con nomi di file maiuscole e minuscole (come Windows o Mac OS X). Se si impone questa variabile a 0 con --lower-case-table-names = 0 su un file system senza distinzione tra maiuscole e minuscole e si accede a nomi di tabelle MyISAM utilizzando diverse lettere maiuscole, potrebbe verificarsi un danneggiamento dell'indice. ** ** assomiglia alle impostazioni: ** ' lower_case_table_names = 0' ** è il problema ** – Johan