Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में सशर्त मूल्य जाँच के साथ बाधा

दस्तावेज़ीकरण के अनुसार ,

इसलिए हटाना not null Status . से बाधा और (ContactId,PhoneId,Status) . पर एक अद्वितीय अनुक्रमणिका जोड़ना यदि आप null का उपयोग करते हैं, तो यह आपकी इच्छानुसार काम करेगा, 0 . के बजाय निष्क्रिय . के लिए रिकॉर्ड।

यदि आप null . का उपयोग नहीं करना चाहते हैं या नहीं कर सकते हैं आपके Status . के लिए कॉलम, सुनिश्चित करना चाहते हैं कि दोनों Status=0 और Status=null समान व्यवहार करें, या उदा। Status=2 . का इलाज करना चाहते हैं सक्रिय . के रूप में (और विशिष्टता को लागू करना) भी, आप एक डमी कॉलम जोड़ सकते हैं जिसकी गणना Status से की जाएगी ।

यदि आप MySQL 5.7+ का उपयोग कर रहे हैं, तो आप इसे जेनरेट किए गए कॉलम के साथ कर सकते हैं:

CREATE TABLE IF NOT EXISTS `ContactPhone` (
  `ContactPhoneId` int(10) unsigned NOT NULL auto_increment primary key,
  `ContactId` int(11) NOT NULL,
  `PhoneId` smallint(5) unsigned NOT NULL,
  `Status` tinyint(1) NOT NULL DEFAULT '1',
  `StatusUnq` tinyint(1) as (if(Status <> 0, 1, null)) stored null,
  constraint unique (ContactId, PhoneId, StatusUnq)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

insert into ContactPhone (ContactPhoneId, ContactId, PhoneId, Status)
values (1, 1, 1, 1);
insert into ContactPhone (ContactPhoneId, ContactId, PhoneId, Status)
values (2, 1, 1, 1);
-- Duplicate key error 
insert into ContactPhone (ContactPhoneId, ContactId, PhoneId, Status)
values (3, 1, 1, 0);
insert into ContactPhone (ContactPhoneId, ContactId, PhoneId, Status)
values (4, 1, 1, 0);
update ContactPhone set Status = 1 where ContactPhoneId = 4;
-- Duplicate key error 

अन्यथा, आप एक सामान्य स्तंभ का उपयोग कर सकते हैं और स्तंभ के मान की गणना करने के लिए ट्रिगर का उपयोग कर सकते हैं, उदा.:

create trigger trbi_contactPhoneUnique before insert on ContactPhone 
for each row
  set new.StatusUnq = if(new.Status <> 0, 1, null);

create trigger trbu_contactPhoneUnique before update on ContactPhone 
for each row
  set new.StatusUnq = if(new.Status <> 0, 1, null);

आप निश्चित रूप से सूत्र को उदा में बदल सकते हैं। if(new.Status <> 0, new.Status, null); यदि आप Status . के विभिन्न मानों को अनुमति देना चाहते हैं बहुत।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PERIOD_DIFF () उदाहरण – MySQL

  2. केस का उपयोग करके mysql में डुप्लिकेट कैसे हटाएं?

  3. रिलेशनल डेटाबेस में IPv6-संगत पते को कैसे स्टोर करें

  4. Django के बाहर Django डेटाबेस परत का उपयोग करना?

  5. कैसे पता चलेगा कि लेनदेन पहले ही शुरू हो चुका है?