Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-09-2008, 22:39   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
[MySQL] vincoli ON DELETE XXX e ON UPDATE XXX

sto usando seriamente MySQL per la prima volta, e mi trovo di fronte alla seguente difficoltà. mettiamo che io eseguo le seguenti istruzioni:
Codice:
CREATE DATABASE test;
USE test;

CREATE TABLE parent
(
    lol BOOLEAN NOT NULL PRIMARY KEY  /* nome e tipo scelti a caso, tanto per avere una chiave primaria */
);

CREATE TABLE child
(
    asd BOOLEAN NOT NULL REFERENCES parent(lol) ON DELETE CASCADE ON UPDATE CASCADE
);
non dovrei aver fatto grosse castronerie, no? quello che io vorrei ottenere è che se io cancello una entry dalla tabella parent (una delle due possibili, visto che il campo è booleano ) lui automaticamente mi cancelli la corrispondente entry (se esiste) nella tabella child, ma questo non succede.

se faccio questo:
Codice:
DELETE FROM parent WHERE lol="true";
la entry in child rimane. c'è qualcosa che non sto capendo...

Ultima modifica di 71104 : 03-09-2008 alle 22:42.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2008, 22:45   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
altra cosa: la clausola REFERENCES non dovrebbe fare in modo che mi venga vietato di inserire una entry in child se per quel campo non esiste un valore corrispondente in parent?

praticamente facendo questo:
Codice:
INSERT INTO child VALUES(TRUE);
la entry viene inserita anche se parent è vuota.

c'è decisamente qualcosa che non sto capendo...

'sti vincoli non funzionano come mi pare di aver capito che debbano funzionare: le entries sembrano completamente scorrelate.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 07:25   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Ti sei appena scontrato con una delle cazzate più grosse di MySQL: l'integrità referenziale ce l'hai (nel senso che funziona; il parsing viene effettuato per qualunque engine, per cui in questo momento tu stai vivendo nell'illusione di aver creato una struttura coerente e che sulla carta dovrebbe funzionare; solo sulla carta però: MySQL mica t'informa che poi, di fatto, non funzionerà ) soltanto con alcuni engine.

Nel tuo caso, non avendolo specificato, di default viene usato MyISAM, che ovviamente NON la supporta.

Io uso InnoDB come engine per farla funzionare. Modifica le tabelle in questo modo:
Codice:
CREATE TABLE parent
(
    lol BOOLEAN NOT NULL PRIMARY KEY  /* nome e tipo scelti a caso, tanto per avere una chiave primaria */
) engine=InnoDB;

CREATE TABLE child
(
    asd BOOLEAN NOT NULL REFERENCES parent(lol) ON DELETE CASCADE ON UPDATE CASCADE
) engine=InnoDB;
Vedrai che adesso ti funzionerà.

MySQL meriterebbe una pagina ad hoc su YourLanguageSucks.

Se poi vuoi usare un engine SQL degno di questo nome, puoi sempre provare FireBird.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 10:02   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Che io sappia le tabelle su MySQL, a meno che non sia una versione vecchia, vengono create come InnoDB.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 10:10   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
l'avevo letta infatti questa storia di InnoDB sulla documentazione, ma mi pareva che valesse solo per l'istruzione FOREIGN KEY. comunque ho provato or ora con "engine=InnoDB" e non cambia nulla: "INSERT INTO" inserisce in child anche se il valore non è presente in parent, e "DELETE FROM parent" di cancellare a cascata non ci pensa neanche.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 11:08   #6
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Fosse Oracle ti potrei aiutare un pò di più. Con MySQL l'unica cosa che posso fare è dirti di dare un'occhiata qui:

http://dev.mysql.com/doc/refman/5.0/...nstraints.html

...e di usare InnoDB, che è l'unico motore che si avvicina ad un database relazionale.

Però per favore, non usare un boolean come PK. Nemmeno per prova. Ogni volta che qualcuno usa un boolean come PK, Gesù Bambino piange, lo sai vero?
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 11:19   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da shinya Guarda i messaggi
Fosse Oracle ti potrei aiutare un pò di più. Con MySQL l'unica cosa che posso fare è dirti di dare un'occhiata qui:

http://dev.mysql.com/doc/refman/5.0/...nstraints.html
mah, sentite a me pare scandaloso: ho provato a rifare il test utilizzando il codice di esempio che c'è nella pagina:
Codice:
CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
                    INDEX par_ind (parent_id),
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
                      ON DELETE CASCADE
) ENGINE=INNODB;
e con l'istruzione FOREIGN KEY effettivamente funziona... con REFERENCES messo direttamente accanto al campo invece no!! cioè, possibile che abbiano lasciato nel linguaggio un' "appendice" non funzionante? mi pare una cosa veramente oscena...
credo di non aver capito io qualcosa, ma mi piacerebbe tanto capirla sta cosa.


Quote:
Però per favore, non usare un boolean come PK. Nemmeno per prova. Ogni volta che qualcuno usa un boolean come PK, Gesù Bambino piange, lo sai vero?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 11:41   #8
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Secondo me fai prima ad usare un db più serio:

http://www.postgresql.org/

__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 11:46   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
non sono io che decido quale database usare; io devo solo scrivere un programma Java che lo usa (si tratta della mia tesi ). esiste la possibilità che prossimamente migriamo a postgres, ma per ora mi piacerebbe molto se le cose funzionassero con MySQL
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 12:20   #10
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
qui c'è scritto che così come hai fatto te non ha alcun effetto e serve solo come promemoria
http://dev.mysql.com/doc/refman/6.0/...eign-keys.html
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 12:27   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ammazza che schifo


grazie k0nt3


PS: altro che YourLanguageSucks...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 12:28   #12
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
guarda per l'integrità referenziale non c'è paragone con postgreSQL
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2008, 13:18   #13
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da cionci Guarda i messaggi
Che io sappia le tabelle su MySQL, a meno che non sia una versione vecchia, vengono create come InnoDB.
Vero. Ho fatto la prova con la 5.0 e crea tabelle InnoDB. Con la 4.x che io ricordi le creava con MyISAM.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
Multa milionaria per un data center del ...
F-Droid 2.0 si aggiorna con una nuova gr...
Microsoft ridisegna Copilot: dalla chat ...
Volkswagen porterà 20 videogiochi...
Troppa IA storpia: OpenAI licenzia in tr...
Marathon, Bungie svela i contenuti dell'...
Autunno, tempo di potature: i tagliasiep...
Meta Muse, due sviluppatori riescono a o...
Google AI Pro gratis: festa a sorpresa p...
MacSync colpisce macOS usando i calendar...
L'agente IA cancella 48 mila file in 103...
Jensen Huang avverte: l'AI può aiutare a...
Elettrico Renault in arrivo in Spagna: 6...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v