Frage

Ich ringe mit MySQL Administrator versucht, den Primärschlüssel für eine Tabelle zu ändern. Es würde nicht lassen Sie mich so foureign Schlüssel ich löschen und die Tabelle, groß kein Problem umbenennen.

Ich habe gelöscht nun die Original-Tabelle t_order_items aber ich kann nicht t_order_items2 zu t_order_items umbenennen, schlägt mit einem 150-Fehler.

Also dachte ich, ich würde die Aussage erstellen Handwerk und es nur für den Fall von Administrator das Problem war. Die folgenden erstellen abgetan versagt, aber nur, wenn die Tabelle t_order_items einem anderen Namen genannt wird und es succededs:

DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Wenn ich überprüfen Sie die Ausgabe von SHOW ENGINE BDB STATUS;

Ich erhalte den folgenden FOREIGN KEY ERROR Bericht, der die richtige Zeit für den Einsatz, sondern Referenzen Fremdschlüssel aus der alten (original) Tabelle, die gelöscht wurde, und bin nicht auf diesem Skript erstellen.

Fehler in Fremdschlüssel der Tabelle Web2Print / t_order_items: gibt es in der Tabelle kein Index, enthalten würde die Säulen als die ersten Spalten oder die Datentypen in der Tabelle passen nicht die, die in der referenzierten Tabelle oder einer der ON ... SET NULL-Spalten wird NOT NULL deklariert. Zwang: .   CONSTRAINT "FK_t_order_items_1" Fremdschlüssel ( "orderID") LITERATUR "t_orders" ( "orderID") ON DELETE CASCADE ON UPDATE CASCADE

Es sind keine Fremdschlüssel auf dem Tisch? sie gelöscht wurden.

Die folgenden Werke

 SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;

Aber warum muss ich das tun?

Vielen Dank für jede Rückmeldung

War es hilfreich?

Lösung

Sie haben Einschränkungen zwischen t_order_items und t_orders, die zur Validierung der versuchten. Man mußte sich zuerst deaktivieren, bevor Sie die Tabelle löschen. Das ist gut, weil es Sie und Ihre Daten schützt. Die Fremdschlüssel wurden möglicherweise gelöscht, aber die Einschränkungen nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top