2011-10-09 2 views
1

J'ai plusieurs tables liées entre elles. Moteur: myisamAnnuler INSERT si la valeur dans la table référencée est nulle ou nulle

1:

account 
account_ID, account_username, account_pwd, ...... 

2:

items 
items_account_ID, items_name, ...... 

Comme vous pouvez le voir, les éléments ont une colonne items_account_ID. Chaque article appartient à un compte . Pour insérer un élément que j'utilise une requête comme:

INSERT INTO items SET items_name = 'asd', items_account_ID = (SELECT account_ID FROM account WHERE account_ID = accountValue AND account_pwd='something'); 

Cette requête est créée en asp.net et accountValue est de la session ou d'un champ caché de quelque chose. L'instruction SELECT est pour des raisons de sécurité, de sorte que les utilisateurs ne peuvent pas créer d'éléments les uns pour les autres. Je souhaite annuler le INSERT si le compte_ID n'existe pas. Quelque chose comme:

.... » items_account_ID = IFNULL (theSelectStatement, "cancelQuery()");

Mais je ne peux trouver aucune fonction dans mysql pour annuler la requête en cours
Est-ce possible. ?

Répondre

3

tout d'abord, vous devez définir items_account_ID comme not null et assurez-vous qu'il fait référence account(account_ID) comme une clé étrangère. cela vous empêchera d'insérer une mauvaise account_ID dans items.

Ensuite, vous pourriez envisager de réécrire votre insertion comme suit:

insert items 
(
    items_name 
    ,items_account_ID 
) 
select 
'asd' 
,account_ID 
from account 
where account_ID = accountValue 
and account_pwd = 'something' 
+0

Merci pour votre réponse. Cela ressemble à une excellente façon de le faire, ne pense pas à Sélectionner toutes les valeurs. Merci! – Easyrider

+0

Cela fonctionnera même sans la déclaration 'FOREIGN KEY' (qui aurait besoin de changer les tables de MyISAM à InnoDB pour fonctionner) –

+0

Néanmoins, il devrait encore mettre en œuvre ses relations correctement. – canon

Questions connexes