I'm getting an exception when creating a table with a foreign key, while a previous table creation with the same FK executes without error. The error I'm getting is:
"Can't write; duplicate key in table 'instrumentations'"
I'm using the exported 'create script' feature of MySQL Workbench. My tables, as defined in the MySQL Workbench are:
=======
"Notes":
NoteID INT (Primary Key, Not Null, Unsigned, AutoIncrement)
NoteText TEXT
"Composers":
ComposerID INT (Primary Key, Not Null, Unsigned, AutoIncrement)
ComposerName VARCHARS(50) (Not Null, Unique)
NoteID INT (Unsigned)
Foreign Key Name: 'NoteID', Ref Table: 'Notes', Column: 'NoteID', Ref Column: 'NoteID'
"Instrumentations":
Instrumentation VARCHAR(40) (Primary Key, Not Null)
ListOrder INT (Not Null, Unsigned)
NoteID INT (Unsigned)
Foreign Key Name: 'NoteID', Ref Table: 'Notes', Column: 'NoteID', Ref Column: 'NoteID'
=======
The resulting script is (essentially):
=======
USE `dbname`;
CREATE TABLE `Notes` (
`NoteID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`NoteText` TEXT NULL ,
PRIMARY KEY (`NoteID`) )
ENGINE = InnoDB;
CREATE TABLE `Composers` (
`ComposerID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`ComposerName` VARCHAR(50) NOT NULL,
`NoteID` INT UNSIGNED NULL,
PRIMARY KEY (`ComposerID`),
UNIQUE INDEX `ComposerName_UNIQUE` (`ComposerName` ASC),
INDEX `NoteID_idx` (`NoteID` ASC),
CONSTRAINT `NoteID`
FOREIGN KEY (`NoteID`)
REFERENCES `Notes` (`NoteID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE `Instrumentations` (
`Instrumentation` VARCHAR(40) NOT NULL,
`ListOrder` INT UNSIGNED NOT NULL,
`NoteID` INT UNSIGNED NULL,
INDEX `NoteID_idx` (`NoteID` ASC),
PRIMARY KEY (`Instrumentation`),
CONSTRAINT `NoteID`
FOREIGN KEY (`NoteID`)
REFERENCES `ppmstrqt`.`Notes` (`NoteID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
=======
Transferring these commands to my C# code (using the MySQL Connector NET 6.6.5), I get the following exception when trying to create the 'Instrumentations' table:
"Can't write; duplicate key in table 'instrumentations'"
However, if, instead, I use:
=======
CREATE TABLE `Instrumentations` (
`Instrumentation` VARCHAR(40) NOT NULL,
`ListOrder` INT UNSIGNED NOT NULL,
`NoteID` INT UNSIGNED NULL REFERENCES `Notes` (`NoteID`),
INDEX `NoteID_idx` (`NoteID` ASC),
PRIMARY KEY (`Instrumentation`) )
ENGINE = InnoDB;
=======
The table creation occurs without incident.
The previous table creation, 'Composers', has the exact same FK definition.
If I go back to the MySQL Workbench and redefine the 'NoteID' fields in 'Composers' and 'Instrumentations' to "ComposerNoteID" and "InstrNoteID" respectively, and use the resulting "CREATE" script info, I get the same exception in the same place.
What am I missing?
Thanks for any help you can provide.
- Roy
I'm using:
MySQL 5.6 CE
MySQL Workbench 5.2 CE
MySQL Connector Net 6.6.5
"Can't write; duplicate key in table 'instrumentations'"
I'm using the exported 'create script' feature of MySQL Workbench. My tables, as defined in the MySQL Workbench are:
=======
"Notes":
NoteID INT (Primary Key, Not Null, Unsigned, AutoIncrement)
NoteText TEXT
"Composers":
ComposerID INT (Primary Key, Not Null, Unsigned, AutoIncrement)
ComposerName VARCHARS(50) (Not Null, Unique)
NoteID INT (Unsigned)
Foreign Key Name: 'NoteID', Ref Table: 'Notes', Column: 'NoteID', Ref Column: 'NoteID'
"Instrumentations":
Instrumentation VARCHAR(40) (Primary Key, Not Null)
ListOrder INT (Not Null, Unsigned)
NoteID INT (Unsigned)
Foreign Key Name: 'NoteID', Ref Table: 'Notes', Column: 'NoteID', Ref Column: 'NoteID'
=======
The resulting script is (essentially):
=======
USE `dbname`;
CREATE TABLE `Notes` (
`NoteID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`NoteText` TEXT NULL ,
PRIMARY KEY (`NoteID`) )
ENGINE = InnoDB;
CREATE TABLE `Composers` (
`ComposerID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`ComposerName` VARCHAR(50) NOT NULL,
`NoteID` INT UNSIGNED NULL,
PRIMARY KEY (`ComposerID`),
UNIQUE INDEX `ComposerName_UNIQUE` (`ComposerName` ASC),
INDEX `NoteID_idx` (`NoteID` ASC),
CONSTRAINT `NoteID`
FOREIGN KEY (`NoteID`)
REFERENCES `Notes` (`NoteID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE `Instrumentations` (
`Instrumentation` VARCHAR(40) NOT NULL,
`ListOrder` INT UNSIGNED NOT NULL,
`NoteID` INT UNSIGNED NULL,
INDEX `NoteID_idx` (`NoteID` ASC),
PRIMARY KEY (`Instrumentation`),
CONSTRAINT `NoteID`
FOREIGN KEY (`NoteID`)
REFERENCES `ppmstrqt`.`Notes` (`NoteID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
=======
Transferring these commands to my C# code (using the MySQL Connector NET 6.6.5), I get the following exception when trying to create the 'Instrumentations' table:
"Can't write; duplicate key in table 'instrumentations'"
However, if, instead, I use:
=======
CREATE TABLE `Instrumentations` (
`Instrumentation` VARCHAR(40) NOT NULL,
`ListOrder` INT UNSIGNED NOT NULL,
`NoteID` INT UNSIGNED NULL REFERENCES `Notes` (`NoteID`),
INDEX `NoteID_idx` (`NoteID` ASC),
PRIMARY KEY (`Instrumentation`) )
ENGINE = InnoDB;
=======
The table creation occurs without incident.
The previous table creation, 'Composers', has the exact same FK definition.
If I go back to the MySQL Workbench and redefine the 'NoteID' fields in 'Composers' and 'Instrumentations' to "ComposerNoteID" and "InstrNoteID" respectively, and use the resulting "CREATE" script info, I get the same exception in the same place.
What am I missing?
Thanks for any help you can provide.
- Roy
I'm using:
MySQL 5.6 CE
MySQL Workbench 5.2 CE
MySQL Connector Net 6.6.5