???????🔥個人主頁:尋星探路
🎬作者簡介:Java研發方向學習者
📖個人專欄:《從青銅到王者,就差這講數據結構!!!》、?《JAVA(SE)----如此簡單!!!》、《數據庫那些事!!!》
??人生格言:沒有人生來就會編程,但我生來倔強!!!
目錄
一、什么是數據庫約束
二、約束類型
1、not null空約束
1.1創建?個學生表
1.2此時需要約束學生名的列不能為null
1.3查看表結構
2、default默認值約束
2.1重構學生表
2.2重構學生表
2.3查看表結構
3、unique唯一約束
3.1重構學生表
3.2重構學生表
3.3查看表結構
一、什么是數據庫約束
????????數據庫約束是指對數據庫表中的數據所施加的規則或條件,用于確保數據的準確性和可靠性。這些約束可以是基于數據類型、值范圍、唯?性、非空等規則,以確保數據的正確性和相容性。
二、約束類型
1、not null空約束
定義表時某列不允許為null時,可以為列添加非空約束。(相當于注冊賬號時的必填項)
1.1創建?個學生表
????????學生名為null時,這條記錄是不完整的
drop table if exists student;
create table student(id bigint,name varchar(20)
);# 插?數據
insert into student values (1, null);# 查詢
select * from student;
1.2此時需要約束學生名的列不能為null
drop table if exists student;# 為所有列添加?空約束
create table student (id bigint,name varchar(20) NOT NULL
);# 由于name列有?空約束,插?NULL值時報錯
insert into student values (1, null);
# 正常值可以成功插?
insert into student values (1, '張三');select * from student;
1.3查看表結構
????????NULL列為NO表示值不允許為NULL,YES表示值可以為NULL
desc student;
2、default默認值約束
default約束用于向列中插?默認值,如果沒有為列設置值,那么會將默認值設置到該列
2.1重構學生表
????????新增年齡列
drop table student;# 創建學?表,加?年齡列
create table student (id bigint,name varchar(20) not null,age int
);
????????插入?條記錄,沒有設置默認約束時,不指定年齡的值時列為NULL
insert into student(id, name) values (1, '張三');select * from student;
2.2重構學生表
????????為年齡的列加入默認約束
drop table student;# 為年齡列加?默認約束
create table student (id bigint,name varchar(20) not null,age int default 18
);
????????插入?條記錄,不指定年齡的值時列使用了默認值
insert into student(id, name) values (1, '張三');select * from student;
2.3查看表結構
????????年齡列的默認值為18
desc student;
????????當手動明確指年齡列為NULL時列值為NULL
insert into student(id, name, age) values (2, '李四', NULL);
3、unique唯一約束
指定了唯?約束的列,該列的值在所有記錄中不能重復,如?個?的身份證號,學生的學號等
3.1重構學生表
????????新增學號列
drop table student;# 學號列設置唯?約束
create table student (id bigint,name varchar(20) not null,age int DEFAULT 18,sno varchar(10)
);
????????不設置唯?約束時,學號可以重復
insert into student(id, name, sno) values (1, '張三', '100001');insert into student(id, name, sno) values (2, '李四', '100001');select * from student;
3.2重構學生表
????????為學號列設置唯?約束
drop table student;create table student (id bigint,name varchar(20) not null,age int DEFAULT 18,sno varchar(10) UNIQUE# 唯?約束
);
????????插入重復的學號時報錯,唯?約束生效
insert into student(id, name, sno) values (1, '張三', '100001');
insert into student(id, name, sno) values (2, ' 李四 ', '100001');
select * from student;
3.3查看表結構
????????Key列顯示UNI表示唯?約束
desc student;
#注:
distinct本來數據庫服務器存儲的內容中,已經有重復的了。展示給用戶的時候,展示的是去重的結果
unique 是存的數據就不能重復(重復的數據存不下去),查詢的結果自然也是不重復的
?????????由于內容較多,會分為多篇講解,預知后續內容,請看后續博客!!!