Maison >base de données >tutoriel mysql >Comment s'assurer qu'un seul enregistrement a un indicateur « isDefault » défini sur 1 dans SQL Server ?
Garantir un seul enregistrement avec l'indicateur 'isDefault'
Dans une table de base de données, vous souhaiterez peut-être restreindre les données de telle sorte qu'un seul enregistrement par le groupe défini peut avoir un indicateur "isDefault" spécifique défini sur 1. Cela pose un défi car la contrainte ne s'applique pas à l'ensemble de la table mais s'applique plutôt à un sous-ensemble de lignes identifié par un identifiant unique.
Solution : Utilisation d'un index filtré unique
Les versions modernes de SQL Server (2008 et ultérieures) offrent une solution utilisant des index filtrés uniques. En créant un tel index, vous pouvez appliquer la contrainte sur le champ "isDefault" pour un ensemble de lignes spécifié.
Syntaxe de création d'index
Pour une table définie comme suit :
CREATE TABLE TableName( FormID INT NOT NULL, isDefault BIT NOT NULL )
Vous pouvez créer l'index filtré unique en utilisant ce qui suit syntaxe :
CREATE UNIQUE INDEX IX_TableName_FormID_isDefault ON TableName(FormID) WHERE isDefault = 1
Cet index empêchera les violations de clé en double lors de la tentative d'insertion de plusieurs enregistrements avec le même FormID et "isDefault" défini sur 1. Par exemple :
INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) -- Will result in a unique key violation error
En établissant cet index, vous vous assurez effectivement qu'un seul enregistrement dans chaque ensemble FormID peut posséder l'indicateur "isDefault" défini sur 1, conservant ainsi l'intégrité des données souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!