Ralat Kunci Pendua dalam Perintah CREATE TABLE
S1. Ralat 1022: Tidak boleh menulis; kunci pendua dalam jadual
Saya mengalami ralat 1022 semasa melaksanakan arahan CREATE TABLE disebabkan oleh kunci pendua. Saya telah menyemak pertanyaan, tetapi saya tidak dapat mengenal pasti puncanya.
Pertanyaan:
CREATE TABLE IF NOT EXISTS `apptwo`.`usercircle` ( `idUserCircle` MEDIUMINT NOT NULL , `userId` MEDIUMINT NULL , `circleId` MEDIUMINT NULL , `authUser` BINARY NULL , `authOwner` BINARY NULL , `startDate` DATETIME NULL , `endDate` DATETIME NULL , PRIMARY KEY ( `idUserCircle` ) , INDEX `iduser_idx` ( `userId` ASC ) , INDEX `idcategory_idx` ( `circleId` ASC ) , CONSTRAINT `iduser` FOREIGN KEY ( `userId` ) REFERENCES `apptwo`.`user` ( `idUser` ) ON DELETE NO ACTION ON UPDATE NO ACTION , CONSTRAINT `idcategory` FOREIGN KEY ( `circleId` ) REFERENCES `apptwo`.`circle` ( `idCircle` ) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE = INNODB;
S2. Di manakah pertindihan berlaku?
A1. Konflik Nama Kekangan
Ralat mungkin berpunca daripada nama kekangan pendua. Kekangan mestilah unik merentas keseluruhan pangkalan data, bukan hanya dalam jadual tertentu.
Dalam kes ini, nampaknya sudah ada kekangan yang dinamakan iduser dan/atau idcategory dalam pangkalan data. Menamakan semula kekangan ini akan menyelesaikan isu ini.
S3. Bagaimanakah saya boleh mengenal pasti kekangan sedia ada?
A2. Pertanyaan untuk Mengesan Kekangan
Untuk mengenal pasti tempat kekangan sedang digunakan, laksanakan pertanyaan berikut:
SELECT `TABLE_SCHEMA`, `TABLE_NAME` FROM `information_schema`.`KEY_COLUMN_USAGE` WHERE `CONSTRAINT_NAME` IN ('iduser', 'idcategory');
Pertanyaan ini akan mengembalikan nama skema dan jadual di mana kekangan digunakan .
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Kunci Pendua Semasa Mencipta Jadual MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!