J'ai un cas assez simple dont je suis un peu confus. Je veux insérer un enregistrement, qui doit être unique. Ainsi, s'il existe, je dois le remplacer ou le supprimer et le réinsérer. Si ce n'est pas le cas, je dois le créer - mais je dois m'inquiéter que quelqu'un d'autre fasse le test et crée le même en même temps.Verrouillage sur l'insert
Quelqu'un peut-il recommander la façon "correcte" de faire cela en ce qui concerne le verrouillage de MySQL? c'est-à-dire empêcher quelqu'un de faire conjointement la même chose?
Si je le fais - je ne suis pas protégé contre les insertions concurrentes de dossiers avec la même condition:
BEGIN TRANSACTION
SELECT (condtions) FOR UPDATE
if rows exist
UPDATE
else
INSERT
COMMIT
On dirait une chose simple - évidemment très rouillé à SQL ...
également :
Si je suis titulaire d'un verrou, et qu'un autre utilisateur essaie de lire/écrire quelque chose qui est retenu par le verrou - l'autre utilisateur recevra-t-il une erreur, ou son traitement sera-t-il retardé? sed?
Super! Une autre question connexe: Les données dans ma base de données sont une carte - ainsi chaque enregistrement "unique" (s'il existe) a une coordonnée X et Y. Puis-je créer une table qui utilise des champs * deux * qui, ensemble, doivent être uniques - ou dois-je fusionner les nombres en une seule valeur et en faire la clé unique? – Brad
bien sûr, ceci est connu comme la clé naturelle - http://en.wikipedia.org/wiki/Natural_key comme opposé de la clé de substitution - http://en.wikipedia.org/wiki/Surrogate_key. Avantages et inconvénients peuvent être trouvés sur SO et aussi discuter sur le wiki – ajreal