2013-02-11 2 views
1

Я использую MySQL Server 5.5; MySQL Workbench 5.2 CE; WinXp SP3; Я создал 2 таблицы: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; 

В основном, таблица «Клиенты» содержит ограничение внешнего ключа и он не работает. Теоретически, если я ввожу данные на две таблицы, я не буду удалять 'Адрес', потому что 'Клиенты' зависит от него:

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; 

'Customers'

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  
---    ---    --- 

Проблема «Клиенты» относятся к NULL в «Адрес», потому что «Адрес» .AddressID = 1 не существует. Это не дает мне никаких ошибок. Что я могу сделать, чтобы исправить эту ошибку?

+1

Какая версия MySQL у вас есть? –

+0

MySQL Server 5.5 –

+0

Просто замените 'ON DELETE RESTRICT' на' ON DELETE CASCADE' – ravnur

ответ

1

Phew, перезагрузите сервер MySQL, помогает мне.

Смежные вопросы