MySQL 008 表的約束

2021-09-26 04:43:00 字數 3324 閱讀 7478

對表裡的資料進行限定,保證資料的正確性、有效性和完整性;

①主鍵約束:primary key

②非空約束:not null

③唯一約束:unique

④外來鍵約束:foreign key

create table stu(

id int,

name varchar(20) not null -- 名字不允許為空,否則建立失敗

);

注意:

""與null是不同的兩個概念;

-- 刪除name的非空約束

alter table stu modify name varchar(20);

-- 建立表之後,新增name的非空約束

alter table stu modify name varchar(20) not null;

create table stu(

id int,

name varchar(20) unique -- 唯一約束

);

兩個null值,不算重複;

-- 刪除唯一約束

alter table stu modify name varchar(20);

-- 建立表之後,新增name的非空約束

alter table stu modify name varchar(20) not null;

①含義:非空且唯一;

②一張表只能有乙個主鍵;

create table stu(

id int primary key, -- 主鍵約束

name varchar(20)

);

如果某一列是數值型別的,使用auto_increment可以來完成值的自動增長;

create table stu(

id intprimary key auto_increment, -- 主鍵自動增長

name varchar(20)

);

個人理解:加入乙個部門的員工表,對於每乙個員工在某些欄位上存在大量相同的資料,比如有幾百名來自同一部門的員工同時都是男性,都是大學生這些相同屬性,那麼這個時候重複地將一些相同的資料賦值給不同的員工,這樣來說浪費了很多記憶體,那麼這樣的話就可以建立乙個從表,將這些表具有相同值的字段新增進去,主表進行調取即可,這就像是寫**中的定義變數,不需要一次次賦予一樣的值。

create table 表名(

...外來鍵列名稱 資料型別,

constraint 外來鍵名稱 foreign key (外來鍵列名稱) references 從表名稱(關聯的從表列(一般是主鍵)名稱)

);

-- 建立從表,記錄學生的性別和年齡,id自增長

create table stu_p(

id int primary key auto_increment,

*** varchar(20),

age int

)-- 為從表新增記錄

insert into stu_p(id,***,age) values(1,"男",20);

insert into stu_p(id,***,age) values(null,"男",21);

insert into stu_p(id,***,age) values(null,"男",22);

insert into stu_p(id,***,age) values(null,"女",20);

insert into stu_p(id,***,age) values(null,"女",21);

insert into stu_p(id,***,age) values(null,"女",22);

-- 建立主表,記錄學生的資訊,關聯從表裡面學生的屬性

create table stu(

id int primary key auto_increment,

name varchar(20),

ranking int,

dep_id int, -- 外來鍵對應的從表的主鍵(一般都是對應主鍵)

constraint stu_p_id_fk foreign key (dep_id) references stu_p(id)

)-- 為主表新增記錄

insert into stu(id,name,ranking,dep_id) values(1,"大哥",1,1);

insert into stu(id,name,ranking,dep_id) values(null,"二哥",3,2);

insert into stu(id,name,ranking,dep_id) values(null,"三哥",2,3);

insert into stu(id,name,ranking,dep_id) values(null,"四哥",5,2);

insert into stu(id,name,ranking,dep_id) values(null,"大姐",8,1);

insert into stu(id,name,ranking,dep_id) values(null,"二姐",44,2);

insert into stu(id,name,ranking,dep_id) values(null,"三姐",31,3);

insert into stu(id,name,ranking,dep_id) values(null,"四姐",51,3);

-- 查詢從表資料

select * from stu_p;

-- 查詢主表資料

select * from stu;

alter table 主表名 drop foreign key 外來鍵名稱;
alter table 主表名 add constraint 外來鍵名稱 foreign key (外來鍵列名稱) references 從表名稱(關聯的從表列(一般是主鍵)
alter table 主表名 

add constraint 外來鍵名稱

foreign key (外來鍵列名稱)

references 從表名稱(關聯的從表列(一般是主鍵)

on update cascade on delete cascade;

級聯更新:on update cascad

級聯刪除:on delete cascade

Mysql 表的約束

約束型別 說明主鍵約束 primary key 要求主鍵列資料唯一,並且不允許空。主鍵可以包含表的一列或多列,如果包含火烈,則序號在表級定義。唯一約束 unique 要求該列唯一,允許為空。檢查約束 check 某列取值範圍限制 格式等限制,如年齡的約束。非空約束 not null 某類內容不能為空...

MySQL 表的約束

為了防止錯誤資料的產生,在mysql中定義了一些維護資料庫完整性的規則即表的約束,如下表所示 表的約束 約束條件 說明primary key 主鍵約束,用於標識唯一對應的記錄 例如賬號 foreign key 外來鍵約束 not null 非空約束 unique 唯一性約束 default 預設值約...

MySQL 表的約束

create table tt6 age tinyint not null,name varchar 5 not null,char 2 default 男 建立乙個名為tt6的字段,age欄位為tinyint型,不可為空,name欄位為varchar 5 不可為空,欄位為char 2 型別,預設值...