2011-01-22 31 views
1

創建外鍵的我創建了我的SQL由以下statemnt外鍵..問題在MySQL

ALTER TABLE `users` ADD FOREIGN KEY (`id`) 
REFERENCES `user_login` (`user_id`) 
ON DELETE CASCADE ; 

創作似乎是成功的,然後在那之後我執行delete語句

DELETE From user_login WHERE user_id = 1576; 

但在用戶中,該行仍然存在,即引用該行。我打開了mysql工作臺,並沒有顯示任何有關創建外鍵的跡象。有誰知道這是爲什麼?或者我做錯了什麼?這是兩個表中的一對一關係。

+0

ALTER TABLE語句是否返回錯誤 - 表明它沒有被應用? DDL語句隱式提交,所以它不是交易的問題。 – 2011-01-22 17:34:36

+0

@OMG小馬不,它不返回一個錯誤,它只是說1306行(S)的影響 – dko 2011-01-22 17:36:49

回答

2

表可能是MyISAM格式,不支持外鍵。

首先嚐試將其轉換爲InnoDB的:

alter table users engine=InnoDB; 
1

你也必須確保兩個users.iduser_login.user_id各有一個索引。

+0

他們都做。它們都是各自表中的主鍵。 – dko 2011-01-22 17:32:36

0

複製並在您的Mysql的腳本編輯器和運行粘貼此代碼。你將有兩個表類別產品這些表具有cat_id作爲外鍵

CREATE DATABASE IF NOT EXISTS dbdemo; 

USE dbdemo; 

CREATE TABLE categories(
    cat_id int not null auto_increment primary key, 
    cat_name varchar(255) not null, 
    cat_description text 
) ENGINE=InnoDB; 

CREATE TABLE products(
    prd_id int not null auto_increment primary key, 
    prd_name varchar(355) not null, 
    prd_price decimal, 
    cat_id int not null, 
    FOREIGN KEY fk_cat(cat_id) 
    REFERENCES categories(cat_id) 
    ON UPDATE CASCADE 
    ON DELETE RESTRICT 
)ENGINE=InnoDB;