PDA

View Full Version : mysql mettere in relazione deu table


texerasmo
21-03-2003, 12:41
create table Sondaggio_risposte(
ID int(7) NOT NULL auto_increment PRIMARY KEY,
ID_poll_titolo Integer(10) not null,
Titolo_Risposte varchar(50) NOT NULL,
Num_Risposte integer(1) Not Null,
Data DateTime Not null,
INDEX ID (ID),
FOREIGN KEY (ID_poll_titolo) REFERENCES Sondaggio_titolo(ID)
);
La table viene creata.

mi aspetto un erore qando faccio una insert e ID_poll ha un valore che non corrisponde al campo ID di Sondaggio_titolo.

Perchè l'insert avviene correttamente.

Cmq io nel describe della table Sondaggio_risposte non vedo la FOREIGN KEY

Sto impazzendo
:muro:

ilsensine
21-03-2003, 14:10
La foreign key non è infatti implementata da mysql, se non in mysql 4 e per certi tipi di tabelle.
E' il motivo principale che mi ha spinto verso postgresql.

cionci
21-03-2003, 14:17
Le FOREIGN KEYS sono implementate in MySQL sulle tabelle di tipo InnoDB...che tra l'altro supportano anche le transazioni e di conseguenza non c'è più bisogno di fare i lock sulle tabelle...

http://www.mysql.com/doc/en/ANSI_diff_Foreign_Keys.html

cionci
21-03-2003, 14:21
Ah...per la cronaca da poco la versione 4.0 è diventata il ramo principale... Sulla 3.23 non saranno corretti bug se non quelli di sicurezza...

texerasmo
21-03-2003, 14:26
ok.
Nei privilegi da dare ad un utente c'è l'opzione REFERENCES (non centra nulla?).

Questa table InnoDb vengono create in questo modo?

create table nometable (id int(7) Primary key) type="InnoDb");

texerasmo
21-03-2003, 14:39
ciao cionci,
ho provato

create table a (ID int(7) NOT NULL auto_increment PRIMARY KEY) type=Innodb;

create table b (
ID int(7) NOT NULL auto_increment PRIMARY KEY,
ID_a Integer(7) not null,
FOREIGN KEY (ID_a) REFERENCES a(ID)) type=InnoDb;
);

ma non funziona :(

mi crea la table,
ma all'inserimento record non rispetta la relazione.

e giusto in questo modo?

cionci
21-03-2003, 14:40
Originally posted by "texerasmo"

ok.
Nei privilegi da dare ad un utente c'è l'opzione REFERENCES (non centra nulla?).
Serve per usi futuri...e credo che riguardi le foreign keys...

Sinceramente non ho ancora provato le tabelle InnoDB...
Per InnoDB c'è il capitolo 7.5 del manuale da leggere...

texerasmo
21-03-2003, 14:50
non ho attivo InnoDb
come lo attivo;

cionci
21-03-2003, 15:22
Apri il file my.ini che si trova nella dir di Widnows e ci aggiungi questa roba:

innodb_data_file_path = ibdata1:10M:autoextend
# Set buffer pool size to
# 50 - 80 % of your computer's
# memory
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
# Set the log file size to about
# 25 % of the buffer pool size
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
# Set ..flush_log_at_trx_commit
# to 0 if you can afford losing
# some last transactions
innodb_flush_log_at_trx_commit=1

Vai nella dir data di MySQL e cancelli gli entuali file presenti in quella dir (escluse le directory, solo i file...puoi tenere ad esempio il file .err)...

Disattivi MySQL...

Vai da linea di comando e scrivi mysqld --console e controlli che tutto vada a posto...
A questo punto puoi far ripartire il servizio...

Comunque nel capitolo 7.5.1 c'è scritto tutto ;)

texerasmo
21-03-2003, 15:43
provo subito
cmq sto provando su un mysql dove innodb è attivo

ma non funge :( porca miseria :muro:

cionci
21-03-2003, 15:55
Fai quello che ti ho detto e vedrai che funge... Io ho scaricato ieri la versione 4.0.12, ho fatto quella modifica e ora funziona alla perfezione...

Comuqnue sembra che voglia ID_a indicizzato altrimenti non la crea:

create table b (
ID int(7) NOT NULL auto_increment PRIMARY KEY,
ID_a Integer(7) not null,
INDEX a_ind (ID_a), FOREIGN KEY (ID_a) REFERENCES a(ID)) type=InnoDb;

mysql> insert into b values (1,3);
ERROR 1216: Cannot add or update a child row: a foreign key constraint fails

texerasmo
24-03-2003, 10:08
ciao cionci
Sulla versione 3.23.41 di mysql non funziona il discorso della relazione. :(
Confermo le table InnoDb son attive:
Ho provato anche ad indicizzare i campi interessati per la relazione ma null da fare.
A questo punto credo she sia un pb di versione tu che dici?

Io non ho windows come sistema operativo quel codice che mi hai passato va bene lo stesso anche per Linux?


Ciao e tnks

texerasmo
24-03-2003, 10:17
Dimenticavo di scriverti una cosa..

Quando faccio il Desc della table b;

nella voce Key c'è Mul

Questo non vuol dire nulla?

cionci
24-03-2003, 10:17
Dovrebbe...

cionci
24-03-2003, 10:19
.8.4.5 Foreign Keys

In MySQL Server 3.23.44 and up, InnoDB tables support checking of foreign key constraints, including CASCADE, ON DELETE, and ON UPDATE. See section 7.5 InnoDB Tables.