Saya memiliki masalah dengan forward engineering
database MySQL saya ke server WAMP .. Saya akan memposting gambar skema tetapi karena ini adalah posting pertama saya, saya tidak bisa.
Di bawah ini adalah skrip yang dieksekusi ..
use aquaticstar;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Table `Students`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Students` ;
CREATE TABLE IF NOT EXISTS `Students` (
`id` VARCHAR(10) NOT NULL ,
`studentName` VARCHAR(45) NOT NULL ,
`gender` CHAR NOT NULL ,
`birthDate` DATETIME NOT NULL ,
`mNo` VARCHAR(10) NOT NULL ,
`contactName` VARCHAR(45) NOT NULL ,
`contactEmail` VARCHAR(45) NOT NULL ,
`contactPhone` INT(10) NOT NULL ,
`startDate` DATETIME NOT NULL ,
`remarks` VARCHAR(200) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Waiting List`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Waiting List` ;
CREATE TABLE IF NOT EXISTS `Waiting List` (
`wait_id` VARCHAR(5) NOT NULL ,
`name` VARCHAR(45) NULL ,
`contactName` VARCHAR(45) NULL ,
`contactPhone` INT(10) NULL ,
`contactEmail` VARCHAR(45) NULL ,
`status` CHAR NULL ,
`remarks` VARCHAR(200) NULL ,
PRIMARY KEY (`wait_id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Schedule`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Schedule` ;
CREATE TABLE IF NOT EXISTS `Schedule` (
`lesson_id` VARCHAR(10) NOT NULL ,
`day` VARCHAR(3) NOT NULL ,
`branch` VARCHAR(30) NOT NULL ,
`level` VARCHAR(30) NOT NULL ,
`time` TIME NOT NULL ,
`ae` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`lesson_id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Link`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Link` ;
CREATE TABLE IF NOT EXISTS `Link` (
`link_id` VARCHAR(10) NOT NULL ,
`id` VARCHAR(10) NOT NULL ,
`lesson_id` VARCHAR(10) NOT NULL ,
PRIMARY KEY (`link_id`) ,
INDEX `id_idx` (`id` ASC) ,
INDEX `lesson_id_idx` (`lesson_id` ASC) ,
CONSTRAINT `id`
FOREIGN KEY (`id` )
REFERENCES `Students` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `lesson_id`
FOREIGN KEY (`lesson_id` )
REFERENCES `Schedule` (`lesson_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Attendance`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Attendance` ;
CREATE TABLE IF NOT EXISTS `Attendance` (
`date` DATETIME NOT NULL ,
`attendance` VARCHAR(5) NOT NULL ,
`link_id` VARCHAR(10) NOT NULL ,
INDEX `link_id_idx` (`link_id` ASC) ,
CONSTRAINT `link_id`
FOREIGN KEY (`link_id` )
REFERENCES `Link` (`link_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
-- -----------------------------------------------------
-- Data for table `Students`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s001', 'Sam Khew', 'm', '12/12/1991', 'nm', 'May Khew', '[email protected]', 0198829387, '12/07/2011', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s002', 'Joe Biden', 'm', '13/03/2003', 'nm', 'Layla Biden', '[email protected]', 0199283763, '14/05/2011', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s003', 'Bob Builder', 'm', '14/02/2002', 'LK920K', 'Mama Builder', '[email protected]', 0167728376, '29/02/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s004', 'Kenny Koh', 'm', '18/02/1999', 'MM992', 'Lisa Koh', '[email protected]', 0123160231, '19/01/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s005', 'Jane Doe', 'f', '29/09/1999', 'nm', 'Jackie Doe', '[email protected]', 0127736254, '02/03/2012', NULL);
INSERT INTO `Students` (`id`, `studentName`, `gender`, `birthDate`, `mNo`, `contactName`, `contactEmail`, `contactPhone`, `startDate`, `remarks`) VALUES ('s006', 'Lola Lai', 'f', '02/05/2004', 'nm', 'Mark Lai', '[email protected]', 0198827365, '11/09/2011', NULL);
COMMIT;
-- -----------------------------------------------------
-- Data for table `Schedule`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s4', 'Sat', 'Sunway', 'basic', '4pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s5', 'Sat', 'Sunway', 'basic', '5pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat1_s6', 'Sat', 'Sunway', 'basic', '6pm', 'Aini');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat2_s4', 'Sat', 'Sunway', 'advance', '4pm', 'Nina');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat2_s5', 'Sat', 'Sunway', 'advance', '5pm', 'Nina');
INSERT INTO `Schedule` (`lesson_id`, `day`, `branch`, `level`, `time`, `ae`) VALUES ('sat3_s6', 'Sat', 'Sunway', 'pre-comp', '6pm', 'Marcus');
COMMIT;
-- -----------------------------------------------------
-- Data for table `Link`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L001', 's001', 'sat1_s4');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L002', 's002', 'sat1_s5');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L003', 's003', 'sat1_s6');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L004', 's004', 'sat2_s4');
INSERT INTO `Link` (`link_id`, `id`, `lesson_id`) VALUES ('L005', 's005', 'sat1_s5');
COMMIT;
-- -----------------------------------------------------
-- Data for table `Attendance`
-- -----------------------------------------------------
START TRANSACTION;
INSERT INTO `Attendance` (`date`, `attendance`, `link_id`) VALUES ('26/9/2012', '1', NULL);
COMMIT;
Tapi kemudian saya mendapatkan kesalahan ini:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'aquaticstar.link' (errno: 121)
Saya tidak tahu mengapa. Ada yang bisa bantu saya?
LATEST FOREIGN KEY ERROR
bagianstatus
kolom saat Anda menjalankan perintah status INNODB.Jawaban:
Aku mencarimu dengan cepat, dan itu membawaku ke sini . Saya mengutip:
Untuk memeriksa batasan, gunakan kueri SQL berikut:
Cari informasi lebih lanjut di sana, atau coba lihat di mana kesalahan terjadi. Sepertinya ada masalah dengan kunci asing bagi saya.
sumber
Nama Batasan Kunci Asing Harus Unik Dalam Database
Baik jawaban @ Dorvalla dan posting blog yang disebutkan di atas ini mengarahkan saya ke arah yang benar untuk memperbaiki masalah untuk diri saya sendiri; mengutip dari yang terakhir:
Saya tidak menyadarinya. Saya telah mengubah nama batasan kunci asing saya sesuai dengan skema berikut yang tampaknya juga digunakan oleh aplikasi Ruby on Rails:
Untuk tabel OP ini akan menjadi
Link_lession_id_fk
, misalnya.sumber
Anda dapat login ke mysql dan mengetik
Anda akan memiliki semua output dan Anda harus memiliki gagasan yang lebih baik tentang apa kesalahannya.
sumber
SHOW ENGINE INNODB STATUS
. Dan itu harus dijalankan segera setelah mendapatkan kesalahan untuk mendapatkan info yang relevan.Jika Anda memiliki definisi kunci asing di beberapa tabel dan nama kunci asing digunakan di tempat lain sebagai kunci asing lain, Anda akan mengalami kesalahan ini.
sumber
Saya menghadapi kesalahan ini (errno 121) tetapi itu disebabkan oleh tabel perantara yang dibuat mysql yang telah menjadi yatim piatu, mencegah saya mengubah tabel meskipun tidak ada nama batasan seperti itu di salah satu tabel saya. Pada titik tertentu, MySQL saya macet atau gagal membersihkan tabel perantara (nama tabel yang dimulai dengan # sql-) yang akhirnya memberi saya kesalahan seperti: Tidak dapat membuat tabel '# sql-' (errno 121) saat mencoba menjalankan ALTER TABLE dengan nama batasan tertentu.
Menurut dokumen di http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html , Anda dapat mencari tabel yatim piatu ini dengan:
Versi yang saya gunakan adalah 5.1, tetapi perintah di atas hanya berfungsi pada versi> = 5.6 (manual salah tentang ini berfungsi untuk 5.5 atau sebelumnya, karena INNODB_SYS_TABLES tidak ada dalam versi seperti itu). Saya dapat menemukan tabel sementara yatim piatu (yang tidak cocok dengan yang disebutkan dalam pesan) dengan mencari direktori data mysql saya di baris perintah:
Setelah menemukan nama file, seperti # sql-9ad_15.frm, saya dapat menghapus tabel yatim piatu itu di MySQL:
Setelah melakukannya, saya kemudian dapat menjalankan ALTER TABLE saya dengan sukses.
Untuk kelengkapan, sesuai dengan dokumentasi MySQL yang ditautkan, "awalan # mysql50 # memberi tahu MySQL untuk mengabaikan pengodean aman nama file yang diperkenalkan di MySQL 5.1."
sumber
Jika Anda ingin memperbaiki dengan cepat, Teruskan Engineer lagi dan centang opsi "Hasilkan SKEMA LEPAS" dan lanjutkan.
Saya berasumsi bahwa database tidak berisi data, jadi menghapusnya tidak akan berpengaruh.
sumber
Sesuatu yang saya perhatikan adalah bahwa saya memiliki "other_database" dan "Other_Database" di database saya. Itu menyebabkan masalah ini karena saya sebenarnya memiliki referensi yang sama di database lain yang menyebabkan kesalahan misterius ini!
sumber
Tapi dalam kasus saya hanya cara ini yang bisa membantu:
1. Membuat backup DB saat ini
2. Drop DB (tidak semua tabel, tapi DB)
3. Membuat DB (periksa apakah Anda masih memiliki hak)
4. Pulihkan DB dari backup
sumber