日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

數據庫常見約束

作者:~TiAmo~ 更新時間: 2022-07-22 編程語言

含義:一種限制,用于限制表中的數據,為了保證表中的數據的準確和可靠性

分類:六大約束

? ? ? not null:非空,用于保證該字段的值不能為空 ??如學號、姓名等

? ? ? default:默認,用于保證該字段有默認值 ???如性別

? ? ? primary key: 主鍵,用于保證該字段的值具有唯一性,并且非空 ?比如學號等

? ? ? unique: 唯一,用于保證該字段的值具有唯一性,可以為空 ?比如學號等

? ? ? check:檢查約束,mysql不支持

? ? ? foreign key:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值

??????????在從表添加外鍵約束,用于引用主表中某列的值。 ??如員工表的部門編號

添加約束的時機:

  1. 創建表時
  2. 修改表時

約束的添加分類:

????列級約束:

????????位置在列的后面,六大約束語法上都支持,但外鍵約束沒有效果,不可以起約束名;

????表級約束:

????????位置在所有列的下面,除了非空、默認,其他的都支持,可以起約束名但主鍵沒有效果;

一、創建表時添加約束

1、添加列級約束

語法:直接在字段名和類型后面追加約束類型即可。可以追加多個,中間用空格隔開,沒有順序要求。

create table stu(

? ? ?id int primary key,

? ? ?stuname varchar(20) not null, ??#非空

? ? ?gender char(1) check( gender=’男’?or gender=’女’), ?#檢查

? ? ?age int default 18 ???#默認約束

? ? ?majorid int references major(id) ??#外鍵

);

查看stu中的所有索引,包括主鍵、外鍵、唯一

show index from stu;

2、添加表級約束

語法:在各個字段的最下面

【constraint 約束名】 約束類型(字段名)

create table stu(

? ? ?id int,

? ? ?stuname varchar(20) ,

? ? ?gender char(1) ,

? ? ?age int,

? ? ?majorid int,

? ? ?constraint fk_stu_major foreign key(majorid) references major(id)

);

主鍵和唯一的大對比:

?????????保證唯一性 ???是否允許為空? ? ? ?一個表中可以有多少個? ? ? ? 是否允許組合

主鍵 ???????√? ? ? ? ? ? ? ? ? ? ? ?×? ? ? ? ? ? ? ? ? ? ? ? ? 至多有1個? ? ? ? ? ? ? ? ? ? √,但不推薦

唯一 ???????√? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? 可以有多個? ? ? ? ? ? ? ? ? ?√,但不推薦

  1. 要求在從表設置外鍵關系
  2. 從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容
  3. 從表的關聯列必須是一個key(一般是主鍵或唯一)
  4. 插入數據時,先插入主表,再插入從表

刪除數據時,先刪除從表,再刪除主表

可以通過以下兩種方式來刪除主表的記錄

方式一:級聯刪除

alter table stu add constraint fk_stu foreign key(majorid) references major(id) on delete cascade;

方式二:級聯置空

alter table stu add constraint fk_stu foreign key(majorid) references major(id) on delete set null;

二、修改表時添加約束

  1. 添加列級約束

alter table 表名 modify column 字段名 字段類型 新約束;

? ? ?2. 添加表級約束

alter table 表名 add 【constraint 約束名】 約束類型(字段名) 外鍵的引用;

1、添加非空約束

alter table stu modify column stuname varchar(20) not null;

2、添加默認約束

alter table stu modify column age int default 18;

3、添加主鍵

①列級約束

alter table stu modify column id int primary key;

②表級約束

alter table stu add primary key (id);

4、添加唯一

①列級約束

alter table stu modify column seat int unique;

②表級約束

alter table stu add unique (seat);

5、添加外鍵

alter table 表名 foreign key(字段名) references 主表(被引用列);

三、修改表時刪除約束

1、刪除非空約束

alter table stu modify column stuname varchar(20) null;

2、刪除默認約束

alter table stu modify column age int;

3、刪除主鍵

alter table stu drop primary key;

4、刪除唯一

alter table stu drop index 索引名;

5、刪除外鍵

alter table 表名drop foreign key 約束名;

標識列

???又稱為自增長列

???含義:可以不用手動的插入值,系統提供默認的序列值,默認從1開始,步長為1

特點:

  1. 標識列不一定需要和主鍵搭配,但要求是一個key
  2. 一個表至多有一個標識列
  3. 標識列的類型只能是數值型
  4. 標識列可以通過set auto_increment_increment=值;設置步長

???可以通過手動插入值設置起始值

一、創建表時設置標識列

drop table if exists tab;

create table tab(

? ? ?id int primary key auto_increment,

? ? ?name varchar(20)

);

二、修改表時設置標識列

? ?alter table tab_identity modify column id int primary key auto_increment;

三、修改表時刪除標識列

? ?alter table tab_identity modify column id int;

原文鏈接:https://blog.csdn.net/TiAmo_xixi/article/details/125917725

欄目分類
最近更新