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을 참조합니다. 그것은 나에게 어떤 오류도주지 않는다. 이 버그를 복구하려면 어떻게해야합니까?
어떤 버전의 MySQL이 있습니까? –
MySQL 서버 5.5 –
'ON DELETE RESTRICT'를'ON DELETE CASCADE'로 대체하십시오. – ravnur