Je travaille dans MySQL 5.5.MySQL - Mettre à jour un enregistrement et maintenir l'intégrité référentielle
J'ai une table de contacts comme celui-ci
CREATE TABLE Contacts ( ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(255) NOT NULL, Institution VARCHAR(255), Address VARCHAR(255), Email VARCHAR(255) NOT NULL UNIQUE, Phone VARCHAR(10) );
et une tables de stocks comme celui-ci
CREATE TABLE Inventories ( ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, InventoryParametersID INTEGER NOT NULL UNIQUE, ContactID INTEGER NOT NULL, LocationID INTEGER NOT NULL, Year INTEGER, DateUploaded TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, Comments VARCHAR(255), FOREIGN KEY (ContactID) REFERENCES Contacts(ID) );
Dans mon formulaire en ligne, télécharger des contacts inventaires. Voici le comportement que je veux: - Lorsqu'un nouveau contact télécharge un inventaire, faites un insert avec ses nouvelles infos - Lorsqu'un contact existant (déterminé par adresse e-mail) télécharge un autre inventaire, mettez à jour ses informations ET conservez l'intégrité référentielle avec la table Inventories
Comment faire?
Voici ce que j'ai essayé:
CASE
FOREIGN KEY (ContactID) REFERENCES Contacts(ID)
REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);
RÉSULTAT
No change
CASE
FOREIGN KEY (ContactID) REFERENCES Contacts(ID)
ON UPDATE CASCADE
REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);
RÉSULTAT
No change
A REMPLACER ligne et trouver supprime ajouter une nouvelle. Donc, votre UPCATE CASCADE ne fonctionne pas. Pourquoi n'utilisez-vous pas INSERT ... ON DUPLICATE KEY UPDATE? – lopo
C'est ce sur quoi je travaille maintenant, mais j'ai de la difficulté à trouver la syntaxe. Avez-vous un lien vers un bon exemple autre que les docs MySQL? – benjsigmon
INSERT INTO Contacts ('Nom',' Institution', 'Adresse',' Email', 'Téléphone') VALEURS (?,?,?,?,?) SUR LA MISE À JOUR DUPLICATE KEY Name = VALUES (NAME), Institution = VALEURS (Institution) ... [MySQL-DOC] (http://dev.mysql.com/doc/refman/5.5/fr/insert-on-duplicate.html) – lopo