1

私は MySQL Server 5.5 を使用しています。MySQL ワークベンチ 5.2 CE; WinXp SP3; 2 つのテーブルを作成しました。

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 つのテーブルに挿入すると、「Customers」がそれに依存するため、「Address」は削除されません。

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 = 'john@doe.com',
                          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;

テーブル 'Customers' は何も参照していません (ダングリング ポインター)

CustomerID        FirstName       AddressID
1                 John            1 

空のテーブル「住所」

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

問題は、'Address'.AddressID = 1 が存在しないため、'Customers' が 'Address' に NULL を参照することです。エラーは発生しません。このバグを修復するにはどうすればよいですか?

4

1 に答える 1

1

ふぅ、MySQL サーバーを再起動すると助かります。

于 2013-02-11T10:20:31.497 に答える