最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探討MySQL 約束下的查詢(xún)功能

 更新時(shí)間:2024年08月19日 12:14:25   作者:robin_suli  
這篇文章主要介紹了探討MySQL 約束下的查詢(xún)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一. 數(shù)據(jù)庫(kù)約束:

1.約束類(lèi)型匯總:

約束類(lèi)型                    說(shuō)明             
NULL約束使用NOT NULL指定列不為 空
UNIQUE唯一約束指定列為唯一的、不重復(fù)的
DEFAULT默認(rèn)值約 束指定列為空時(shí)的默認(rèn)值
主鍵約束(primary key)

NOT NULL 和 UNIQUE 的 結(jié)合

外鍵約束

關(guān)聯(lián)其他表的主鍵或唯一鍵

語(yǔ)法:foreign key (列) references 主表(列)

CHECK約束保證列中的值符合指定的條件

1.1 NULL約束:

創(chuàng)建表時(shí),可以指定某列不為空:

DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT NOT NULL,
   sn INT,
   name VARCHAR(50),
   qq_mail VARCHAR(50)
);

1.2 DEFAULT:默認(rèn)值約束:

mysql> CREATE TABLE student (
    ->    id INT NOT NULL,
    ->    name VARCHAR(20) DEFAULT '默認(rèn)為無(wú)名氏');

1.3 PRIMARY KEY:主鍵約束:

CREATE TABLE student2 (
    -> id bigint primary key auto_increment,
    -> name VARCHAR(20) DEFAULT '默認(rèn)為無(wú)名氏');

這里還使用了auto_increment,在插入時(shí)不指定,可以讓id字段自增。   

  注意這里一個(gè)表不可以有多個(gè)主鍵,都是可以有復(fù)合主鍵

如下:

1.4 FOREIGN KEY:外鍵約束:

外鍵用于關(guān)聯(lián)其他表的主鍵或唯一鍵

語(yǔ)法:

foreign key (本表要關(guān)聯(lián)的字段) references 主表(列)

例子:創(chuàng)建班級(jí)表classes,id為主鍵;

創(chuàng)建學(xué)生表student,一個(gè)學(xué)生對(duì)應(yīng)一個(gè)班級(jí),一個(gè)班級(jí)對(duì)應(yīng)多個(gè)學(xué)生。使用id為主鍵, classes_id為外鍵,關(guān)聯(lián)班級(jí)表id。

 create table student(
    -> id INT PRIMARY KEY auto_increment,
    -> class_id int,
    -> foreign key (class_id) references class (id)
    -> );
create table class(
    -> id INT PRIMARY KEY auto_increment,
    -> name varchar(50)
    -> );
 

注意:這里的class_id的類(lèi)型,要和主表class的id類(lèi)型一致這里都是(int)

不然會(huì)報(bào)類(lèi)型不兼容錯(cuò)誤導(dǎo)致定義失敗

二. 表的設(shè)計(jì):

1.設(shè)計(jì)表的時(shí)候要遵循三大范式。

第一范式:表里的字段不可以再進(jìn)行拆分

第二范式:再滿(mǎn)足第一范式的基礎(chǔ)上,不存在非關(guān)鍵字段對(duì)任意候選鍵的部分函數(shù)依賴(lài)

(簡(jiǎn)單來(lái)說(shuō)就是非主鍵字段對(duì)任意主鍵,外鍵,唯一鍵的部分函數(shù)依賴(lài))

小結(jié):一個(gè)表沒(méi)有復(fù)合主鍵就天然滿(mǎn)足第二范式

第三范式:再滿(mǎn)足第二范式的基礎(chǔ)上,不存在非關(guān)鍵字段對(duì)任意候選鍵的傳遞依賴(lài)

第三范式可以解決數(shù)據(jù)冗余,更新異常,插入異常,刪除異常等問(wèn)題

2.設(shè)計(jì)時(shí)表之間的三大關(guān)系:

一.  一對(duì)一:比如用戶(hù)和賬號(hào)信息,可以建立在一個(gè)表中

 二.  一對(duì)多:一個(gè)班級(jí)有多個(gè)學(xué)生設(shè)計(jì)如下:

三.  多對(duì)多:一個(gè)學(xué)生可以選多門(mén)課,一門(mén)課可以被多個(gè)學(xué)生選

學(xué)生表和課程表是多對(duì)多的關(guān)系,這里通過(guò)課程表(關(guān)系表)關(guān)聯(lián)

三. 聚合查詢(xún):

1.常見(jiàn)的統(tǒng)計(jì)總數(shù)、計(jì)算平局值等操作,可以使用聚合函數(shù)來(lái)實(shí)現(xiàn),常見(jiàn)的聚合函數(shù)有:

函數(shù)說(shuō)明
COUNT([DISTINCT] expr)返回查詢(xún)到的數(shù)據(jù)的 數(shù)量
SUM([DISTINCT] expr)返回查詢(xún)到的數(shù)據(jù)的 總和,不是數(shù)字沒(méi)有意義
AVG([DISTINCT] expr)返回查詢(xún)到的數(shù)據(jù)的 平均值,不是數(shù)字沒(méi)有意義
MAX([DISTINCT] expr)返回查詢(xún)到的數(shù)據(jù)的 最大值,不是數(shù)字沒(méi)有意義
MIN([DISTINCT] expr)返回查詢(xún)到的數(shù)據(jù)的 最小值,不是數(shù)字沒(méi)有意義

例子:

1.1COUNT:統(tǒng)計(jì)行數(shù)

統(tǒng)計(jì)班里有多少同學(xué):

1.2 SUM:

統(tǒng)計(jì)語(yǔ)文成績(jī)總分:

1.3 AVG:

統(tǒng)計(jì)語(yǔ)文平均分:

1.4 MAX:

語(yǔ)文最高分:

1.5 MIN

語(yǔ)文最低分:

2.GROUP BY子句:

2.1 SELECT 指定的字段必須是“分組依據(jù)字段”,其他字段若想出現(xiàn)在SELECT 中則必須包含在聚合函 數(shù)中。

2.2:語(yǔ)法:

select 需要分組的列, sum(column2), .. from table group by 需要分組的列

2.3:例子:

mysql> create table emp(
    ->  id int primary key auto_increment,
    ->  name varchar(20) not null,
    ->  role varchar(20) not null,
    ->  salary numeric(11,2)
    -> );
Query OK, 0 rows affected (0.07 sec)
mysql> insert into emp(name, role, salary) values
    -> ('馬云','服務(wù)員', 1000.20),
    -> ('馬化騰','游戲陪玩', 2000.99),
    -> ('孫悟空','游戲角色', 999.11),
    -> ('豬無(wú)能','游戲角色', 333.5),
    -> ('沙和尚','游戲角色', 700.33),
    -> ('隔壁老王','董事長(zhǎng)', 12000.66);
Query OK, 6 rows affected (0.04 sec)

查詢(xún)每個(gè)角色的最高工資:

3.HAVING條件語(yǔ)句:

GROUP BY 子句進(jìn)行分組以后,需要對(duì)分組結(jié)果再進(jìn)行條件過(guò)濾時(shí),不能使用 WHERE 語(yǔ)句,而需要用 HAVING

例子:查詢(xún)每個(gè)角色小于一萬(wàn)的最高工資:

四.聯(lián)合查詢(xún):

1.實(shí)際開(kāi)發(fā)中往往數(shù)據(jù)來(lái)自不同的表,所以需要多表聯(lián)合查詢(xún)。多表查詢(xún)是對(duì)多張表的數(shù)據(jù)取笛卡爾積。

笛卡爾積其實(shí)是個(gè)全排列的過(guò)程

語(yǔ)法:

select * from 表名 表名

如圖:

上面有很多無(wú)用數(shù)據(jù),我們可以通過(guò)連接條件過(guò)濾

2.內(nèi)連接:

寫(xiě)法一:select 字段 from 表1 別名1  join 表2 別名2 on 連接條件 and 其他條件;

寫(xiě)法二:select 字段 from 表1 別名1,表2 別名2 where 連接條件 and 其他條件;

例子:這里我們過(guò)濾一下上面的class和student的查詢(xún)

從圖可以看出兩個(gè)表的class_id有依賴(lài)關(guān)系,只要他們相等即可。

3.外連接:

 外連接分為左外連接和右外連接。如果聯(lián)合查詢(xún),左側(cè)的表完全顯示我們就說(shuō)是左外連接;右側(cè)的表完 全顯示我們就說(shuō)是右外連接 

語(yǔ)法:

-- 左外連接,表1完全顯示 select 字段名  from 表名1 left join 表名2 on 連接條件;

-- 右外連接,表2完全顯示 select 字段 from 表名1 right join 表名2 on 連接條件;

如果是left join,就以左邊的表為基準(zhǔn)顯示;

如果是right join ,就以右邊的表為基準(zhǔn)顯示;

這里就是以右邊student表為基準(zhǔn)表顯示的

 4.自連接:

自連接是指在同一張表連接自身進(jìn)行查詢(xún)

5.子查詢(xún):

子查詢(xún)是指嵌入在其他sql語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢(xún)。

分為:

5.1.單行子查詢(xún):返回一行記錄的子查詢(xún)(返回一個(gè)對(duì)象)

 例子:查詢(xún)與“韓立” 同學(xué)的同班同學(xué)

5.2.多行子查詢(xún):返回多行記錄的子查詢(xún)(返回一個(gè)集合,包含多個(gè)對(duì)象);用到IN關(guān)鍵字

 例子:在成績(jī)表中查詢(xún)彩兒和清漣同學(xué)的成績(jī)的成績(jī)信息

 6.合并查詢(xún):

在實(shí)際應(yīng)用中,為了合并多個(gè)select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL時(shí),前后查詢(xún)的結(jié)果集中,字段需要一致也就是兩張表要完全一致。

  6.1 UNION:

該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中的重復(fù)行

例子:

6.2.nion all:

到此這篇關(guān)于探討MySQL中 “約束“ 下的查詢(xún)的文章就介紹到這了,更多相關(guān)mysql約束查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過(guò)實(shí)例解析MySql CURRENT_TIMESTAMP函數(shù)

    通過(guò)實(shí)例解析MySql CURRENT_TIMESTAMP函數(shù)

    這篇文章主要介紹了通過(guò)實(shí)例解析MySql CURRENT_TIMESTAMP函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • MySQL加密和解密實(shí)例詳解

    MySQL加密和解密實(shí)例詳解

    這篇文章主要介紹了MySQL加密和解密實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • MySQL 鎖機(jī)制實(shí)現(xiàn)原理解析

    MySQL 鎖機(jī)制實(shí)現(xiàn)原理解析

    MySQL鎖機(jī)制通過(guò)表級(jí)、行級(jí)(含間隙鎖、臨鍵鎖)等實(shí)現(xiàn)并發(fā)控制,保障數(shù)據(jù)一致性與完整性,InnoDB支持高效行鎖管理,而MyISAM僅用表鎖,需合理設(shè)計(jì)索引、拆分事務(wù)及調(diào)整參數(shù)以?xún)?yōu)化性能,避免死鎖與鎖等待,本文給大家介紹MySQL鎖機(jī)制實(shí)現(xiàn)原理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • MySQL無(wú)法啟動(dòng)幾種常見(jiàn)問(wèn)題小結(jié)

    MySQL無(wú)法啟動(dòng)幾種常見(jiàn)問(wèn)題小結(jié)

    在群里看到有新同學(xué)還在問(wèn)MySQL無(wú)法啟動(dòng)的問(wèn)題,于是總結(jié)了幾個(gè)常見(jiàn)情況與解決方法,需要的朋友可以參考下
    2013-09-09
  • 從MySQL 7升級(jí)到MySQL 8的避坑指南與實(shí)操指南

    從MySQL 7升級(jí)到MySQL 8的避坑指南與實(shí)操指南

    MySQL 8 作為里程碑式的版本,帶來(lái)了諸多重磅特性,但從 MySQL 7升級(jí)并非一鍵無(wú)腦更,涉及語(yǔ)法、配置、權(quán)限、數(shù)據(jù)類(lèi)型等多維度兼容問(wèn)題,本文結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),梳理升級(jí)核心注意事項(xiàng)、實(shí)操步驟與常見(jiàn)坑點(diǎn),需要的朋友可以參考下
    2026-03-03
  • mysql5.7 新增的json字段類(lèi)型用法實(shí)例分析

    mysql5.7 新增的json字段類(lèi)型用法實(shí)例分析

    這篇文章主要介紹了mysql5.7 新增的json字段類(lèi)型用法,結(jié)合實(shí)例形式分析了mysql5.7 新增的json字段類(lèi)型具體功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • mysql忘記密碼重置的方法實(shí)現(xiàn)

    mysql忘記密碼重置的方法實(shí)現(xiàn)

    本文主要介紹了mysql忘記密碼重置的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql 5.5.x zip直接解壓版安裝方法

    mysql 5.5.x zip直接解壓版安裝方法

    這篇文章主要介紹了mysql 5.5.x zip直接解壓版安裝方法 ,需要的朋友可以參考下
    2016-04-04
  • MySQL數(shù)據(jù)庫(kù)中把int轉(zhuǎn)化varchar引發(fā)的慢查詢(xún)

    MySQL數(shù)據(jù)庫(kù)中把int轉(zhuǎn)化varchar引發(fā)的慢查詢(xún)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)中把int轉(zhuǎn)化varchar引發(fā)的慢查詢(xún) 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • MySQL COALESCE 函數(shù)使用示例詳解

    MySQL COALESCE 函數(shù)使用示例詳解

    COALESCE是一種SQL函數(shù),用于返回參數(shù)列表中第一個(gè)非NULL的值,它常用于處理可能存在NULL值的場(chǎng)景,并提供默認(rèn)值或備用值,這篇文章給大家介紹MySQL COALESCE 函數(shù)使用,感興趣的朋友跟隨小編一起看看吧
    2025-11-11

最新評(píng)論

耒阳市| 翁源县| 汉阴县| 灵山县| 精河县| 武鸣县| 灵川县| 台中县| 紫云| 江城| 克拉玛依市| 安达市| 绥宁县| 梁平县| 雷波县| 资阳市| 涪陵区| 安丘市| 漳州市| 香港| 北辰区| 中西区| 乐清市| 福建省| 忻州市| 鹤山市| 项城市| 克什克腾旗| 内丘县| 社旗县| 伊宁县| 太康县| 临洮县| 武平县| 喜德县| 盐城市| 施秉县| 锡林浩特市| 武定县| 清河县| 金门县|