2012-01-16 10 views
5

No puedo crear las claves externas con ON DELETE SET DEFAULT, pero si uso ON DELETE CASCADE entonces todo funciona aquí está mi sqlNo se puede crear la clave externa con ON DELETE SET DEFAULT

CREATE TABLE person( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(100) UNIQUE 
); 


CREATE TABLE habits( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    habit VARCHAR(100) UNIQUE 
); 

INSERT INTO `test`.`habits` (`customer_id`, `habit`) VALUES (NULL, 'smoking'), (NULL, 'drinking'); 
INSERT INTO `test`.`person` (`customer_id`, `name`) VALUES (NULL, 'John'), (NULL, 'Steve'); 

CREATE TABLE foreigner( 
    customer_id INT AUTO_INCREMENT PRIMARY KEY, 
    customer VARCHAR(100) DEFAULT 'John', 
    habbit VARCHAR(100) DEFAULT 'smoking', 
    FOREIGN KEY (customer) REFERENCES person(name) ON DELETE SET DEFAULT ON UPDATE CASCADE, 
    FOREIGN KEY (habbit) REFERENCES habits(habit) ON DELETE SET DEFAULT ON UPDATE CASCADE  
); 

Es extraño que funciona si use ON DELETE CASCADE .... alguna idea?

+0

Así, en lugar de 5 (o cualquier número de olther) filas que se eliminan de la tabla 'foreigner' (debido a los efectos en cascada), que quiere terminar con cinco (casi) idénticos filas con' (cliente, habbit) = ('John', fumando) '. ¿Porqué querrías eso? –

+0

Y no pude evitar mencionar las 3 columnas inútiles 'customer_id'. –

+0

la mesa con esos valores es sólo un ejemplo - en realidad no tengo mucho más grandes tablas con los valores y las filas que puede incluso ser útiles :) Gracias – fjckls

Respuesta

3

Desde el MySQL Reference Manual ...

SET DEFAULT: Esta acción es reconocida por el analizador, pero InnoDB rechaza mesa las definiciones que contienen EN DELETE SET DEFAULT u ON ACTUALIZACIÓN cláusulas conjunto predeterminado.

Puede intentar SET NULL, pero no estoy seguro si eso le causará otros problemas.

+1

me probé DELETE SET NULL y funcionó. Supongo que tendré que seguir con eso .. si InnoDB no admite EN DELETE SET DEFAULT, el motor de la apoyaría con claves externas junto con ON UPDATE CASCADE? – fjckls

Cuestiones relacionadas