国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL開(kāi)發(fā)技巧——查詢、索引和完整性

這篇具有很好參考價(jià)值的文章主要介紹了MySQL開(kāi)發(fā)技巧——查詢、索引和完整性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?目錄

第1關(guān) 基本查詢的學(xué)習(xí)

查詢語(yǔ)句SELECT

頭歌實(shí)驗(yàn)

查詢語(yǔ)句SELECT

第2關(guān) 深入學(xué)習(xí)查詢語(yǔ)句

MySQL聚集函數(shù)

頭歌實(shí)驗(yàn)

MySQL聚集函數(shù)

第3關(guān) 視圖的創(chuàng)建和使用

查看數(shù)據(jù)庫(kù)中表的情況:

頭歌實(shí)驗(yàn)

第4關(guān) 索引和完整性

索引

頭歌實(shí)驗(yàn)

索引

數(shù)據(jù)完整性

域完整性

實(shí)體完整性

參照完整性

第1關(guān) 基本查詢的學(xué)習(xí)

查詢語(yǔ)句SELECT

以下是MySQL數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)通用的SELECT語(yǔ)法:

  1. SELECT column_name1,column_name2 FROM table_name [WHERE Clause] [OFFSET M ] [LIMIT N]
  • 查詢語(yǔ)句中可以指定一個(gè)或者多個(gè)表,表之間使用逗號(hào),分割,并使用WHERE語(yǔ)句來(lái)設(shè)定查詢條件
  • SELECT命令可以讀取一條或者多條記錄
  • 可以使用星號(hào)*來(lái)代替字段,返回表所有字段的數(shù)據(jù)
  • 可以使用LIMIT屬性來(lái)設(shè)定返回的記錄數(shù)。

頭歌實(shí)驗(yàn)

本關(guān)的應(yīng)用場(chǎng)景是企業(yè)員工數(shù)據(jù)庫(kù)的查詢。本關(guān)你將自己動(dòng)手完成對(duì)一個(gè)真實(shí)的員工數(shù)據(jù)庫(kù)YGGL的查詢:

  • 查找財(cái)務(wù)部年齡不低于所有研發(fā)部雇員年齡的雇員姓名、編號(hào)和性別。
  • 查找財(cái)務(wù)部收入在5200元以上的雇員姓名及其薪水收入支出情況。

上述查詢功能需要你掌握SELECT語(yǔ)句的基本語(yǔ)法、掌握子查詢、連接查詢的表示方法。下面就是對(duì)這些內(nèi)容的詳細(xì)教程,請(qǐng)先仔細(xì)閱讀。

相關(guān)知識(shí)

查詢語(yǔ)句SELECT

以下是MySQL數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)通用的SELECT語(yǔ)法:

  1. SELECT column_name1,column_name2 FROM table_name [WHERE Clause] [OFFSET M ] [LIMIT N]
  • 查詢語(yǔ)句中可以指定一個(gè)或者多個(gè)表,表之間使用逗號(hào),分割,并使用WHERE語(yǔ)句來(lái)設(shè)定查詢條件
  • SELECT命令可以讀取一條或者多條記錄
  • 可以使用星號(hào)*來(lái)代替字段,返回表所有字段的數(shù)據(jù)
  • 可以使用LIMIT屬性來(lái)設(shè)定返回的記錄數(shù)。

命令行的操作

首先我們來(lái)通過(guò)命令行操作復(fù)習(xí)上一階段所學(xué)內(nèi)容吧!

下面幾個(gè)表來(lái)自于我們用于實(shí)驗(yàn)的員工管理系統(tǒng)的數(shù)據(jù)庫(kù)YGGL,通過(guò)命令行新建數(shù)據(jù)庫(kù)數(shù)據(jù)表并插入數(shù)據(jù)吧!

  1. CREATE DATABASE YGGL;

使用數(shù)據(jù)庫(kù):

  1. use YGGL;

員工信息表emp表結(jié)構(gòu):

列名 數(shù)據(jù)類型 長(zhǎng)度 是否允許為空值 說(shuō)明
eid char 6 員工編號(hào),主鍵
ename char 10 姓名
birth date 生日
sex int 1 性別
addr char 20 地址
zip char 6 郵編
tel char 12 電話號(hào)碼
did char 3 部門編號(hào),外鍵
  1. create table emp
  2. (
  3. eid char(6) NOT NULL PRIMARY KEY,
  4. ename char(10) NOT NULL,
  5. birth date NOT NULL,
  6. sex int(1) NOT NULL,
  7. addr char(20) NULL,
  8. zip char(6) NULL,
  9. tel char(12) NULL,
  10. did char(3) NOT NULL
  11. );

數(shù)據(jù)樣本:

eid ename birth sex addr zip tel did
001 wl 1971-01-23 1 zsl 210003 12345668 2
008 wrh 1981-03-28 1 bjdl 210001 12345621 1
010 wxr 1987-12-09 1 spl 210006 12345661 1
018 ll 1965-07-30 0 zsdl 210002 12345601 1
201 lm 1977-10-18 1 hjl 210013 12345608 5
208 zj 1970-09-28 1 plx 210004 12345617 5
991 zm 1984-08-10 0 zsl 210003 12345622 3
006 zsb 1979-10-01 1 jfl 210010 12345618 5
678 lt 1982-04-02 1 zsbl 210008 12345636 3
566 lym 1973-09-20 1 rhl 210001 12345691 4
759 yf 1983-11-18 1 bjxl 210002 12345601 4
209 cll 1974-09-03 0 hzl 210018 12345658 4
  1. insert into emp values
  2. ('001','wl','1971-01-23',1,'zsl','210003','12345668','2'),
  3. ('008','wrh','1981-03-28',1,'bjdl','210001','12345621','1'),
  4. ('010','wxr','1987-12-09',1,'spl','210006','12345661','1'),
  5. ('018','ll','1965-07-30',0,'zsdl','210002','12345601','1'),
  6. ('201','lm','1977-10-18',1,'hjl','210013','12345608','5'),
  7. ('208','zj','1970-09-28',1,'plx','210004','12345617','5'),
  8. ('991','zm','1984-08-10',0,'zsl','210003','12345622','3'),
  9. ('006','zsb','1979-10-01',1,'jfl','210010','12345618','5'),
  10. ('678','lt','1982-04-02',1,'zsbl','210008','12345636','3'),
  11. ('566','lym','1973-09-20',1,'rhl','210001','12345691','4'),
  12. ('759','yf','1983-11-18',1,'bjxl','210002','12345601','4'),
  13. ('209','cll','1974-09-03',0,'hzl','210018','12345658','4');

部門信息表dept表結(jié)構(gòu):

列名 數(shù)據(jù)類型 長(zhǎng)度 是否允許為空值 說(shuō)明
did char 3 部門編號(hào),主鍵
dname char 20 部門名
note varchar 100 備注
  1. create table dept
  2. (
  3. did char(3) NOT NULL PRIMARY KEY,
  4. dname char(20) NOT NULL,
  5. note varchar(100) NULL
  6. );

數(shù)據(jù)樣本:

did dname note 說(shuō)明
1 cwb NULL 財(cái)務(wù)部
2 rlzyb NULL 人力資源部
3 jlbgs NULL 經(jīng)理辦公室
4 yfb NULL 研發(fā)部
5 scb NULL 市場(chǎng)部
  1. insert into dept values
  2. ('1','cwb',NULL),
  3. ('2','rlzyb',NULL),
  4. ('3','jlbgs',NULL),
  5. ('4','yfb',NULL),
  6. ('5','scb',NULL);

工資表sal表結(jié)構(gòu):

列名 數(shù)據(jù)類型 長(zhǎng)度 是否允許為空值 說(shuō)明
eid char 6 員工編號(hào),主鍵
income int 8 收入
outcome int 8 支出
  1. create table sal
  2. (
  3. eid char(6) NOT NULL PRIMARY KEY,
  4. income int(8) NOT NULL,
  5. outcome int(8) NOT NULL
  6. );

數(shù)據(jù)樣本:

eid income outcome
001 5100 1123
008 4582 1088
201 5569 1185
006 4987 1079
209 5066 1108
566 5980 1210
991 6259 1281
010 5860 1198
018 5347 1180
759 5531 1199
678 5240 1121
208 4980 1100
  1. insert into sal values
  2. ('001',5100,1123),
  3. ('008',4582,1088),
  4. ('201',5569,1185),
  5. ('006',4987,1079),
  6. ('209',5066,1108),
  7. ('566',5980,1210),
  8. ('991',6259,1281),
  9. ('010',5860,1198),
  10. ('018',5347,1180),
  11. ('759',5531,1199),
  12. ('678',5240,1121),
  13. ('208',4980,1100);

查詢每個(gè)雇員的所有數(shù)據(jù):

  1. select * from emp;

查詢每個(gè)雇員的地址和電話:

  1. select ename,addr,tel from emp;

查詢eid001的雇員地址和電話:

  1. select ename,addr,tel from emp where eid='001';

查詢emp中所有女雇員的地址和電話,使用as子句將結(jié)果中各列的標(biāo)題分別指定為地址和電話:

  1. select ename as fname,addr as faddr,tel as ftel from emp where sex=0;

計(jì)算每個(gè)雇員的實(shí)際收入:

  1. select did,income-outcome as money from sal;

找出所有姓名是w開(kāi)頭的雇員的部門號(hào):

  1. select did from emp where name like 'w%';
  • %表示任意符號(hào)

找出所有收入在5000-6000之間的雇員號(hào)碼:

  1. select eid from sal where income between 5000 and 6000;
  • BETWEEN運(yùn)算符用于WHERE表達(dá)式中,選取介于兩個(gè)值之間的數(shù)據(jù)范圍。BETWEENAND一起搭配使用。通常value1應(yīng)該小于?value2。當(dāng) BETWEEN 前面加上NOT運(yùn)算符時(shí),表示與BETWEEN相反的意思,即選取這個(gè)范圍之外的值。

子查詢的使用

所謂子查詢,即在查詢語(yǔ)句中內(nèi)嵌其他查詢語(yǔ)句。下面,我們?nèi)岳^續(xù)在命令行的操作中學(xué)習(xí)。

查找在cwb工作的雇員情況:

  1. select * from emp where did=(select did from dept where dname='cwb');

連接查詢的使用

比如查詢每個(gè)雇員的薪水情況,但是我們要返回雇員的姓名,而在sal表中沒(méi)有雇員姓名,這個(gè)時(shí)候就需要我們通過(guò)員工編號(hào)連接emp和sal兩張表。

  1. select emp.ename,sal.income from emp,sal where emp.eid=sal.eid;

一些關(guān)鍵字

  • any關(guān)鍵字:

假設(shè)any內(nèi)部的查詢語(yǔ)句返回的結(jié)果個(gè)數(shù)是三個(gè),那么:

  1. select ...from ... where a > any(...)

等價(jià)于

  1. select ...from ... where a > result1 or a > result2 or a > result3

ALL關(guān)鍵字與any關(guān)鍵字類似,但其含義不同,相當(dāng)于上面的or改成andsome關(guān)鍵字和any關(guān)鍵字是一樣的功能。

  • IN運(yùn)算符用于WHERE表達(dá)式中,以列表項(xiàng)的形式支持多個(gè)選擇
  1. WHERE column IN (value1,value2,...)
  2. WHERE column NOT IN (value1,value2,...)

當(dāng)IN前面加上NOT運(yùn)算符時(shí),表示與IN相反的意思,即不在這些列表項(xiàng)內(nèi)選擇。

  • UNION操作符用于連接兩個(gè)以上的SELECT語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。
     
      
    1. SELECT expression_1,expression_2,...,expression_n FROM tables [WHERE conditions]
    2. UNION [ALL | DISTINCT]
    3. SELECT expression_1,expression_2,...,expression_n FROM tables[WHERE conditions];
    參數(shù)expression_1,?expression_2, ...?expression_n是要檢索的列,tables是要檢索的數(shù)據(jù)表,WHERE conditions是檢索條件,DISTINCT是刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下?UNION操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以DISTINCT修飾符對(duì)結(jié)果沒(méi)啥影響。而ALL可以返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。

編程要求

編寫查詢語(yǔ)句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)YGGL(包括表empdeptsal)的相關(guān)查詢:

查詢一:使用子查詢的方法,查找財(cái)務(wù)部cwb年齡不低于所有研發(fā)部yfb雇員年齡的雇員姓名ename、編號(hào)eid和性別sex。

查詢二:使用連接查詢的方式,查找財(cái)務(wù)部cwb收入income在5200元以上的雇員姓名ename及其薪水收入income支出outcome情況。

//請(qǐng)?jiān)谙旅嫜a(bǔ)齊查詢一的MySQL語(yǔ)句
/*********begin*********/
select ename,eid,sex from emp
    where did in
    (select did from dept
        where dname='cwb'
    )
/*********end*********/
    and
    birth<=all
        (select birth from emp
            where did in
                (select did from dept
                    where dname='yfb'
                )
        );

//請(qǐng)?jiān)谙旅孑斎氩樵兌腗ySQL語(yǔ)句
/*********begin*********/
select ename,income,outcome
    from emp,sal,dept
    where emp.eid=sal.eid and
        emp.did=dept.did and
        dname='cwb' and income>5200;


/*********end*********/

第2關(guān) 深入學(xué)習(xí)查詢語(yǔ)句

MySQL聚集函數(shù)

函數(shù) 說(shuō)明
COUNT() 返回某列的行數(shù)
MAX() 返回某列最大值
MIN() 返回某列最小值
AVG() 返回某列平均值
SUM() 返回某列值之和

頭歌實(shí)驗(yàn)

本關(guān)的應(yīng)用場(chǎng)景是企業(yè)員工數(shù)據(jù)庫(kù)的查詢。上一關(guān)中簡(jiǎn)單的查詢滿足不了需求,比如:

  • 求財(cái)務(wù)部雇員的總?cè)藬?shù);
  • 求各部門的雇員數(shù);
  • 將各雇員的姓名按收入由低到高排列。

上述查詢功能需要你掌握數(shù)據(jù)匯總、掌握GROUP BY和ORDER BY子句的作用和使用方法。下面就是對(duì)這些內(nèi)容的詳細(xì)教程,請(qǐng)先仔細(xì)閱讀。

相關(guān)知識(shí)

首先我們還是使用命令行操作登錄數(shù)據(jù)庫(kù)系統(tǒng),創(chuàng)建數(shù)據(jù)庫(kù)YGGL、創(chuàng)建數(shù)據(jù)表emp、deptsal并插入數(shù)據(jù)。

MySQL聚集函數(shù)

函數(shù) 說(shuō)明
COUNT() 返回某列的行數(shù)
MAX() 返回某列最大值
MIN() 返回某列最小值
AVG() 返回某列平均值
SUM() 返回某列值之和

求財(cái)務(wù)部雇員的平均收入:

  1. select avg(income) as avgincome
  2. from sal
  3. where eid in
  4. (select eid
  5. from emp
  6. where did=
  7. (select did
  8. from dept
  9. where dname='cwb'));

GROUP BY 和 ORDER BY 子句的使用

GROUP BY語(yǔ)句根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。

  1. SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;

如果我們需要對(duì)讀取的數(shù)據(jù)進(jìn)行排序,我們就可以使用MySQL的ORDER BY子句來(lái)設(shè)定你想按哪個(gè)字段哪種方式來(lái)進(jìn)行排序,再返回搜索結(jié)果。

  1. SELECT field1, field2,...,fieldN table_name1,table_name2..., ORDER BY field1,[field2...] [ASC [DESC]]
  • 你可以設(shè)定多個(gè)字段來(lái)排序。
  • 你可以使用?ASC?(升序)或?DESC(降序) 關(guān)鍵字來(lái)設(shè)置查詢結(jié)果是按升序或降序排列。 默認(rèn)情況下,它是按升序排列。
  • 你可以添加?WHERE...LIKE?子句來(lái)設(shè)置條件。

編程要求

在右側(cè)代碼窗口區(qū)域的指定位置編寫查詢語(yǔ)句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)YGGL(包括表empdeptsal)的相關(guān)查詢:
查詢一:求財(cái)務(wù)部雇員的總?cè)藬?shù);
查詢二:求各部門的雇員數(shù);
查詢?nèi)簩⒏鞴蛦T的姓名按收入由低到高排列(提示:使用連接查詢)。

//請(qǐng)?jiān)谙旅孑斎氩樵円坏腗ySQL語(yǔ)句
/*********begin*********/


select count(eid)
    from emp
    where did=
        (select did
            from dept
                where dname='cwb');

/*********end*********/

//請(qǐng)?jiān)谙旅孑斎氩樵兌腗ySQL語(yǔ)句
/*********begin*********/

select count(eid)
    from emp
    group by did;
   
/*********end*********/

//請(qǐng)?jiān)谙旅孑斎氩樵內(nèi)腗ySQL語(yǔ)句
/*********begin*********/

select emp.ename
    from emp,sal
    where emp.eid=sal.eid
    order by income;

/*********end*********/

第3關(guān) 視圖的創(chuàng)建和使用

查看數(shù)據(jù)庫(kù)中表的情況:

  1. show tables;

頭歌實(shí)驗(yàn)

本關(guān)的應(yīng)用場(chǎng)景是企業(yè)員工數(shù)據(jù)庫(kù)的查詢。視圖也是為了實(shí)現(xiàn)多樣地查看表中的數(shù)據(jù),比如限制財(cái)務(wù)部的經(jīng)理只能看到財(cái)務(wù)部的信息。本關(guān)你創(chuàng)建cx_sal視圖并使用該視圖查看財(cái)務(wù)部雇員薪水情況。你需要掌握視圖的使用方法~

相關(guān)知識(shí)

首先我們還是使用命令行操作登錄數(shù)據(jù)庫(kù)系統(tǒng),創(chuàng)建數(shù)據(jù)庫(kù)YGGL、創(chuàng)建數(shù)據(jù)表emp、deptsal并插入數(shù)據(jù)。

現(xiàn)在,你輸入以下代碼查看數(shù)據(jù)庫(kù)中表的情況:

  1. show tables;

限制查看雇員的某些情況:

  1. create or replace view cx_emp
  2. as
  3. select eid,ename,birth,sex,did
  4. from emp;

創(chuàng)建該視圖后,我們可以在數(shù)據(jù)庫(kù)中查看所有的表,是不是變成了下面這樣?

MySQL開(kāi)發(fā)技巧——查詢、索引和完整性

接下來(lái)我們輸入下面的命令來(lái)查看該視圖:

  1. select * from cx_emp;

為了了解視圖的特性,我們向視圖cx_emp中插入一條記錄:

eid ename birth sex did
888 zhj 1983-09-25 1 3

現(xiàn)在,我們查看一下emp表,你是不是已經(jīng)成功把這條記錄插入到emp表中了呢?這就是視圖,原表和視圖之間是同步的。

接下來(lái)請(qǐng)你嘗試以下操作。

zhj從經(jīng)理辦公室(部門編號(hào)3)轉(zhuǎn)到市場(chǎng)部(部門編號(hào)為5):

  1. update cx_emp set did='5'
  2. where ename='zhj';

請(qǐng)你再次查看emp表核查是否修改成功。

編程要求

請(qǐng)你思考,我們想限制各部門的經(jīng)理只能查找本部雇員的薪水情況該怎么操作呢?比如財(cái)務(wù)部,只讓財(cái)務(wù)部的經(jīng)理查看本部門雇員姓名和收入、支出情況。

請(qǐng)你創(chuàng)建cx_sal視圖并使用該視圖查看財(cái)務(wù)部雇員薪水情況ename、incomeoutcome。?

//請(qǐng)?jiān)谙旅孑斎雱?chuàng)建cx_sal的視圖的MySQL語(yǔ)句
/*********begin*********/

create or replace view cx_sal
as
    select ename,income,outcome
        from emp,sal,dept
        where emp.eid=sal.eid and
            emp.did=dept.did and
            dname='cwb';
/*********end*********/

//請(qǐng)?jiān)谙旅孑斎氩樵冐?cái)務(wù)部雇員薪水情況視圖的MySQL語(yǔ)句
/*********begin*********/
select * from cx_sal;
/*********end*********/

第4關(guān) 索引和完整性

索引

索引是根據(jù)表中一列或若干列按照一定的順序建立的列值與記錄行之間的對(duì)應(yīng)關(guān)系表。在列上創(chuàng)建了索引之后,查找數(shù)據(jù)是可以直接根據(jù)該列上的索引找到對(duì)應(yīng)行的位置,從而快速找到數(shù)據(jù)。

索引類型分成下列幾個(gè):

  • 普通索引(INDEX):基本索引類型
  • 唯一性索引(UNIQUE):該列的所有值沒(méi)有重復(fù)
  • 主鍵(PRIMARY KEY):一種唯一性索引,一個(gè)表只能有一個(gè)主鍵
  • 全文索引(FLLTEXT):只能在varchar或text類型上創(chuàng)建

頭歌實(shí)驗(yàn)

任務(wù)描述

經(jīng)理覺(jué)得查找數(shù)據(jù)的速度偏慢、精度較低,這個(gè)時(shí)候,你需要?jiǎng)?chuàng)建索引來(lái)使查詢的速度更快,使用完整性來(lái)提高查詢精度。

上述查詢功能需要你掌握索引的使用方法、理解數(shù)據(jù)完整性的概念及分類、掌握各種數(shù)據(jù)完整性的實(shí)現(xiàn)方法。下面就是對(duì)這些內(nèi)容的詳細(xì)教程,請(qǐng)先仔細(xì)閱讀。

背景知識(shí)

索引

索引是根據(jù)表中一列或若干列按照一定的順序建立的列值與記錄行之間的對(duì)應(yīng)關(guān)系表。在列上創(chuàng)建了索引之后,查找數(shù)據(jù)是可以直接根據(jù)該列上的索引找到對(duì)應(yīng)行的位置,從而快速找到數(shù)據(jù)。

索引類型分成下列幾個(gè):

  • 普通索引(INDEX):基本索引類型
  • 唯一性索引(UNIQUE):該列的所有值沒(méi)有重復(fù)
  • 主鍵(PRIMARY KEY):一種唯一性索引,一個(gè)表只能有一個(gè)主鍵
  • 全文索引(FLLTEXT):只能在varchar或text類型上創(chuàng)建

語(yǔ)法格式:

  1. //創(chuàng)建
  2. CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名稱 ON 表名{字段名稱[(長(zhǎng)度)] [ASC|DESC]}
  3. //修改
  4. ALTER TABLE tbl_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX索引名稱(字段名稱[(長(zhǎng)度)][ASC|DESC]);

下面我們用命令行操作試一試。

在創(chuàng)建好整個(gè)數(shù)據(jù)庫(kù)的基礎(chǔ)上,對(duì)YGGL數(shù)據(jù)庫(kù)的emp表的ename列建立索引:

  1. create index emp_name_idx
  2. on emp(ename);

查看是否創(chuàng)建成功:

  1. show index from emp;

重命名索引:

  1. alter index emp_name_idx
  2. rename to emp_idx;

刪除索引:

  1. drop index emp_idex;

數(shù)據(jù)完整性

為了防止不合規(guī)定的數(shù)據(jù)進(jìn)入基表中,我們定義完整性規(guī)則。分為:域完整性、實(shí)體完整性和參照完整性。

域完整性

域完整性又叫列完整性,主要是對(duì)一列的數(shù)據(jù)進(jìn)行約束。比如emp中限定sex的值只能為12中的一個(gè),可以在創(chuàng)建表時(shí)將sex做以下定義:

  1. sex int(1) check(sex='1' or sex='2') NOT NULL,

或者在所有字段定義完成后加一句:

  1. constraint ch_sex check(sex='1' or sex='2')

下面,我們?cè)诿钚兄型ㄟ^(guò)修改表的方式創(chuàng)建約束:

  1. alter table emp
  2. add(constraint ch_sex check(sex='1' or sex='2'));

刪除約束:

  1. alter table emp
  2. drop constraint ch_sex;

實(shí)體完整性

又叫行完整性,要求每一行都有一個(gè)唯一的標(biāo)識(shí)符。比如emp中的員工eid是唯一的,才能唯一確定某一個(gè)人。通過(guò)unique約束和primary key約束可以實(shí)現(xiàn)實(shí)體完整性。

同樣的,在創(chuàng)建表時(shí)對(duì)tel創(chuàng)建約束應(yīng)該將tel定義為:

  1. tel char(12) NULL constraint un_tel unique,

下面我們?cè)诿钚兄型ㄟ^(guò)修改表的方式創(chuàng)建約束:

  1. alter table emp
  2. add constraint un_tel unique(tel);

參照完整性

又叫引用完整性,它保證主表和從表中的數(shù)據(jù)一致性,實(shí)現(xiàn)方式是定義外鍵與主鍵。例如empsal表,eidemp中是外鍵,而在saleid定義為主鍵。

  • 從表不能引用主表不存在的鍵值
  • 主表中的值更改了,則從表中所有引用都也要修改
  • 若要?jiǎng)h除主表中的記錄,應(yīng)先刪除從表中匹配的記錄

如果在創(chuàng)建sal表時(shí)想創(chuàng)建參照完整性使emp表中所有eid都要出現(xiàn)在sal中,可以在定義empeid時(shí)這樣定義:

  1. eid char(6) NOT NULL references sal(eid),

下面我們?cè)诿钚兄型ㄟ^(guò)修改表的方式定義:

  1. alter table emp
  2. add constraint sal_id foreign key(eid)
  3. references sal(eid);

編程要求

在已經(jīng)創(chuàng)建好整個(gè)YGGL數(shù)據(jù)庫(kù)的基礎(chǔ)上進(jìn)行以下操作:

建立索引pk_xs_bak:對(duì)empeid建立索引;
實(shí)現(xiàn)域完整性ch_tel:為emptel建立check約束,其值只能為0-9的數(shù)字;
實(shí)現(xiàn)實(shí)體完整性un_dept:為deptdname創(chuàng)建唯一性索引;
實(shí)現(xiàn)參照完整性fk_emp:將emp中的did列為外鍵。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473881.html

//請(qǐng)?jiān)谙旅孑斎雱?chuàng)建索引的MySQL語(yǔ)句
/*********begin*********/
create index pk_xs_bak
on emp(eid);

/*********end*********/

//請(qǐng)?jiān)谙旅孑斎雽?shí)現(xiàn)域完整性的MySQL語(yǔ)句
/*********begin*********/

alter table emp
    add(constraint ch_tel check(tel between 0 and 9));
/*********end*********/

//請(qǐng)?jiān)谙旅孑斎雽?shí)現(xiàn)實(shí)體完整性的MySQL語(yǔ)句
/*********begin*********/
alter table dept
add constraint un_dept unique(dname);

/*********end*********/

//請(qǐng)?jiān)谙旅孑斎雽?shí)現(xiàn)參照完整性的MySQL語(yǔ)句
/*********begin*********/

alter table emp
    add constraint sal_id foreign key(eid)
        references sal(eid);

/*********end*********/

到了這里,關(guān)于MySQL開(kāi)發(fā)技巧——查詢、索引和完整性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 二級(jí)MySQL(四)——完整性約束

    二級(jí)MySQL(四)——完整性約束

    一種規(guī)則,限制存儲(chǔ)的數(shù)據(jù) 保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確,有效和完整 分類: 非空——得有值——NOT NULL 唯一——唯一的,不重復(fù)——UNIQUE 主鍵——非空且唯一——PRIMARY KEY 默認(rèn)——給出默認(rèn)值——DEFAULT 檢查——保證某個(gè)條件——CHECK 外鍵——兩張表的連接——FOREIGN KEY 主鍵

    2024年02月11日
    瀏覽(21)
  • 【MySQL事務(wù)】保證數(shù)據(jù)完整性的利器

    【MySQL事務(wù)】保證數(shù)據(jù)完整性的利器

    事務(wù): 事務(wù)就是將多個(gè)SQL給打包在一起,組成一個(gè)整體。組成這個(gè)整體的各個(gè)SQL,要么全部成功,要么全部失敗。 舉例說(shuō)明: 情人節(jié)到了,滑稽老鐵打算給他女朋友小美發(fā)給紅包,但是他又害怕小美不收,于是他想到了一個(gè)辦法就是通過(guò)銀行卡進(jìn)行轉(zhuǎn)賬。他給小美轉(zhuǎn)賬了

    2024年02月08日
    瀏覽(31)
  • 【MySQL】數(shù)據(jù)庫(kù)完整性和安全性

    【MySQL】數(shù)據(jù)庫(kù)完整性和安全性

    目錄 ? 一、完整性 1.概念 2.sql語(yǔ)言支持的兩種約束 ? ??2.1靜態(tài)約束 ? ? ? ? ?撤銷追加約束 ? ? ? ? ?斷言 ? ??2.3動(dòng)態(tài)約束 ? ? ? ? ??觸發(fā)器 二、安全性 用DBMS對(duì)數(shù)據(jù)庫(kù)實(shí)現(xiàn)的兩個(gè)特性? 1.概念 指dbms保證的db的一種特性,在任何情況下的正確性、有效性、一致性 原理圖

    2023年04月24日
    瀏覽(30)
  • Mysql列的完整性約束最詳細(xì)教程之一——詳解

    Mysql列的完整性約束最詳細(xì)教程之一——詳解

    目錄 前言 一、主鍵約束 1.設(shè)置字段的主鍵約束(PRIMARY KEY,PK) 1.單字段主鍵 2.多字段主鍵 二、設(shè)置表字段的外鍵約束 1.簡(jiǎn)介 2.語(yǔ)句格式 三、設(shè)置表字段的非空約束(NOT NULL, NK) 1.簡(jiǎn)介 2.語(yǔ)句格式 四、設(shè)置字段值自動(dòng)增加(AUTO_INCREMENT) ?1.語(yǔ)句格式 ? 2.實(shí)際應(yīng)用 五、設(shè)置

    2024年02月04日
    瀏覽(27)
  • MySQL修煉手冊(cè)11:事務(wù)處理:確保數(shù)據(jù)的一致性與完整性

    在探索數(shù)據(jù)管理的世界中,理解如何在數(shù)據(jù)庫(kù)中使用事務(wù)處理,無(wú)疑是一項(xiàng)關(guān)鍵的能力。在處理復(fù)雜的數(shù)據(jù)庫(kù)操作,尤其是在你試圖在多個(gè)表或數(shù)據(jù)庫(kù)中更新數(shù)據(jù)時(shí),事務(wù)可以確保這些更改具有原子性、一致性、隔離性和持久性,即ACID。因此,掌握事務(wù)對(duì)任何數(shù)據(jù)庫(kù)專業(yè)人員

    2024年01月21日
    瀏覽(25)
  • 軟件測(cè)試|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    軟件測(cè)試|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    簡(jiǎn)介 主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了便于 DBMS 更快的查找到表中的記錄,都會(huì)在表中設(shè)置一個(gè)主鍵。 MySQL是一種廣泛使用的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其支持多種數(shù)據(jù)約束,其中主鍵約束是其中最重要的之一

    2024年02月02日
    瀏覽(25)
  • Mysql列的完整性約束詳解(設(shè)置表字段的非空約束(NOT NULL, NK))

    Mysql列的完整性約束詳解(設(shè)置表字段的非空約束(NOT NULL, NK))

    文章目錄 系列文章目錄 一、設(shè)置表字段的非空約束(NOT NULL, NK) 1.簡(jiǎn)介 2.語(yǔ)句格式 總結(jié) 一、 設(shè)置表字段的非空約束(NOT NULL, NK) ????????當(dāng)數(shù)據(jù)庫(kù)表中的某個(gè)字段上的內(nèi)容不希望設(shè)置為NULL時(shí),可以使用NK約束進(jìn)行設(shè)置。NK約束在創(chuàng)建數(shù)據(jù)庫(kù)表時(shí)為某些字段上加上“NOT

    2023年04月26日
    瀏覽(25)
  • 信號(hào)完整性(SI)電源完整性(PI)學(xué)習(xí)筆記(一)信號(hào)完整性分析概論

    信號(hào)完整性分析概論 1.信號(hào)完整性(SI):指在高速產(chǎn)品中由互聯(lián)線引起的所有問(wèn)題;研究當(dāng)互聯(lián)線與數(shù)字信號(hào)的電壓電流波形相互作用時(shí),其電氣特性如何影響產(chǎn)品的性能,SI又叫信號(hào)波形失真。 2.電源完整性(PI):指為有源器件供電的互聯(lián)線及各相關(guān)元件上的噪聲;PDN(

    2024年02月04日
    瀏覽(42)
  • 信號(hào)完整性與電源完整性分析-Eric Bogatin

    信號(hào)完整性與電源完整性分析-Eric Bogatin

    第一章 信號(hào)完整性概論 1-任何一段互聯(lián),無(wú)論線長(zhǎng)和形狀,也無(wú)論信號(hào)的上升邊如何,都是一個(gè)由信號(hào)路徑和返回路徑構(gòu)成的傳輸線。信號(hào)在互聯(lián)前進(jìn)的每一步,都會(huì)感受到瞬時(shí)阻抗。若阻抗恒為常量,信號(hào)質(zhì)量就會(huì)優(yōu)良 2-信號(hào)網(wǎng)絡(luò)不僅包括信號(hào)路徑,還包括信號(hào)電流的返回

    2024年02月06日
    瀏覽(39)
  • 5.1 實(shí)體完整性

    5.1 實(shí)體完整性

    第5章 數(shù)據(jù)庫(kù)完整性筆記 定義 : 完整性 :確保數(shù)據(jù)的正確性和相容性。 正確性 :數(shù)據(jù)與現(xiàn)實(shí)世界語(yǔ)義相符、反映實(shí)際狀況。 相容性 :同一對(duì)象在數(shù)據(jù)庫(kù)的不同關(guān)系表中數(shù)據(jù)邏輯上是一致的。 示例 : 學(xué)號(hào)唯一性。 性別限定為男或女。 本科學(xué)生年齡為14-50之間的整數(shù)。 學(xué)

    2024年02月06日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包