mysql非空約束兩個 MySQL中的或非空約束

2021-10-17 15:28:52 字數 894 閱讀 1952

@sklivz:使用mysql5.0.51a進行測試時,我發現它解析了乙個檢查約束,但沒有強制執行它。我可以插入(空,空)而不出錯。測試了myisam和innodb。隨後使用show create table顯示檢查約束不在表定義中,即使在定義表時沒有給出任何錯誤。

這與mysql manual

它說:「檢查子句被解析,但被所有儲存引擎忽略。」

所以對於mysql,您必須使用觸發器來強制執行這個規則。唯一的問題是mysql觸發器無法引發錯誤或中止插入操作。在觸發器中可以做的一件事是將非空列設定為空。

create table foo (

fielda int,

fieldb int,

fielda_or_fieldb tinyint not null;

delimiter //

create trigger fieldabnotnull before insert on foo

for each row begin

if (new.fielda is null and new.fieldb is null) then

set new.fielda_or_fieldb = null;

else

set new.fielda_or_fieldb = 1;

end if;

end//

insert into foo (fielda, fieldb) values (null, 10); -- ok

insert into foo (fielda, fieldb) values (10, null); -- ok

insert into foo (fielda, fieldb) values (null, null); -- gives error

更新之前還需要類似的觸發器。

MySQL學習 主鍵約束 非空約束 唯一約束

約束的概念 對錶中的資料進行限定,保證資料的正確性 有效性和完整性 1 主鍵約束 primary key 1.1注意 1 含義 非空且唯一 2 一張表只能有乙個字段為主鍵 3 主鍵就是表中記錄的唯一標識 1.2 在建立表時新增主鍵約束 create table stu id int primary ...

mysql之非空約束,唯一約束,外來鍵約束

非空約束 是指 某些列不能設定為null值,所以要對列新增非空約束 非空約束的特點 不可以為空,但可以是重複值 not null 是非空約束的關鍵字 create table student sid int primary key auto incrament,sname varchar 50 no...

資料庫組合兩個表 MySQ

這個是乙個資料庫的題,於力扣 題目 表1 person 列名 型別 personid int firstname varchar lastname varchar personid是上表主鍵 表2 address 列名 型別 addressid int personid int city varch...