Hola
Estoy atascado intentado crear una foreign key, he creado dos tablas:
cTb[55]:="CREATE TABLE `estudio_ratio` ("
cTb[55]+="`id` int(6) unsigned NOT NULL auto_increment,"
cTb[55]+="`idestudio` int NOT NULL,"
cTb[55]+="`nporcentaje` decimal(4,2) default NULL,"
cTb[55]+="`ningreso` decimal(16,2) default NULL,"
cTb[55]+="`npagos` decimal(16,2) default NULL,"
cTb[55]+="`ntotal` decimal(16,2) default NULL,"
cTb[55]+="`ccliente` varchar(100) default NULL,"
cTb[55]+="`ncliente` int(6) unsigned NOT NULL,"
cTb[55]+="`cnotas` text NULL,"
cTb[55]+="PRIMARY KEY (`id`)"
cTb[55]+=") ENGINE=MyISAM;"
cTb[56]:="CREATE TABLE `gastos` ("
cTb[56]+="`id` int(6) unsigned NOT NULL auto_increment,"
cTb[56]+="`idgastos` int NOT NULL,"
cTb[56]+="`cgasto` char(60) default NULL,"
cTb[56]+="`ngasto` decimal(16,2) default NULL,"
cTb[56]+=" PRIMARY KEY (`id`),"
cTb[56]+=" FOREIGN KEY (`idgastos`) REFERENCES estudio_ratio(`idestudio`) ON DELETE CASCADE"
cTb[56]+=") ENGINE=MyISAM;"
La idea es cuando elimine una fila de la tabla estudio_ratio, se haga el delete en cascade en la tabla gastos, pero algo estoy haciendo mal, que no me funciona, pueden ayudar ?
Un saludo y perdón por las molestias
Gabriel
FOREIGN KEY
Re: FOREIGN KEY
Gabriel:
Parece que MyISAM no acepta la integridad referencial.
Parece que MyISAM no acepta la integridad referencial.
Code: Select all
Ventajas: MyISAM vs InnoDB
Las principales ventajas de InnoDB son:
◦Soporte de transacciones
◦Bloqueo de registros
◦Nos permite tener las características ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español), garantizando la integridad de nuestras tablas.
◦Es probable que si nuestra aplicación hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM.
Y las de MyISAM:
◦Mayor velocidad en general a la hora de recuperar datos.
◦Recomendable para aplicaciones en las que dominan las sentencias SELECT ante los INSERT /UPDATE.
[color=#FF0040]◦Ausencia de características de atomicidad ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva como los anteriores puntos a una mayor velocidad.
[[/color]/code]
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: FOREIGN KEY
Gracias Armando, tampoco me funciona en tablas InnoDb, algo estoy haciendo mal, que no acaba de funcionar.
Un saludo,
Gabriel
Un saludo,
Gabriel
Re: FOREIGN KEY
Gabriel,
http://sql.11sql.com/sql-foreign-key.htm
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar cual es la clave primaria de otra tabla.
La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la clave primaria PRIMARY KEY de la otra tabla.
https://programacion.net/articulo/integ ... ysql_263/4
Saludos,
http://sql.11sql.com/sql-foreign-key.htm
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar cual es la clave primaria de otra tabla.
La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la clave primaria PRIMARY KEY de la otra tabla.
https://programacion.net/articulo/integ ... ysql_263/4
Saludos,
Re: FOREIGN KEY
Una idea
Code: Select all
DELETE etr,gas
FROM estudio_ratio etr
LEFT JOIN gastos gas
ON etr.idestudio = gas.idgastos
WHERE etr.id= 1;
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Re: FOREIGN KEY
Gabriel:
Otra opción es que hagas un Trigger.
Saludos
Otra opción es que hagas un Trigger.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: FOREIGN KEY
Gracias a todos, lo he resuelto de la siguiente forma:
cQuery:= "DELETE estudio_ratio,gastos FROM estudio_ratio JOIN gastos ON estudio_ratio.idestudio=gastos.idgastos WHERE gastos.idgastos='" + Str( nIdGastos ) + " ' "
oVar:oMysql:Execute(cQuery)
Un saludo
Gabriel
cQuery:= "DELETE estudio_ratio,gastos FROM estudio_ratio JOIN gastos ON estudio_ratio.idestudio=gastos.idgastos WHERE gastos.idgastos='" + Str( nIdGastos ) + " ' "
oVar:oMysql:Execute(cQuery)
Un saludo
Gabriel