FOREIGN KEY

FOREIGN KEY

Postby jgabri » Mon May 25, 2020 10:41 am

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
jgabri
 
Posts: 19
Joined: Mon Jan 14, 2019 11:43 am

Re: FOREIGN KEY

Postby Armando » Mon May 25, 2020 7:08 pm

Gabriel:

Parece que MyISAM no acepta la integridad referencial.

[code]
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.
◦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.
[
/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
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: FOREIGN KEY

Postby jgabri » Tue May 26, 2020 6:43 am

Gracias Armando, tampoco me funciona en tablas InnoDb, algo estoy haciendo mal, que no acaba de funcionar.

Un saludo,
Gabriel
jgabri
 
Posts: 19
Joined: Mon Jan 14, 2019 11:43 am

Re: FOREIGN KEY

Postby Baxajaun » Tue May 26, 2020 1:44 pm

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/integridad_referencial_en_mysql_263/4

Saludos,
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: FOREIGN KEY

Postby leandro » Tue May 26, 2020 1:48 pm

Una idea
Code: Select all  Expand view  RUN

DELETE etr,gas
FROM estudio_ratio etr
LEFT JOIN gastos gas
    ON etr.idestudio = gas.idgastos
WHERE etr.id= 1;
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: FOREIGN KEY

Postby Armando » Tue May 26, 2020 3:17 pm

Gabriel:

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
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: FOREIGN KEY

Postby jgabri » Wed Jun 03, 2020 10:26 am

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
jgabri
 
Posts: 19
Joined: Mon Jan 14, 2019 11:43 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 53 guests