MySQL資料庫操作(4)表約束

2021-09-27 10:39:00 字數 3421 閱讀 3159

在建立表或者插入列時,可以對列的值進行約束,當插入條目時如果不符合約束,將會報錯,拒絕插入。

not null字段值不能為空

例:

#建立表時新增非空約束

create table tb1( id int, name varchar(20) not null );

insert into tb1(id) value(1); # 報錯,沒有傳入name

#注意:在mysql 裡面,'' 不等於null

#修改表新增非空約束

alter table tb1 modify id int not null;

#取消非空約束

alter table tb1 modify id int;

unique key確保欄位中的值的唯一

例:

#建立表時新增唯一約束

create table tb2(id int not null unique key, name varchar(20) not null);

insert into tb2 value(1,'張三');

insert into tb2 value(1,'李四'); # 報錯,id欄位的值有重複

#修改表新增唯一約束

alter table `tb2` add unique key(`name`);

#刪除唯一約束

alter table tb2 drop key name;

#聯合唯一約束

alter table tb2 add aa int, add bb int;

alter table tb2 add unique key (aa,bb);

insert into tb2 value(4,'佳能',1,2);

insert into tb2 value(5,'哈哈',1,2); # 報錯,(aa,bb)聯合欄位有重複

#刪除聯合唯一

show create table tb2; #檢視約束名

alter table tb2 drop key aa; #通過約束名刪除約束,聯合約束預設名為聯合列中的第一列

primary key==not null + unique key

主鍵保證記錄的唯一性, 唯一標識每一條資料

主鍵自動為not null

每張資料表只能存在乙個主鍵

當一張表裡沒有乙個主鍵的時候,第乙個出現的非空且為唯一的列被視為有主鍵。

例:

#建立表時新增主鍵約束

create table tb3( id int primary key,name varchar(20) not null);

#刪除主鍵約束

alter table tb3 drop primary key;

#新增主鍵約束

alter table tb3 add primary key(id);

#聯合主鍵

create table tb4(id_a int , id_b int, content varchar(20), primary key(id_a,id_b) );

#新增聯合主鍵

alter table tb4 add primary key(id_a,id_b);

auto_increment自動編號,一般與主鍵組合使用。乙個表裡面只有乙個自增

預設情況下,起始值為1,每次的增量為1。

當插入記錄時,如果為auto_increment資料列明確指定了乙個數值,則會出現兩種情況,

情況一,如果插入的值與已有的編號重複,則會出現出錯資訊,因為auto_increment資料列的值必須是唯一的;

情況二,如果插入的值大於已編號的值,則會把該插入到資料列中,並使在下乙個編號將從這個新值開始遞增。也就是說,可以跳過一些編號。如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用。(可以調大,不可以縮小)

例:

#建立表時新增自增長

create table tb5( id int primary key auto_increment,name varchar(20))auto_increment =100;

# 如果不寫,預設從1開始

#刪除自動增長

alter table tb5 modify id int;

#修改表新增自動增長

alter table tb5 modify id int auto_increment;

default初始值設定,插入記錄時,如果沒有明確為字段賦值,則自動賦予預設值。

例:

#建立表時新增預設約束

create table tb6(id int primary key auto_increment,name varchar(20) not null,age int not null default 18);

#刪除預設約束

alter table tb6 modify age int not null;

alter table tb6 alter age drop default;

#新增預設約束

alter table tb6 modify age int default 20;

alter table tb6 alter age set default 21;

6、外來鍵約束

外來鍵約束foreign key,保持資料一致性,完整性實現一對一或一對多關係。

外來鍵約束的要求:

資料表的儲存引擎只能為innodb

外來鍵列和參照列資料型別一致

外來鍵必須關聯到鍵上面去,一般情況是關聯到,另一張表的主鍵

例:

#建立表時新增外來鍵約束

create table `a`( a_id int primary key,a_name varchar(20) not null);

create table `b`(b_id int primary key,b_name varchar(20) not null,fy_id int not null,constraint ab_id foreign key(fy_id) references `a`(a_id)); #ab_id是外來鍵的別名,如果沒有別名則無法刪除該外來鍵,fy_id是本表中要關聯的列,`a`(a_id)是關聯到a表的a_id列,fy_id的取值必須在a表中的a_id列**現過才能用。

#刪除外來鍵

alter table `b` drop foreign key ab_id;

#增加外來鍵

alter table `b` add constraint ab_id foreign key(fy_id) references `a`(a_id);

MySQL 資料庫表的約束

真正約束欄位的是資料型別,但是資料型別約束很單一,需要有一些額外的約束,更好的保證資料的合法性。某一種資料會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實資料的時候,使用者可以選擇使用預設值。預設值生效後,資料在插入的時候不給該字段賦值,就會使用預設值 注意 set 和 enum不能設定...

資料庫 MySQL表的約束

1.空屬性 盡量保證定義表時,欄位不為空,資料為空就無法參與運算,需在定義欄位後加not null 2.預設值 某一列經常出現某個具體的值,可以在定義表結構是就指定預設值。定義欄位後加 default 預設值 若預設值後不加not null 則插入值可以設定成null值,當沒有插入值時,就會自動填上...

資料庫 表約束

非空且唯一 方式一 create table userid number,constraint pk user primary key userid username varchar2 10 方式二 create table userid number primary key,username va...