Heim >Datenbank >MySQL-Tutorial >Warum schlagen MySQL CHECK-Einschränkungen in Versionen vor 8.0.16 fehl?
MySQL CHECK-Einschränkungsfehlerproblem
Beim Definieren von Datenbanktabellen ist es wichtig, Einschränkungen hinzuzufügen, um die Datenintegrität sicherzustellen. Mit CHECK-Einschränkungen können Sie Bedingungen angeben, die die Werte einer bestimmten Spalte erfüllen müssen. In MySQL 8.0.15 und früher werden CHECK-Einschränkungen jedoch nicht erzwungen, was einen Sonderfall darstellt.
Beispiel:
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>
Versuchen Sie nach dem Erstellen dieser Tabelle, Zeilen mit negativen SD-Werten einzufügen:
<code class="language-sql">INSERT INTO Customer values ('-2', 'abc', 'zz');</code>
MySQL meldet keinen Fehler, selbst wenn der eingefügte Wert gegen die angegebene CHECK-Einschränkung verstößt. Dies liegt daran, dass laut MySQL-Referenzhandbuch:
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
Lösung:
Um dieses Problem zu beheben, können Sie einen der folgenden Schritte ausführen:
<code class="language-sql">mysql> delimiter // mysql> CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer -> FOR EACH ROW -> BEGIN -> IF NEW.SD <=0 THEN SET NEW.SD=0; -> END IF; -> END -> // mysql> delimiter ;</code>
Bitte beachten Sie, dass das obige Triggerbeispiel den SD-Wert negativer Zahlen auf 0 setzt. Sie können die Triggerlogik entsprechend Ihren tatsächlichen Anforderungen ändern.
Das obige ist der detaillierte Inhalt vonWarum schlagen MySQL CHECK-Einschränkungen in Versionen vor 8.0.16 fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!