2014-08-27 3 views
1

에서이 데이터베이스를 엔지니어링 할 수 없습니다,하지만 난 메시지가 계속 :앞으로 MySQL의 워크 벤치 내가 스키마 엔지니어 전달하기 위해 노력하고있어 사용 MySQL의 워크 벤치

ERROR: Error 1022: Can't write; duplicate key in table 'tbl_banner_ad'

나는 비슷한 문제를 검토 한 결과를하지만 모든 솔루션을 말한다 이것을 삭제하거나 삭제하지만, 데이터베이스가 어떻게 작동하는지에 영향을주는 무언가를 삭제하고 싶지는 않습니다.

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

-- ----------------------------------------------------- 
-- Schema ibn_db 
-- ----------------------------------------------------- 
DROP SCHEMA IF EXISTS `ibn_db` ; 
CREATE SCHEMA IF NOT EXISTS `ibn_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci   ; 
USE `ibn_db` ; 

-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_users` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_users` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_users` (
    `_id` INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(80) NOT NULL, 
    `email` VARCHAR(255) NOT NULL, 
    `address_building` VARCHAR(80) NULL, 
    `address_street` VARCHAR(80) NOT NULL, 
    `address_city` VARCHAR(80) NOT NULL, 
    `address_county` VARCHAR(80) NULL, 
    `address_postcode` VARCHAR(13) NOT NULL, 
    `address_country` VARCHAR(80) NULL, 
    `is_admin` TINYINT(1) NOT NULL DEFAULT 0, 
    `phone` VARCHAR(15) NOT NULL, 
    `company` VARCHAR(80) NULL, 
    `banned` TINYINT(1) NOT NULL DEFAULT 0, 
    `ban_reason` VARCHAR(160) NULL, 
    `ban_expiry_date` DATETIME NULL, 
    `password` VARCHAR(128) NOT NULL, 
    `salt` VARCHAR(128) NOT NULL, 
    `joined_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `last_modified_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE  CURRENT_TIMESTAMP, 
    PRIMARY KEY (`_id`), 
    UNIQUE INDEX `email_UNIQUE` (`email` ASC)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_unauthorized_users` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_unauthorized_users` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_unauthorized_users` (
    `_id` INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, 
    `email` VARCHAR(255) NOT NULL, 
    `password` VARCHAR(128) NOT NULL, 
    `salt` VARCHAR(128) NOT NULL, 
    `activation_hash` VARCHAR(128) NOT NULL, 
    `created_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`_id`),  
    UNIQUE INDEX `email_UNIQUE` (`email` ASC), 
    UNIQUE INDEX `activation_hash_UNIQUE` (`activation_hash` ASC)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_events` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_events` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_events` (
    `_id` INT ZEROFILL UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(80) NOT NULL, 
    `description` MEDIUMTEXT NULL, 
    `start_datetime` DATETIME NOT NULL, 
    `end_datetime` DATETIME NOT NULL, 
    `created_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `last_modified_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `address_building` VARCHAR(80) NULL, 
    `address_street` VARCHAR(80) NOT NULL, 
    `address_city` VARCHAR(80) NOT NULL, 
    `address_county` VARCHAR(80) NULL, 
    `address_postcode` VARCHAR(13) NOT NULL, 
    `address_country` VARCHAR(80) NULL, 
    `image_url` VARCHAR(255) NULL, 
    PRIMARY KEY (`_id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_payments` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_payments` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_payments` (
    `_id` INT ZEROFILL UNSIGNED NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`_id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_attendee` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_attendee` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_attendee` (
    `_id` INT ZEROFILL UNSIGNED NOT NULL AUTO_INCREMENT, 
    `user_id` INT UNSIGNED NOT NULL, 
    `event_id` INT UNSIGNED NOT NULL, 
    `payment_id` INT UNSIGNED NOT NULL, 
    `created_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`_id`), 
    INDEX `user_id_idx` (`user_id` ASC), 
    INDEX `event_id_idx` (`event_id` ASC), 
    INDEX `payment_id_idx` (`payment_id` ASC), 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `event_id` 
    FOREIGN KEY (`event_id`) 
    REFERENCES `ibn_db`.`tbl_events` (`_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `payment_id` 
    FOREIGN KEY (`payment_id`) 
    REFERENCES `ibn_db`.`tbl_payments` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_banner_ad` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_banner_ad` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_banner_ad` (
    `_id` INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, 
    `user_id` INT UNSIGNED NOT NULL, 
    `payment_id` INT UNSIGNED NOT NULL, 
    `url` VARCHAR(255) NOT NULL, 
    `width` INT UNSIGNED NOT NULL, 
    `height` INT UNSIGNED NOT NULL, 
    `created_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`_id`), 
    INDEX `user_id_idx` (`user_id` ASC), 
    INDEX `payment_id_idx` (`payment_id` ASC), 
    CONSTRAINT `payment_id` 
    FOREIGN KEY (`payment_id`) 
    REFERENCES `ibn_db`.`tbl_payments` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_reviews` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_reviews` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_reviews` (
    `_id` INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, 
    `user_id` INT UNSIGNED NOT NULL, 
    `event_id` INT UNSIGNED NOT NULL, 
    `comment` VARCHAR(255) NULL, 
    `stars` INT NULL, 
    PRIMARY KEY (`_id`), 
    INDEX `user_id_idx` (`user_id` ASC), 
    INDEX `event_id_idx` (`event_id` ASC), 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE NO ACTION  
    ON UPDATE NO ACTION, 
    CONSTRAINT `event_id` 
    FOREIGN KEY (`event_id`) 
    REFERENCES `ibn_db`.`tbl_events` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `ibn_db`.`tbl_login_attempts` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `ibn_db`.`tbl_login_attempts` ; 

CREATE TABLE IF NOT EXISTS `ibn_db`.`tbl_login_attempts` (
    `_id` INT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, 
    `user_id` INT UNSIGNED NOT NULL, 
    `time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `ip` VARCHAR(45) NOT NULL, 
    `success` TINYINT(1) NOT NULL, 
    `fail_reason` VARCHAR(160) NULL, 
    PRIMARY KEY (`_id`), 
    INDEX `user_id_idx` (`user_id` ASC), 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

편집 : 내 SQL에서

아래 사람이 내가 그이 오류를 제거 얻을 것이다 할 필요가 있지만, 그런 어떤 참조 무결성 또는 아무것도 제거하지 않습니다 무엇을 말해 줄 수 내가 ' INDEX 문을 tbl_banner_ads에서 삭제하려고 시도했지만 인덱스가 외래 키의 일부이기 때문에 삭제할 수 없습니다.

+0

.. 중복 http://stackoverflow.com/questions/23954131/mysql-error-1022-23000-cant-write-duplicate-key-in-table-sql-2b8-2? – SchmitzIT

+0

그것은 같은 문제이지만, 질문이 중복되었습니다.이 특정 SQL 블록에 대한 도움을 요청하고 있습니다. – Adam

+0

여전히 같은 문제가 있습니다. 연결된 질문에서 오류 메시지에 언급 된 테이블의 외래 키 이름을 변경하는 것이 좋습니다. 귀하의 경우,'tbl_attendees'의'CREATE'에서 이미 생성 한'user_id' FK가 될 것입니다. 마찬가지로,'payment_id'도 마찬가지입니다. – SchmitzIT

답변

3

tbl_banner_ad에 대해 CREATE을 시도하고 변경하십시오.

CONSTRAINT `payment_id` 
    FOREIGN KEY (`payment_id`) 
    REFERENCES `ibn_db`.`tbl_payments` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 

에 :이 부분 변경 또는

CONSTRAINT `payment_id1` 
    FOREIGN KEY (`payment_id`) 
    REFERENCES `ibn_db`.`tbl_payments` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `user_id1` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `ibn_db`.`tbl_users` (`_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 

을 (당신은 부모와 자식 테이블 이름뿐만 아니라 columnn-이름을 모두 반영하기 위해 제약 조건의 이름을 수있는 즉 tbl_payment_tbl_banner_ad_payment_id

관련 문제