2013-02-11 2 views
1

저는 MySQL Server 5.5를 사용합니다. MySQL Workbench 5.2 CE; WinXp SP3;MySQL, 참조 무결성이 작동하지 않습니다.

CREATE TABLE IF NOT EXISTS `mydb`.`Address` (
    `AddressID` INT NOT NULL AUTO_INCREMENT , 
    `Country` VARCHAR(45) NOT NULL , 
    `City` VARCHAR(45) NOT NULL , 
    `Region` VARCHAR(45) NOT NULL , 
    `PostalCode` VARCHAR(12) NOT NULL , 
    `Address1` VARCHAR(100) NOT NULL , 
    PRIMARY KEY (`AddressID`)) 
ENGINE = InnoDB; 


CREATE TABLE IF NOT EXISTS `mydb`.`Customers` (
    `CustomerID` INT NOT NULL AUTO_INCREMENT , 
    `FirstName` VARCHAR(45) NOT NULL , 
    `LastName` VARCHAR(45) NOT NULL , 
    `Email` VARCHAR(500) NOT NULL , 
    `Password` VARCHAR(500) NOT NULL , 
    `RegistrationDate` TIMESTAMP NULL , 
    `CustomerCellPhone` VARCHAR(20) NULL , 
    `AddressID` INT NULL , 
    PRIMARY KEY (`CustomerID`) , 
    INDEX `AddressID_idx` (`AddressID` ASC) , 
    UNIQUE INDEX `Email_UNIQUE` (`Email` ASC) , 
    CONSTRAINT `CustomerAddressID` 
    FOREIGN KEY (`AddressID`) 
    REFERENCES `mydb`.`Address` (`AddressID`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

기본적으로 테이블이 '고객'은 외래 키 제약 조건을 포함하고 작동하지 않습니다 나는 2 개 테이블을 만들었습니다. 나는 두 테이블에 데이터를 삽입 할 경우 '고객'이 그것에 의존하기 때문에 이론적으로, 내가 '주소'삭제되지 않습니다 :

insert into Address SET Country = 'Zimbabwe', 
         City = 'Harare', 
         Region = 'Mashonaland East Province', 
         PostalCode = '777', 
         Address1 = 'square 777 - 777'; 

insert into Customers SET FirstName = 'John', 
          LastName ='Doe', 
          Email = '[email protected]', 
          Password = '12345', 
          RegistrationDate = now(), 
          CustomerCellPhone = 123456789, 
          AddressID = 1; 

'고객'

CustomerID FirstName AddressID 
1    John  1 

' 주소 '

AddressID   Country   City 
1     Zimbabwe   Harare 

그러나, 나는에 의해 내 고객의 주소를 삭제할 수 있습니다

DELETE FROM Address WHERE AddressID=1; 

테이블 '고객'아무것도 참조 (매달려 포인터)

CustomerID  FirstName  AddressID 
1     John   1 

빈 테이블 '주소 '

AddressID   Country   City  
---    ---    --- 

'Address'.AddressID = 1이 (가) 없기 때문에'Customers '는'Address '에 NULL을 참조합니다. 그것은 나에게 어떤 오류도주지 않는다. 이 버그를 복구하려면 어떻게해야합니까?

+1

어떤 버전의 MySQL이 있습니까? –

+0

MySQL 서버 5.5 –

+0

'ON DELETE RESTRICT'를'ON DELETE CASCADE'로 대체하십시오. – ravnur

답변

1

휴거, MySQL 서버를 다시 시작하십시오.