亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

深入淺析MySQL從刪庫到跑路_高級(一)——數據完整性

2024-07-25 19:09:13
字體:
來源:轉載
供稿:網友

一、數據完整性簡介

1、數據完整性簡介

數據冗余是指數據庫中存在一些重復的數據,數據完整性是指數據庫中的數據能夠正確反應實際情況。

數據完整性是指數據的可靠性和準確性,數據完整性類型有四種:

A、實體完整性:實體的完整性強制表的標識符列或主鍵的完整性(通過唯一約束,主鍵約束或標識列屬性)。

B、域完整性:限制類型(數據類型),格式(通過檢查約束和規則),可能值范圍(通過外鍵約束,檢查約束,默認值定義,非空約束和規則)。

C、引用完整性:在刪除和輸入記錄時,引用完整性保持表之間已定義的關系。引用完整性確保鍵值在所有表中一致,不能引用不存在的值。如果一個鍵。

D、定義完整性:用戶自己定義的業務規則,比如使用觸發器實現自定義業務規則。

MySQL,刪庫,數據完整性

2、數據完整性實現方式

MySQL,刪庫,數據完整性

MySQL不支持Check約束,雖然可以在列上添加check約束,但不起作用。

二、實體完整性實現

1、實體完整性的實現簡介

實體完整性的實現有兩種方式:

A、主鍵約束:一張表只能有一列設置主鍵,值必須唯一,不允許為空,innoDB存儲引擎,主鍵就是索引。

B、唯一值約束:一張表可以有多個列添加唯一值約束,一直允許一條記錄為空值。

實體完整性,由主鍵和唯一性約束來實現,確保表中記錄有一列唯一標識。主鍵又分為Primary key和AUTO_INCREMENT PRIMARY KEY兩種。

2、主鍵

MySQL的主鍵名總是PRIMARY,當創建主鍵約束時,如果表的存儲引擎是innoDB,系統默認會在所在的列和列組合上建立對應的唯一索引,

主鍵約束相當于唯一約束與非空約束的組合,主鍵約束列不允許重復,也不允許出現空值;多列組合的主鍵約束,列都不允許為空值,并且組合的值不允許重復。每個表最多只允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別上創建。

A、創建表時指定主鍵

創建表時指定主鍵的方式一:

create table product ( productID int PRIMARY KEY, pName VARCHAR(10), price DOUBLE )ENGINE=MyISAM default CHARSET=utf8;

創建表時指定主鍵的方式二:

create table product ( productID int, pName VARCHAR(10), price DOUBLE, CONSTRAINT pk_s_productID PRIMARY KEY(productID) )ENGINE=MyISAM default CHARSET=utf8;

在指定主鍵的表中插入記錄時,不允許插入重復ID,如果不指定主鍵的值,默認為0。

MylSAM類型的存儲引擎不會在主鍵列上創建索引,表中記錄的存儲順序與插入順序相同。

MySQL,刪庫,數據完整性

InnoDB存儲引擎會自動在主鍵列上創建索引,插入的記錄會根據主鍵的值的順序排放。

alter table product ENGINE=InnoDB;

MySQL,刪庫,數據完整性

B、增加主鍵

alter table TStudent add primary key(studentid);

C、刪除主鍵

alter table TStudent drop primary key;

3、自增主鍵

AUTO_INCREMENT PRIMARY KEY

如果不指定主鍵值,會自動在現有的主鍵值的最大值上自動增加1作為新記錄的主鍵,主鍵值默認從1開始。可以在數據數據類型整數型的列上添加自增主鍵。

 MySQL,刪庫,數據完整性

A、創建表時指定自增自增列

create table product ( productID int PRIMARY KEY AUTO_INCREMENT not NULL, pName VARCHAR(10), price DOUBLE )ENGINE=MyISAM default CHARSET=utf8;

B、為現有的表指定自增列

alter table TStudent modify column studentID int PRIMARY KEY AUTO_INCREMENT;

C、刪除表中自增列

alter table TStudent modify column studentID int not NULL;

刪除自增列,仍然時主鍵,但是沒有自增長功能

4、復合主鍵

使用表的兩列或多列創建主鍵。

A、創建表時指定復合主鍵

create table student ( studentID int, id INT, sname VARCHAR(10), score int, PRIMARY KEY(studentid,id) )ENGINE=MyISAM default CHARSET=utf8;

B、給表增加復合主鍵

alter table student add PRIMARY KEY(studentID,id);

C、刪除復合主鍵

alter table student drop PRIMARY KEY;

5、唯一約束

UNIQUE KEY,唯一約束,指定某列和幾列組合的數據不能重復。

A、創建表時指定唯一性約束

create table score (sname VARCHAR(10) UNIQUE, score int not NULL );

B、給現有列增加唯一性約束

alter table score add CONSTRAINT us_sname UNIQUE(sname);

如果表中現有記錄有重復值,不允許添加唯一性約束??梢酝ㄟ^聚合函數,查找有重復的記錄,刪除,再創建唯一性約束。

C、創建復合唯一性索引

create table student ( studentID int, id INT, sname VARCHAR(10), score int, CONSTRAINT uc_id UNIQUE(studentID, id) )ENGINE=MyISAM default CHARSET=utf8;

D、刪除列的唯一性約束

alter table score drop index uc_sname;

三、域完整性

1、默認值

在表中插入一條新1的記錄時,如果沒有為該字段賦值,那么數據庫系統會自動為該字段賦一條默認值。

create table st(sid INT not null primary key auto_increment,sname varchar(10),subject varchar(20) default '軟件工程',entertime TIMESTAMP default now());

給表中一列添加默認值約束:

alert table st modify column subject VARCHAR(20) default '計算機科學與技術';

刪除表中一列的默認值約束:

alert table st modify column subject VARCHAR(20) default NULL;

2、創建非空約束

非空約束用于確保當前列的值不為空值,非空約束只能出現在表對象的列上。

Null類型特征:所有的類型的值都可以是null,包括int、float等數據類型 空字符串是不等于NULL,0也不等于NULL。

A、創建表時給列指定非空約束

create table score (sname VARCHAR(10) not NULL, score int not NULL );

B、給指定列指定非空約束

alert table score modify column score int not NULL;

C、刪除非空約束

alter table score modify column score int;

3、檢查check

check關鍵字,在插入新行或者更改已有行時才起作用,作用是阻止不滿足條件的值進入該列,對null值無效,因為插入null就相當于沒有插入。一個列可有多個check。

age int check(age between 10 and 20);

目前MySQL不支持check約束,微軟MSSQL支持Check約束,但創建表時可以指定Check約束,但不起作用。

四、參照完整性

1、參照完整性簡介

MySQL參照完整性一般是通過MySQL外鍵(foreign key)實現的。

外鍵(僅innoDB支持)所引用表的列必須是主鍵。

外鍵聲明包括三個部分:

A、哪個列或列組合是外鍵

B、指定外鍵參照的表和列

C、參照動作[cascade(級聯操作),restrict(拒絕操作),set null(設為空),no action,set default]。

如果外鍵約束指定了參照動作,主表記錄做修改,刪除,從表引用的列會做相應修改,或不修改,拒絕修改或設置為默認值。

引用表的列名必須是主鍵,且在刪除引用表時必須刪除引用關系或者刪除當前表。

2、創建表時指定外鍵

創建兩張表,學生表student和成績表score,成績表的sid列的取值參照學生表(學生表student的sid列設置為主鍵,且表的存儲引擎為innodb,成績表score的存儲引擎也必須設置為innodb)。

create table student(sid int not null primary key,sname varchar(20)) engine=innodb;create table score(sid int not null,mark INT,constraint score_fk FOREIGN KEY (sid)references student(sid) on delete cascade on update cascade) engine=innodb;

在學生表插入一條記錄

insert into student values (1,'孫悟空')

在成績表插入一條記錄,學號是1,成功。

instert into score values (1,98)

在成績表插入一條記錄,學號是2,失敗。

insert into score values (2,88)

 

在學生表插入學號是2的一條記錄

insert into student values (2,'唐僧')

 

再在成績表插入一條學號是2的記錄,成功,證明外鍵參照成功。

insert into score values (2,88);

 

3、刪除參照約束

alter table score drop foreign key score_fk;

 

4、給現有表增加參照約束

alter table score add constraint score_fk2 foreing key (sid) references student (sid);

 

5、驗證級聯動作刪除和更新

在score表創建的參照完整性,刪除動作和更新動作的參照動作選擇了cascade(級聯操作),當學生表的sid更新時,分數表score的相應的sid也會更新,當學生被刪除,分數表對應的sid的記錄也會自動刪除。

更新學生表學號是1的學生的學號為10

update student set sid = 10 where sid = 1

 

查看成績表,可以看到以前學號是1的已經變成了10

select * from score

 

刪除學生表學號是2的學生

delete from student where sid = 2

 

可以看到成績表,該學生的成績已經級聯刪除

select * from score

6、驗證級聯動作No Aaction

級聯動作設置為NO ACTION,如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作。

Restrict動作同no action,都是立即檢查外鍵約束。

將參照動作設置為no action,如果成績表score有該學生sid,將不能更改學生表student表的學生sid列,也不能刪除該學生。除非你先刪除該學生的成績,再刪除該學生。

刪除score表的外鍵約束

alter table score drop foreign key score_fk;

增加score表的sid列外鍵約束

ALTER TABLE `score` ADD CONSTRAINT `score_fk` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION;

更新學號是10的學生的學號,失敗

update student set sid = 11 where sid = 10

刪除學號是10的學生,失敗

delete from student where sid = 10

需要先刪除學生成績表中的記錄,再刪除該學生。

delete from student where sid=10delete from score where sid=10;

7、驗證級聯動作Set NULL

在父表上update/delete記錄時,將子表上匹配記錄的列設為null,要注意子表的外鍵不能為not null。

刪除成績表的外鍵約束

alter table score drop foreign key score_fk;

增加成績表的sid列外鍵約束,參照動作為set null

alter table score add constraint score_fk foreign key (sid) references student (sid) on delete set null on update set null;

修改成績表的sid列默認值為NULL

ALTER TABLE `score` MODIFY COLUMN `sid` INTEGER(11) DEFAULT NULL;insert into student values (1,'孫悟空')insert into student values (2,'豬八戒')insert into score values (1,98)insert into score values (2,88)

刪除學生表中學號1的學生

delete from student where sid = 1

查看成績表,成績表中的學號為1的列為NULL

select * from score

總結

以上所述是小編給大家介紹的深入淺析MySQL從刪庫到跑路_高級(一)——數據完整性,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区视频观看| 日韩大片免费观看视频播放| 5566日本婷婷色中文字幕97| 91精品国产91久久久久久久久| 青草成人免费视频| 国产亚洲综合久久| 国产精品你懂得| 亚洲成**性毛茸茸| 91在线高清免费观看| 欧美中文字幕视频在线观看| 亚洲欧洲在线看| 亚洲欧洲在线视频| 精品高清美女精品国产区| 亚洲精选在线观看| 精品久久久久久亚洲精品| 亚洲精品动漫100p| 亚洲一区二区三| 亚洲国产精彩中文乱码av| 精品中文字幕在线| 成人在线免费观看视视频| 国产精品h在线观看| 中文字幕亚洲图片| 亚洲女成人图区| 美女久久久久久久久久久| 国产精品综合不卡av| 欧美精品一区二区免费| 亚洲高清免费观看高清完整版| 精品亚洲国产成av人片传媒| 亚洲18私人小影院| 亚洲综合中文字幕在线| 欧美日韩午夜剧场| 亚洲久久久久久久久久久| 在线看片第一页欧美| 欧美日韩日本国产| 日韩视频中文字幕| 亚洲有声小说3d| 亚洲精品一区二区久| 日韩在线视频导航| 国模精品系列视频| 国产精品入口免费视| 国产成人在线一区二区| 日韩在线不卡视频| 亚洲va久久久噜噜噜久久天堂| 亚洲国产精品专区久久| 久久久999国产| 国内精久久久久久久久久人| 亚洲精品97久久| 欧美日韩ab片| 日韩精品中文字幕在线播放| 日韩欧美国产成人| 日韩中文字幕网| 亚洲图片欧美午夜| 欧美国产日韩一区二区三区| 久久久久久久成人| 欧洲一区二区视频| 中文字幕亚洲自拍| 欧美日韩成人免费| 国产精品美女久久久久久免费| 一区二区三区高清国产| 国产精品美乳在线观看| 欧美激情视频网址| 尤物精品国产第一福利三区| 国内外成人免费激情在线视频| 欧美黑人一区二区三区| 日本一本a高清免费不卡| 一区二区三区精品99久久| 日韩视频在线免费观看| 国产精品成人久久久久| 日韩精品在线视频| 国产精品1区2区在线观看| 欧美性猛交xxxxx免费看| 日韩美女免费视频| 美女啪啪无遮挡免费久久网站| 成人激情电影一区二区| 欧美成人一区二区三区电影| 亚洲国产精品国自产拍av秋霞| 国产精品中文在线| 国产亚洲在线播放| 日韩欧美大尺度| 欧美激情videos| 伊人精品在线观看| 另类专区欧美制服同性| 精品国内亚洲在观看18黄| 国产精品久久一区| 久久精品亚洲94久久精品| 国产视频亚洲视频| 国产精品主播视频| 国产精品第七影院| 日韩精品免费在线播放| 91系列在线观看| 亚洲最大的网站| 亚洲精品日韩丝袜精品| www日韩欧美| 国产精品专区一| 国产aaa精品| 国产亚洲人成a一在线v站| 91精品久久久久久久久中文字幕| 欧美大胆在线视频| 国外日韩电影在线观看| 国产精品亚洲视频在线观看| 欧美另类69精品久久久久9999| 欧美激情亚洲自拍| 国产一区二区三区在线免费观看| 夜夜嗨av色一区二区不卡| 国产精品igao视频| 一个色综合导航| 国产精品欧美在线| 亚洲www在线观看| 国产精品91久久| 色中色综合影院手机版在线观看| 隔壁老王国产在线精品| 91精品久久久久久久| 538国产精品一区二区免费视频| 一区二区成人精品| 九九热精品视频在线播放| 欧美日韩在线第一页| 欧美最猛性xxxxx(亚洲精品)| 国产综合久久久久久| 日韩美女视频免费看| 免费97视频在线精品国自产拍| 成人a在线视频| 色先锋资源久久综合5566| 成人黄色片网站| 欧美日韩第一视频| 日韩暖暖在线视频| y97精品国产97久久久久久| 久久久久久有精品国产| 国语自产精品视频在线看抢先版图片| 精品国产91乱高清在线观看| 欧美日韩人人澡狠狠躁视频| 国产精品69久久久久| 日韩欧美在线国产| 992tv成人免费影院| 92国产精品久久久久首页| www.亚洲免费视频| 午夜精品久久久久久久久久久久| 欧美肥婆姓交大片| 全亚洲最色的网站在线观看| 亚洲欧美一区二区三区在线| …久久精品99久久香蕉国产| 3344国产精品免费看| 国产精品久久久精品| 日本欧美爱爱爱| 久久精品亚洲热| 午夜精品久久久久久久99黑人| 国产精品久久久久久久久借妻| 欧美激情第1页| 国产精品美女在线观看| 91精品视频在线免费观看| 国产精品爽黄69| 久久精品国产亚洲| 日韩av影院在线观看| 97久久精品国产| 欧美日韩国产二区| 激情成人在线视频| 欧美午夜激情视频| 精品视频www| 亚洲一区二区福利| 午夜精品三级视频福利| 国产精品综合不卡av| 国产精品444| 狠狠躁夜夜躁久久躁别揉| 久久精品国产亚洲精品| 欧美日韩另类在线|