網站首頁 編程語言 正文
含義:一種限制,用于限制表中的數據,為了保證表中的數據的準確和可靠性
分類:六大約束
? ? ? not null:非空,用于保證該字段的值不能為空 ??如學號、姓名等
? ? ? default:默認,用于保證該字段有默認值 ???如性別
? ? ? primary key: 主鍵,用于保證該字段的值具有唯一性,并且非空 ?比如學號等
? ? ? unique: 唯一,用于保證該字段的值具有唯一性,可以為空 ?比如學號等
? ? ? check:檢查約束,mysql不支持
? ? ? foreign key:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值
??????????在從表添加外鍵約束,用于引用主表中某列的值。 ??如員工表的部門編號
添加約束的時機:
- 創建表時
- 修改表時
約束的添加分類:
????列級約束:
????????位置在列的后面,六大約束語法上都支持,但外鍵約束沒有效果,不可以起約束名;
????表級約束:
????????位置在所有列的下面,除了非空、默認,其他的都支持,可以起約束名但主鍵沒有效果;
一、創建表時添加約束
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個? ? ? ? ? ? ? ? ? ? √,但不推薦
唯一 ???????√? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? 可以有多個? ? ? ? ? ? ? ? ? ?√,但不推薦
- 要求在從表設置外鍵關系
- 從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容
- 從表的關聯列必須是一個key(一般是主鍵或唯一)
- 插入數據時,先插入主表,再插入從表
刪除數據時,先刪除從表,再刪除主表
可以通過以下兩種方式來刪除主表的記錄
方式一:級聯刪除
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;
二、修改表時添加約束
- 添加列級約束
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
特點:
- 標識列不一定需要和主鍵搭配,但要求是一個key
- 一個表至多有一個標識列
- 標識列的類型只能是數值型
- 標識列可以通過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
相關推薦
- 2022-11-17 Python中的優先隊列(priority?queue)和堆(heap)_python
- 2022-08-04 如何利用python實現列表嵌套字典取值_python
- 2022-12-23 Mariadb數據庫主從復制同步配置過程實例_mariadb
- 2022-04-18 2.* 版本taro引入 taro-ui編譯小程序階段報錯, Module not found: C
- 2022-05-21 k8s監控數據組件Pod自動化進行擴縮容HPA_服務器其它
- 2022-06-12 Python利用subplots_adjust方法解決圖表與畫布的間距問題_python
- 2021-12-03 Android消息機制Handler深入理解_Android
- 2022-07-28 C語言實現會員計費系統_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支