Comment retrouver la clé primaire d'une insertion toute fraîche ?

Comment retrouver la clé primaire d'une insertion toute fraîche ? - SQL/NoSQL - Programmation

Marsh Posté le 27-08-2004 à 16:30:03    

Salut
 
Je voudrais juste savoir s'il était possible de connaître la clé primaire d'un élément qui vient juste d'être inséré dans une table.
 
C'est parce que j'ai plusieurs tables, et certain champs d'une table X font référence à une clé primaire d'une table Y. Donc pour inséré un élément dans la table X, il faut connaitre la clé primaire de l'élément de la table Y en question qui vient juste d'être inséré.
 
Merci


Message édité par Imhotep le 27-08-2004 à 16:31:10

---------------
Qui avale une noix de coco fait confiance à son anus...
Reply

Marsh Posté le 27-08-2004 à 16:30:03   

Reply

Marsh Posté le 27-08-2004 à 17:05:38    

SGBD ?

Reply

Marsh Posté le 27-08-2004 à 17:28:23    

Quoi ?


---------------
Qui avale une noix de coco fait confiance à son anus...
Reply

Marsh Posté le 27-08-2004 à 17:31:11    

La génération de valeurs de clé primaire n'est pas standard SQL.
A partir de là, chaque Système de Gestion de Base de Données gère ça de sa façon propre. Donc si on ne sais pas lequel tu utilises, on ne peut pas te répondre.


Message édité par Arjuna le 27-08-2004 à 17:31:35
Reply

Marsh Posté le 27-08-2004 à 17:37:37    

Ah ok, il s'agit de MySQL.


---------------
Qui avale une noix de coco fait confiance à son anus...
Reply

Marsh Posté le 28-08-2004 à 00:32:51    

qqch comme mysql_insert_id il me semble, en PHP.

Reply

Marsh Posté le 02-09-2004 à 00:21:49    

@@IDENTITY ?


Message édité par HappyHarry le 02-09-2004 à 00:22:19
Reply

Marsh Posté le 02-09-2004 à 08:01:09    

mysql_insert_id effectivement.
 
@@idendity c'est pour de l'Access ou SQL server

Reply

Marsh Posté le 02-09-2004 à 08:08:34    

Citation :

The variable is a synonym for the LAST_INSERT_ID variable. It exists for compatibility with other databases. As of MySQL 3.23.25, you can read its value with SELECT @@IDENTITY. As of MySQL 4.0.3, you can also set its value with SET IDENTITY.


 
doc de mysql [:spamafote]


Message édité par HappyHarry le 02-09-2004 à 08:08:51
Reply

Marsh Posté le 02-09-2004 à 11:39:40    

HappyHarry a écrit :

Citation :

The variable is a synonym for the LAST_INSERT_ID variable. It exists for compatibility with other databases. As of MySQL 3.23.25, you can read its value with SELECT @@IDENTITY. As of MySQL 4.0.3, you can also set its value with SET IDENTITY.


 
doc de mysql [:spamafote]


t'ain !
c'est marrant ça, parceque @@IDENTITY est totalement proprio MS SQL Server. Comme quoi, si même MySQL prends modèle sur MS SQL Server, c'est que c'est pas si mal que ça en fin de compte (et pour les anti-M$, désolé, mais ça explique alors pourquoi MySQL est aussi pourri :D)
 
Ceci-dit, @@IDENTITY est à banir sous SQL Server. Il faut mieu utiliser la fonction système "SCOPE_IDENTITY()"
 
En effet :
@@IDENTITY retourne la dernière clé créé pour la table au sein de la transaction globale (sous-transactions comprises). Ce qui fait que si l'insert à déclenché un trigger qui a refait un insert dans la table, alors @@IDENTITY va retourne le numéro de la ligne généré par le trigger et non la ligne qu'on vient d'insérer.
 
SCOPE_IDENTITY() retourne quant à lui l'ID généré par la dernière instruction éxécutée au sein de la transaction. Ainsi, quelque soient les triggers et cnie, on retourne bien la clé qu'on a inséré.

Reply

Marsh Posté le 02-09-2004 à 11:39:40   

Reply

Marsh Posté le 02-09-2004 à 12:18:58    

Arjuna a écrit :


 
Ceci-dit, @@IDENTITY est à banir sous SQL Server. Il faut mieu utiliser la fonction système "SCOPE_IDENTITY()"
 
En effet :
@@IDENTITY retourne la dernière clé créé pour la table au sein de la transaction globale (sous-transactions comprises). Ce qui fait que si l'insert à déclenché un trigger qui a refait un insert dans la table, alors @@IDENTITY va retourne le numéro de la ligne généré par le trigger et non la ligne qu'on vient d'insérer.
 
SCOPE_IDENTITY() retourne quant à lui l'ID généré par la dernière instruction éxécutée au sein de la transaction. Ainsi, quelque soient les triggers et cnie, on retourne bien la clé qu'on a inséré.


 
j'ai jamais dit le contraire ;)
 

Reply

Marsh Posté le 03-03-2006 à 09:23:05    

Bonjour, je donne suite a ce sujet car je suis un peu dans le meme cas, mais j'aurais voulu savoir s'il existait de telles tables sur firebird et oracle, sur firebird il me semble avoir trouvé rsb$constraintes ou quelque chose du genre donc c bon, mais sur oracle, j'ai beau tester toutes les tables system, j'avoue avoir du mal a trouver ce qui m'interesse, sauriez vous me repondre? ce qui me ferait gagner bien du temps
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed