Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] creando restricciones en mySQL

Estas en el tema de creando restricciones en mySQL en el foro de Mysql en Foros del Web. Hola foreros, intento crear una tabla con la regla ON DELETE SET NULL en MySQL, pero no me dejaa crear la tabla , con ON ...
  #1 (permalink)  
Antiguo 17/12/2015, 17:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
creando restricciones en mySQL

Hola foreros,
intento crear una tabla con la regla ON DELETE SET NULL en MySQL, pero no me dejaa crear la tabla, con ON DELETE CASCADE si me funciono ¿por que me da error esta tabla?

Código SQL:
Ver original
  1. CREATE TABLE Themes ( ThemeID INT PRIMARY KEY, ThemeName VARCHAR(100) );
  2. CREATE TABLE Users ( UserID INT PRIMARY KEY, UserName VARCHAR(100), ThemeID INT CONSTRAINT Users_ThemeID_FK REFERENCES Themes(ThemeID) ON DELETE SET NULL);
Gracias:D
__________________
1os pasaos con xAMP en Windows
programando en PERL

Última edición por gnzsoloyo; 22/12/2015 a las 07:30
  #2 (permalink)  
Antiguo 17/12/2015, 17:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: creando restricciones en mySQL

pero cual es el error???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/12/2015, 17:17
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

Cita:
Iniciado por Libras Ver Mensaje
pero cual es el error???
Bueno, ya sabes toda la informacion k da mysql sobre sus errores(no se si habra un comando para depurar mejor los errores), este es el error q me da: "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint Users_ThemeID_FK references Themes(ThemeID) on delete set null)' at line 1"
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #4 (permalink)  
Antiguo 17/12/2015, 17:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: creando restricciones en mySQL

Seguro que asi se crean las FK en mysql? segun yo que no es de la siguiente manera:


Código MySQL:
Ver original
  1. create table Themes ( ThemeID int primary key, ThemeName varchar(100) );
  2. create table Users ( UserID int primary key, UserName varchar(100),
  3. ThemeID int,
  4. FOREIGN KEY (ThemeID) REFERENCES Themes(Themeid)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 17/12/2015, 17:46
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

Este otro codigo para crear una tabla hija me funciona perfectamente, como veras utiliza la misma forma de crear la FK:

Código:
CREATE TABLE rooms (
  room_no int(11) primary key,
  room_name varchar(255) NOT NULL,
  building_no int(11) null,
  CONSTRAINT rooms_ibfk_1 
  FOREIGN KEY (building_no) 
  REFERENCES buildings (building_no) 
  ON DELETE set null
)
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #6 (permalink)  
Antiguo 17/12/2015, 17:51
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: creando restricciones en mySQL

Sip pero si te fijas en este codigo:

create table Themes ( ThemeID int primary key, ThemeName varchar(100) );
create table Users ( UserID int primary key, UserName varchar(100), ThemeID int constraint Users_ThemeID_FK references Themes(ThemeID) on delete set null);

Falta una coma en el themeid por eso no te reconoce el constrait :) ademas de que te falta especificar cual es la columna que va a ser FK :P

quedaria:

Código MySQL:
Ver original
  1. create table Themes ( ThemeID int primary key, ThemeName varchar(100) );
  2. create table Users ( UserID int primary key, UserName varchar(100), ThemeID int, constraint Users_ThemeID_FK foreign key (themeid) references Themes(ThemeID) on delete set null);
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 17/12/2015, 18:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
De acuerdo Respuesta: creando restricciones en mySQL

OK!!!!!!!!

y mas problemas con mysql:(, ¿podrias decirme por que no me crea esta otra tabla(previamente borre la anterior)?
Código SQL:
Ver original
  1. CREATE TABLE Users ( UserID INT PRIMARY KEY, UserName VARCHAR(100), ThemeID INT DEFAULT 00,
  2. CONSTRAINT Users_ThemeID_FK FOREIGN KEY (ThemeID) REFERENCES Themes(ThemeID) ON DELETE SET DEFAULT);


El error que me devuelve es(con aun menos informacion¡¡):"#1005 - Can't create table 'db5.Users' (errno: 150)"

Gracias por tu ayuda "winnie":D
__________________
1os pasaos con xAMP en Windows
programando en PERL

Última edición por gnzsoloyo; 17/12/2015 a las 18:50
  #8 (permalink)  
Antiguo 18/12/2015, 09:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: creando restricciones en mySQL

Hiciste el drop a la tabla? trata cambiando el nombre de esta ultima :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 18/12/2015, 09:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: creando restricciones en mySQL

Restricciones del motor de tablas.
Cita:
SET DEFAULT: This action is recognized by the MySQL parser, but InnoDB rejects table definitions containing ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT clauses.
Como siempre digo, lo primero que se debe hacer es leer el manual de referencia... http://dev.mysql.com/doc/refman/5.7/...eign-keys.html

Y siempre usar un editor de codigo con corrector sintáctico, como el que tiene el MySQL Workbench
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 18/12/2015, 12:54
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

ok, gracias gnzsoloyo, tomo nota.............debo buscar en el manual antes de postear

pero ¿que significa que mysql lo reconozca pero no InnoDB??¿he de utilizar otro motor de tablas para trabajar con ON DELETE SET DEFAULT??

MS SQL server creo que si lo permite ¿sabeis si ORACLE?
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #11 (permalink)  
Antiguo 18/12/2015, 13:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: creando restricciones en mySQL

SQL Server tiene un único motor de tablas (el segmento del kernel que administra las tablas físicas en el disco); lo mismo pasa con Oracle, DB2, y PostgreSQL.
Pero MySQL es mucho más flexible, y cuenta con varios motores de tablas diferentes, entre ellos InnoDB (usualmente es el por default), pero también MyISAM, BDB, Federated, Merge, Archive, y varios más.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 18/12/2015, 13:13
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

se que MySQL dispone de varios motores de tablas, ¿hay alguno que permita trabajar con ON DELETE SET DEFAULT? es que da la impresion(por lo que dice el manual de mySQL) que el 'problema' sea el motor InnoDB(y no mySQL) y k tal vez algun otro si lo permita ¿puede ser?

No se en profundida del tema pero, el comportamiento de ON DELETE SET DEFAULT parece similar al de ON DELETE SET NULL(solo que estableciendo el valor por defecto del campo en lugar de ponerlo a NULL) ¿tan distintos son que uno si funciona pero no el otro(ON DELETE SET DEFAULT)?
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #13 (permalink)  
Antiguo 18/12/2015, 13:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: creando restricciones en mySQL

Obviamente debe haber alguna restricción a nivel de logica de programación que impide implementarlo. Habría que revisar el código fuente para saber la causa, pero usualmente se trata de cosas que tienen relación con la seguridad y estabilidad de los procesos.
En principio, si tenemos en cuenta que esa ON DELETE/ON UPDATE sólo existen si existen las FOREIGN KEY, y el único motor de tablas de MySQL que tiene FK es el InnoDB, desde ya podemos concluir que NO, no vas a poder implementar esa condición en MySQL.

Sólo te restaría usar FK opcionales (nulables) para el caso, cosa que suele ser una muy buena idea en ciertos sistemas. Habría que analizar puntualmente tu caso.

Otra opción que tienes es realizar ese tipo de borrados en SP, donde puedes realizar ese cambio sin problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 18/12/2015, 13:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

"Otra opción que tienes es realizar ese tipo de borrados en SP, donde puedes realizar ese cambio sin problemas.".................¿que es SP?
__________________
1os pasaos con xAMP en Windows
programando en PERL
  #15 (permalink)  
Antiguo 18/12/2015, 14:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: creando restricciones en mySQL

SP: Stored Procedure
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 18/12/2015, 14:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: creando restricciones en mySQL

OK¡¡¡, muchas gracias a los dos por vuestra ayuda :D

PD: ahi va vuestro bien merecido 'puntazo'
__________________
1os pasaos con xAMP en Windows
programando en PERL

Etiquetas: bases-de-datos-general, creando, restricciones, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:47.