1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        什么是MySQL數(shù)據(jù)庫(kù)?看這一篇干貨文章就夠了!

        共 24807字,需瀏覽 50分鐘

         ·

        2020-09-22 16:39

        前言

        為啥學(xué)習(xí)MySQL呢?因?yàn)?code style>MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在web應(yīng)用方面,MySQL是最好的軟件。MySQL所使用的sql語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。

        這篇文章,我會(huì)為大家詳細(xì)梳理MySQL數(shù)據(jù)庫(kù)的方方面面。

        1.MySQL的入門(mén)

        什么是數(shù)據(jù)庫(kù)呢?

        1. 數(shù)據(jù)庫(kù),它是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織,存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。
        2. 數(shù)據(jù)庫(kù)管理系統(tǒng), 指數(shù)據(jù)庫(kù)系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行管理的軟件系統(tǒng)。

        讓我來(lái)整理一張思維導(dǎo)圖:

        細(xì)節(jié)掌握:

        • 安裝配置,常用命令,操作數(shù)據(jù)庫(kù);
        • 整型與浮點(diǎn)型,日期時(shí)間型與字符型;
        • 創(chuàng)建與查看數(shù)據(jù)庫(kù)表,修改數(shù)據(jù)庫(kù)表,刪除數(shù)據(jù)庫(kù)表;
        • 非空約束,主鍵約束,唯一約束,默認(rèn)約束,外鍵約束;
        • 管理工具:MySQL Workbench,SQLyog;
        • 單表數(shù)據(jù)記錄的插入與自動(dòng)編號(hào),單表數(shù)據(jù)記錄的更新,單表數(shù)據(jù)記錄的刪除,單表數(shù)據(jù)記錄的查詢(xún),對(duì)查詢(xún)結(jié)果進(jìn)行分組,對(duì)查詢(xún)結(jié)果進(jìn)行排序,通過(guò)limit語(yǔ)句限制查詢(xún)記錄的數(shù)量;
        • mysql的運(yùn)算符,數(shù)值函數(shù),字符函數(shù),日期時(shí)間函數(shù),聚合函數(shù),信息函數(shù)與加密函數(shù);
        • 使用比較運(yùn)算符引發(fā)的子查詢(xún),插入記錄時(shí)使用的子查詢(xún)
        • 多表連接,內(nèi)連接,外連接,自連接,多表更新,多表刪除
        • 創(chuàng)建,使用自定義函數(shù)
        • 創(chuàng)建存儲(chǔ)過(guò)程,使用存儲(chǔ)過(guò)程

        mysql官網(wǎng):

        安裝包下載:(安裝操作)

        點(diǎn)擊安裝:

        產(chǎn)品配置的操作:

        打開(kāi)服務(wù)框用win+r,輸入services.msc

        2. mysql目錄結(jié)構(gòu)

        1. bin目錄:用于存儲(chǔ)一些可執(zhí)行文件
        2. include目錄:用于存儲(chǔ)包含的一些頭文件
        3. lib目錄:用于存儲(chǔ)一些庫(kù)文件
        4. share目錄:用于存儲(chǔ)錯(cuò)誤信息,字符集文件等
        5. data目錄:用于放置一些日志文件以及數(shù)據(jù)庫(kù)
        6. my.ini文件:數(shù)據(jù)庫(kù)的配置文件

        啟動(dòng)與停止:

        mysql參數(shù):

        參數(shù)描述
        -u用戶(hù)名
        -p密碼
        -V輸出版本信息并且退出
        -h主機(jī)地址

        3.常用命令

        修改用戶(hù)密碼的命令:

        mysqladmin?命令用于修改用戶(hù)密碼

        mysqladmin 命令格式:

        mysqladmin?-u用戶(hù)名?-p舊密碼?password新密碼

        顯示數(shù)據(jù)庫(kù)的命令

        show?databases;

        使用數(shù)據(jù)庫(kù)的命令

        use?數(shù)據(jù)庫(kù)的名稱(chēng)

        顯示當(dāng)前連接的信息

        1. 顯示當(dāng)前連接的數(shù)據(jù)庫(kù)select database();
        2. 顯示當(dāng)前服務(wù)器版本select version();
        3. 顯示當(dāng)前日期時(shí)間select now();
        4. 顯示當(dāng)前用戶(hù)select user();

        4.操作數(shù)據(jù)庫(kù)(創(chuàng)建,修改,刪除)

        創(chuàng)建數(shù)據(jù)庫(kù)SQL

        create?database?[if?not?exists]?db_name
        [default]?character?set?[=]?charset_name
        create?database?database_name;

        修改數(shù)據(jù)庫(kù)的語(yǔ)法格式:

        alter?database?db_name?
        [default]?character?set?[=]?charset_name

        刪除數(shù)據(jù)庫(kù)語(yǔ)法格式:

        drop?database?[if?exitsts]?db_name;

        5.數(shù)據(jù)庫(kù)-數(shù)據(jù)類(lèi)型

        了解數(shù)據(jù)類(lèi)型:(借助圖書(shū)管理系統(tǒng))

        圖書(shū)類(lèi)別表:

        類(lèi)別編號(hào)(category_id)?類(lèi)別名稱(chēng)(category)?父類(lèi)別(parent_id)
        1?計(jì)算機(jī)?0
        2?醫(yī)學(xué)?0

        圖書(shū)信息表:

        圖書(shū)編號(hào)(book_id)?類(lèi)別編號(hào)(book_category_id)?書(shū)名(book_name)?作者(author)?價(jià)格(price)?出版社(press)?出版時(shí)間(pubdate)?庫(kù)存(store)

        借閱信息表:

        圖書(shū)編號(hào)(book_id)?身份證號(hào)(card_id)?借出日期(borrow_date)?歸還日期(return_date)?是否歸還(status)

        讀者信息表

        身份證號(hào)(card_id)?姓名(name)?性別(sex)?年齡(age)?聯(lián)系電話(tel)?余額(balance)

        數(shù)據(jù)類(lèi)型:

        整型:TINYINT-1字節(jié) SMALLINT-2字節(jié) MEDIUMINT-3字節(jié) INT-4字節(jié) BIGINT-8字節(jié)

        浮點(diǎn)數(shù)類(lèi)型和定點(diǎn)數(shù)類(lèi)型:

        float-4個(gè)字節(jié)
        double-8個(gè)字節(jié)

        decimal

        日期時(shí)間類(lèi)型:

        字符型:

        6.數(shù)據(jù)庫(kù)表結(jié)構(gòu)的操作

        • 創(chuàng)建和查看數(shù)據(jù)表
        創(chuàng)建數(shù)據(jù)表:create?table

        create?table?<表名>
        (?
        ?列名1?數(shù)據(jù)類(lèi)型[列級(jí)別約束條件][默認(rèn)值],
        ?列名2?數(shù)據(jù)類(lèi)型[列級(jí)別約束條件][默認(rèn)值],
        ?...
        ?[表級(jí)別約束條件]
        );
        • 查看數(shù)據(jù)庫(kù)表:
        show?tables?[from?db_name];
        • 查看數(shù)據(jù)表基本結(jié)構(gòu):
        show?columns?from?tbl_name;

        describe?<表名>?/DESC<表名>
        show?create?table?tbl_name;
        • 修改數(shù)據(jù)庫(kù)表

        添加列:

        alter?table?<表名>
        ?add?<新列名>?<數(shù)據(jù)類(lèi)型>
        ??[?約束條件?]?[first?|?after?已存在列名];

        修改列名:

        alter?table?<表名>
        ?change?<舊列名>?<新列名>?<新數(shù)據(jù)類(lèi)型>;

        修改列的數(shù)據(jù)類(lèi)型:

        alter?table?<表名>?MODIFY?<列名>?<數(shù)據(jù)類(lèi)型>

        修改列的排列位置

        alter?table<表名>
        MODIFY?<列1>?<數(shù)據(jù)類(lèi)型>?FIRST|AFTER<列2>

        刪除列:

        alter?table?<表名>?drop?<列名>;

        修改表名:

        alter?table?<舊表名>?RENAME?[TO]?<新表名>;
        • 刪除數(shù)據(jù)庫(kù)表
        drop?table?[if?exists]?表1,表2,...表n;

        查看表分區(qū)

        創(chuàng)建表分區(qū):使用partition by類(lèi)型(字段)

        使用values less than操作符定義分區(qū)

        create?table?bookinfo(
        ?book_id?int,
        ?book_name?varchar(20)
        )
        partition?by?range(book_id)(
        ?partition?p1?values?less?than(20101010),
        ?partition?p3?values?less?than?MAXVALUE
        );

        7.子查詢(xún)

        select?price?from?bookinfo?where?book_id?=?20101010;

        select?*?from?readerinfo;

        update?readerinfo?set?balance?=?balance-(select?price?from?bookinfo?where?book_id?=?20101010)?*?0.05?where?card_id?=?'2323232342sxxxxx';

        什么是子查詢(xún)呢?

        它是指嵌套在其他sql語(yǔ)句內(nèi)的查詢(xún)語(yǔ)句。

        select?*?from?table1?where?col1?=?(select?col2?from?table2);
        insert?into?bookcategory(category,parent_id)values('x',2),('y',2);


        insert?into?bookinfo(book_id,book_category_id,book_name,author,price,press,pubdate,store)
        values
        (45245244,?6,?'x',?'1,2,3?等',?115,?'出版社',?'2020-06-01',10),
        (45342545,?6,?'y',?'1,?2',27.8,??'出版社',?'2020-07-01',?5);

        update?readerinfo?set?balance?=?500?where?card_id?=?'683246';

        insert?into?borrowinfo(book_id,card_id,borrow_date,return_date,status)
        values
        (35452455,'5724154','2020-10-10','2020-11-10','否');

        查詢(xún)借閱信息表, 顯示借 xx這本書(shū)的借閱記錄

        select?*?from?borrowinfo?where?book_id?=?(select?book_id?from?bookinfo?where?book_name?=?'xx');

        查詢(xún)圖書(shū)信息表, 顯示圖書(shū)價(jià)格小于圖書(shū)平均價(jià)格的所有圖書(shū)信息

        select?*?from?bookinfo?where?price?

        查詢(xún)圖書(shū)信息表,顯示圖書(shū)類(lèi)別不是’數(shù)據(jù)庫(kù)’的所有圖書(shū)信息

        select?*?from?bookinfo?where?book_category_id<>(select?category_id?from?bookcategory?where?category?=?'數(shù)據(jù)庫(kù)');

        查詢(xún)圖書(shū)信息表,顯示圖書(shū)類(lèi)別為’計(jì)算機(jī)’的所有圖書(shū)信息

        select?*?from?bookcategory;

        select?*?from?bookinfo?where?book_category_id?=?ANY(select?category_id?from?bookcategory?where?parent_id?=?1);


        select?*?from?bookinfo?where?price?>?ANY?(select?price?from?bookinfo?where?book_category_id?=4);??

        select?*?from?bookinfo?where?price?>?ALL?(select?price?from?bookinfo?where?book_category_id?=4);?

        查詢(xún)圖書(shū)信息表,顯示圖書(shū)類(lèi)別為’2’的所有圖書(shū)信息

        in?后面的子查詢(xún)返回一個(gè)數(shù)據(jù)列,等于數(shù)據(jù)列里的任意一個(gè)值都是滿(mǎn)足條件的

        select?*?from?bookinfo?where?book_category_id?in?(select?category_id?from?bookcategory?where?parent_id?=?2);

        select?*?from?bookinfo?where?book_category_id?=?any?(select?category_id?from?bookcategory?where?parent_id?=?2);

        查看圖書(shū)類(lèi)別表中是否有’y’的類(lèi)別,如果有,則查看圖書(shū)信息表

        select?*?from?bookinfo?where?exists?(select?category_id?from?bookcategory?where?category='y');

        select?*?from?bookinfo?where?exists?(select?category_id?from?bookcategory?where?category='x');

        insert into select 語(yǔ)句從一個(gè)表復(fù)制數(shù)據(jù),然后把數(shù)據(jù)插入到一個(gè)已存在的表中。

        insert?into?table2?select?*?from?table1;

        需要?jiǎng)?chuàng)建一張罰款記錄信息表,包含如下信息:圖書(shū)編號(hào)、身份證號(hào)、應(yīng)還日期、實(shí)際還書(shū)日期,罰款金額

        記錄來(lái)源于借閱信息表超出還書(shū)時(shí)間還未還書(shū)的讀者

        create?table?readerfee(
        ?book_id?int,
        ?card_id?char(18),
        ?return_date?date,
        ?actual_return_date?date,
        ?book_fee?decimal(7,3),
        ?primary?key(book_id,card_id)
        );

        select?book_id,card_id,return_date?from?borrowinfo?where?datediff(sysdate(),return_date)>0?and?status?=?'否';

        insert?into?readerfee(book_id,card_id,return_date)?select?book_id,card_id,return_date?from?borrowinfo?where?datediff(sysdate(),return_date)>0?and?status?=?'否';

        select?*?from?readerfee;

        身份證號(hào)為5461xxxxxxx的讀者將超限的圖書(shū)20201101歸還,根據(jù)描述實(shí)現(xiàn)如下需求:

        • 更新借閱信息表,將借閱狀態(tài)(status)更新為‘是’。
        • 更新罰款記錄信息表,更新實(shí)際還書(shū)日期和罰款金額,罰款金額為每超出一天扣0.2元。
        update?borrowinfo?set?status?=?'是'?where?book_id?=?20201101?and?card_id?=?'5461xxxxxxx';

        select?*?from?borrowinfo;

        update?readerfee?set?actual_return_date=sysdate(),?book_fee=datediff(sysdate(),return_date)*0.2?where?book_id?=?20201101?and?card_id?=?'5461xxxxxxx';

        select?*?from?readerfee;

        8.mysql的約束

        它事一種限制,通過(guò)對(duì)表的行或列的數(shù)據(jù)做出限制,來(lái)確保表的數(shù)據(jù)的完整性,唯一性。

        表結(jié)構(gòu):

        圖書(shū)(圖書(shū)編號(hào)book_id,類(lèi)別編號(hào)book_category_id,書(shū)名book_name,作者author)

        mysql中常用的幾種約束類(lèi)型:

        約束類(lèi)型非空約束主鍵約束唯一約束默認(rèn)約束外鍵約束
        關(guān)鍵字not nullprimary keyuniquedefaultforeign key

        圖書(shū)信息表:

        (圖書(shū)編號(hào)book_id,類(lèi)別編號(hào)book_category_id,書(shū)名book_name,作者author,價(jià)格price,出版社press,出版時(shí)間pubdate,庫(kù)存store)

        圖書(shū)類(lèi)別表:

        (類(lèi)別編號(hào)category_id - 主鍵,類(lèi)別名稱(chēng)category - 唯一,父類(lèi)別parent_id -非空)

        讀者信息表:

        (身份證號(hào)card_id,姓名name,性別sex,年齡age,聯(lián)系電話tel,余額balance)

        借閱信息表:

        (圖書(shū)編號(hào)book_id,身份證號(hào)card_id,借出日期borrow_date,歸還日期return_date,是否歸還status)

        非空約束

        null字段值可以為空

        not null字段值禁止為空

        非空約束

        非空約束指字段的值不能為空。對(duì)于使用了非空約束的字段如果用戶(hù)在添加數(shù)據(jù)時(shí),沒(méi)有指定值,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)報(bào)錯(cuò)。

        列名?數(shù)據(jù)類(lèi)型?not?null

        創(chuàng)建表時(shí)添加非空約束

        create?table?bookinfo(
        ?book_id?int,
        ?book_name?varchar(20)?not?null
        );

        刪除非空約束

        alter?table?bookinfo?modify?book_name?varchar(20);

        通過(guò)修改表添加非空約束

        alter?table?bookinfo?modify?book_name?varchar(20)?not?null;

        主鍵約束

        主鍵約束:要求主鍵列的數(shù)據(jù)唯一,并且不允許為空,主鍵能夠唯一地標(biāo)識(shí)表中的一條記錄。

        主鍵的類(lèi)型:

        主鍵分為單字段主鍵多字段聯(lián)合主鍵

        單字段主鍵:是由一個(gè)字段組成

        在定義列的同時(shí)指定主鍵
        列名?數(shù)據(jù)類(lèi)型?primary?key;

        在列定義的后邊指定主鍵
        [constraint<約束名>]?primary?key(列名);

        創(chuàng)建表時(shí)添加主鍵約束

        create?table?bookinfo(
        ?book_id?int?primary?key,
        ?book_name?varchar(20)?not?null
        );
        create?table?bookinfo(
        ?book_id?int,
        ?book_name?varchar(20)?not?null,
        ?constraint?pk_id?primary?key(book_id)
        );

        刪除主鍵約束

        ALTER?TABLE?bookinfo?DROP?PRIMARY?KEY;

        通過(guò)修改表的方式添加主鍵約束

        ALTER?TABLE?bookinfo?ADD?PRIMARY?KEY(book_id);

        多字段聯(lián)合主鍵,復(fù)合主鍵

        主鍵有多個(gè)字段聯(lián)合組成。primary key(字段1,字段2,...字段n);

        create?table?borrowinfo(
        book_id?int,
        card_id?char(18),
        primary?key(book_id,card_id)
        );

        通過(guò)修改表為列添加主鍵

        create?table?bookinfo(
        ?book_id?int,
        ?book_name?varchar(20)?not?null
        );

        alter?table?bookinfo?modify?book_id?int?primary?key;
        alter?table?bookinfo?add?primary?key(book_id);
        alter?table?bookinfo?add?constraint?pk_id?primary?key(book_id);

        唯一約束

        唯一約束要求該列唯一,允許為空,唯一約束可以確保一列或者幾列不出現(xiàn)重復(fù)值。

        語(yǔ)法規(guī)則:

        列名?數(shù)據(jù)類(lèi)型?unique

        [constraint?<約束名>]?unique(<列名>)

        創(chuàng)建表時(shí)添加唯一約束

        CREATE?TABLE?bookinfo(
        ?book_id?INT?PRIMARY?KEY,
        ?book_name?VARCHAR(20)?NOT?NULL?UNIQUE?
        );

        或:

        create?table?bookinfo(
        book_id?int?primary?key,
        book_name?varchar(20)?not?null,
        constraint?uk_bname?unique(book_name)
        );

        通過(guò)修改表的方式添加唯一約束

        alter?table?bookinfo?modify?book_name?varchar(20)?unique;

        ALTER?TABLE?bookinfo?ADD?UNIQUE(book_name);

        alter?table?bookinfo?
        add?constraint?uk_bname?unique(book_name);

        刪除唯一約束

        ALTER?TABLE?book_info?DROP??KEY??uk_bname;

        ALTER?TABLE?book_info?DROP??INDEX??uk_bname;

        唯一約束和主鍵約束的區(qū)別

        1. 一個(gè)表中可以有多個(gè)unique聲明,但只能有一個(gè)primary key聲明
        2. 聲明為primary key 的列不允許有空值
        3. 聲明為unique的列允許空值

        默認(rèn)約束

        默認(rèn)約束是指某列的默認(rèn)值

        列名?數(shù)據(jù)類(lèi)型?default?默認(rèn)值

        創(chuàng)建表時(shí)添加默認(rèn)約束

        CREATE?TABLE?bookinfo(
        ?book_id?INT?PRIMARY?KEY,
        ?press?VARCHAR(20)??DEFAULT?'出版社'
        );

        通過(guò)修改表的方式添加默認(rèn)約束

        ALTER?TABLE?bookinfo?
        ALTER?COLUMN?press?SET?DEFAULT?'出版社';

        alter?table?bookinfo?
        modify?press?varchar(10)?default?'出版社';

        刪除默認(rèn)約束

        alter?table?bookinfo?modify?press?varchar(20);

        ALTER?TABLE?bookinfo?
        ALTER?COLUMN?press?DROP?DEFAULT;

        外鍵約束

        外鍵是用來(lái)在兩個(gè)表的數(shù)據(jù)之間建立鏈接,可以是一列或者多列,一個(gè)表可以有一個(gè)或者多個(gè)外鍵。

        外鍵對(duì)應(yīng)的是參照完整性,一個(gè)表的外鍵可以為空值,若不為空值,則每一個(gè)外鍵必須等于另一個(gè)表中主鍵的某個(gè)值。

        作用:保持?jǐn)?shù)據(jù)的一致性,完整性。

        創(chuàng)建表時(shí)添加外鍵約束

        圖書(shū)類(lèi)別表(父表)
        CREATE?TABLE?bookcategory(
        ?category_id?INT?PRIMARY?KEY,
        ?category?VARCHAR(20),
        ?parent_id?INT
        );

        圖書(shū)信息表(子表)
        CREATE?TABLE?bookinfo(
        ?book_id?INT?PRIMARY?KEY,
        ?book_category_id??INT,
        ?CONSTRAINT?fk_cid?FOREIGN?KEY(book_category_id)?REFERENCES?bookcategory(category_id)
        );

        通過(guò)修改表的方式添加外鍵約束

        ALTER??TABLE??bookinfo??
        ADD??FOREIGN?KEY(book_category_id)?REFERENCES??bookcategory(category_id);

        刪除外鍵約束

        ALTER?TABLE?bookinfo?DROP?FOREIGN?KEY?fk_cid;

        外鍵約束的參照操作

        cascade,從父表刪除或更新且自動(dòng)刪除或更新子表中匹配的行

        create?table?bookinfo(
        ?book_id?int?primary?key,
        ?book_category_id?int,
        ?constraint?fk_cid?foreign?key?(book_category_id)?references?bookcategory(category_id)?on?delete?cascade);

        創(chuàng)建圖書(shū)管理系統(tǒng)表

        圖書(shū)類(lèi)別表

        create?table?bookcategory(
        category_id?int?primary?key,
        category?varchar(20)?not?null?unique,
        parent_id?int?not?null
        );

        圖書(shū)信息表

        create?table?bookinfo(

        book_id?int?primary?key,
        book_category_id?int,
        book_name?varchar(20)?not?null?unique,
        author?varchar(20)?not?null,
        price?float(5,2)?not?null,
        press?varchar(20)?default?'機(jī)械工業(yè)出版社',
        pubdate?date?not?null,
        store?int?not?null,
        constraint?fk_bcid?foreign?key(book_category_id)?references?bookcategory(category_id)

        );

        讀者信息表

        create?table?readerinfo(

        card_id?char(18)?primary?key,
        name?varchar(20)?not?null,
        sex?enum('男','女','保密')?default?'保密',
        age?tinyint,
        tel?char(11)?not?null,
        balance?decimal(7,3)?default?200

        );

        借閱信息表

        create?table?borrowinfo(

        book_id?int,
        card_id?char(18),
        borrow_date?date?not?null,
        return_date?date?not?null,
        status?char(11)?not?null,
        primary?key(book_id,card_id)

        );

        9.數(shù)據(jù)庫(kù)表記錄的操作

        單表數(shù)據(jù)記錄的插入

        語(yǔ)法格式:

        insert?into?table_name(column_list)?values(value_list);

        為表的所有列插入數(shù)據(jù)

        insert?into?bookcategory
        (category_id,category,parent_id)values
        (1,'x',0);

        insert?into?bookcategory?values(2,'y',0);

        為表的指定列插入數(shù)據(jù)

        insert?into?readerinfo
        (card_id,name,tel)values('4562135465','張飛','4651354651');

        同時(shí)插入多條記錄

        insert?into?bookcategory(category_id,category,parent_id)values(3,'x',1),(4,'y',1),(5,'z',2);

        將查詢(xún)結(jié)果插入的表中

        insert?into?bookcategory?select?*?from?test?where?id>5;

        自動(dòng)增加

        設(shè)置表的屬性值自動(dòng)增加:

        列名?數(shù)據(jù)類(lèi)型?auto_increment

        創(chuàng)建表時(shí)添加自增列

        create?table?bookcategory_tmp(
        ?category_id?int?primary?key?auto_increment,
        ?category?varchar(20)?not?null?unique,
        ?parent_id?int?not?null
        )auto_increment=5;

        測(cè)試自增列

        insert?into?bookcategory_tmp(category,parent_id)values('dadaqianduan',0);

        去掉自增列

        alter?table?bookcategory_tmp?modify?category_id?int;

        添加自增列

        alter?table?bookcategory_tmp?modify?category_id?int?auto_increment;

        修改自增列的起始值

        alter?table?bookcategory_tmp?auto_increment?=?15;

        insert?into?bookcategory_tmp(category,parent_id)values('文學(xué)',0);

        刪除圖書(shū)信息表的外鍵

        alter?table?bookinfo?drop?foreign?key?fk_bcid;

        為圖書(shū)類(lèi)別表添加自動(dòng)編號(hào)的功能

        alter?table?bookcategory?modify?category_id?int?auto_increment;

        恢復(fù)關(guān)聯(lián)

        alter?table?bookinfo?add?constraint?fk_bcid?foreign?key(book_category_id)references?bookcategory(category_id);

        單表數(shù)據(jù)記錄的更新

        向借閱信息表插入一條借閱信息

        insert?into?borrowinfo(book_id,card_id,borrow_date,return_date,status)values(20202010,46516874,'2020-11-29','2020-12-29','否');

        更新讀者信息表中的余額

        查看書(shū)的價(jià)格???79.80
        select?price?from?bookinfo?where?book_id?=?20202010;

        更新余額

        update?readerinfo?set?balance?=?balance?-?79.80*0.05?where?card_id?=?'46516874';
        select?*?from?readerinfo;

        更新圖書(shū)信息表的庫(kù)存

        update?bookinfo?set?store?=?store?-1?where?book_id?=?20150201;
        select?*?from?bookinfo;

        單表數(shù)據(jù)記錄的刪除

        刪除指定條件的記錄

        delete?from?readerinfo?where?card_id?=?'46461265464565';

        刪除表中所有記錄

        delete?from?readerinfo;

        truncate?table?readerinfo;快

        想要?jiǎng)h除表中的所有記錄,可以使用truncate table語(yǔ)句,truncate將直接刪除原來(lái)的表,并重新創(chuàng)建一個(gè)表,其語(yǔ)法結(jié)構(gòu):

        truncate?table?table_name

        查詢(xún)兒科學(xué)的類(lèi)別編號(hào)

        select?category_id?from?bookcategory?where?category='兒科學(xué)';

        刪除圖書(shū)編號(hào)為5的圖書(shū)信息

        delete?from?bookinfo?where?book_category_id?=?5;

        刪除圖書(shū)類(lèi)別表中兒科學(xué)這個(gè)類(lèi)別

        delete?from?bookcategory?where?category?=?'兒科學(xué)';

        單表數(shù)據(jù)記錄的查詢(xún)

        查詢(xún)所有列

        select?*?from?bookcategory;

        select?category_id,category,parent_id?from?bookcategory;

        查詢(xún)指定列

        select?category?from?bookcategory;

        select?category_id,category?from?bookcategory;

        查詢(xún)指定條件的記錄

        select?book_id,book_name,price?from?bookinfo?where?press='出版社';

        查詢(xún)結(jié)果不重復(fù)的記錄

        select?distinct?press?from?bookinfo;

        查看空值

        select?*?from?readerinfo?where?age?is?null;

        分組

        統(tǒng)計(jì)讀者信息表中男讀者的人數(shù)

        select?count(*)?from?readerinfo?where?sex='男';

        將讀者信息表中的記錄按性別進(jìn)行分組

        select?sex?from?readerinfo?group?by?sex;

        將讀者信息表中的記錄按性別進(jìn)行分組,并統(tǒng)計(jì)每種性別的人數(shù)

        select?sex,count(*)?from?readerinfo?group?by?sex;

        將讀者信息表中的記錄按性別進(jìn)行分組,分組后人數(shù)大于的性別

        select?sex?from?readerinfo?group?by?sex?having?count(sex)>2;

        排序

        通過(guò)order by子句對(duì)查詢(xún)的結(jié)果進(jìn)行排序

        order?by?列名?[asc|desc]

        排序方向:

        1. 排序分為升序和降序,默認(rèn)為升序
        2. 升序asc
        3. 降序desc

        單列排序

        select?*?from?bookinfo?order?by?price;

        多列排序

        select?*?from?bookinfo?order?by?price,store;

        指定排序方向

        select?*?from?bookinfo?order?by?price,store?desc;

        limit語(yǔ)句限制查詢(xún)記錄的數(shù)量

        前3行記錄

        select?*?from?bookinfo?limit?3;

        從第3條記錄開(kāi)始的后2條記錄

        select?*?from?bookinfo?limit?2,2;

        select?*?from?bookinfo?limit?2?offset?2;
        insert?into?bookinfo(book_id,book_category_id,book_name,author,price,press,pubdate,store)
        values
        (454235424,4,?'123',?'xxx',85.8,?'出版社',?'2020-04-01',?10),
        (452454542,4,?'456',?'xxx',?35.5,?'出版社',?'2020-08-01',?20),
        (454578754,4,?'789',?'xxx',?46.6,?'出版社',?'2020-05-01',8);

        將圖書(shū)信息按照庫(kù)存進(jìn)行分組,統(tǒng)計(jì)每組庫(kù)存下的個(gè)數(shù),然后按庫(kù)存進(jìn)行降序排序,并查看結(jié)果中的前四條記錄

        select?store,count(*)from?bookinfo?
        group?by?store?
        order?by?store?desc?
        limit?4;

        10.運(yùn)算符與函數(shù)

        MySQL 主要有以下幾種運(yùn)算符:

        1. 算術(shù)運(yùn)算符
        2. 比較運(yùn)算符
        3. 邏輯運(yùn)算符
        4. 位運(yùn)算符

        算術(shù)運(yùn)算符

        比較運(yùn)算符

        邏輯運(yùn)算符

        位運(yùn)算符

        運(yùn)算符優(yōu)先級(jí)

        讀者的身份證號(hào),姓名,電話,余額。

        select?card_id,?name,?tel,?balance?from?readerinfo?where?balance-200<=0;

        查看讀者信息表中,余額大于200的讀者信息。

        select?*?from?readerinfo?where?balance>200;

        查看讀者信息表中,余額不等于200的讀者信息。

        select?*?from?readerinfo?where?balance?<>?200;

        查看讀者信息表中,年齡不為空的讀者信息。

        select?*?from?readerinfo?where?age?is?not?null;

        查看讀者信息表中,余額在350到450之間的讀者信息。

        select?*?from?readerinfo?where?balance?between?350?and?450;
        select?*?from?readerinfo?where?name?in('dada','dada1','dada2');

        select?*?from?readerinfo?where?name?like?'張_';

        select?*?from?readerinfo?where?tel?like?'135%';

        select?*?from?bookinfo?where?price>50?and?store<5;

        select?*?from?bookinfo?where?price>80?or?press?=?'出版社';

        select?*?from?bookinfo?where?price?not?between?50?and?100;

        數(shù)值函數(shù)

        ceil返回大于x的最小整數(shù)值

        select?ceil(28.55);?//?29

        floor返回小于x的最大整數(shù)值

        select?floor(28.55);?//?28

        四舍五入 round返回最接近于參數(shù)x的整數(shù),對(duì)參數(shù)x進(jìn)行四舍五入

        select?round(28.55);?//?29
        select?round(28.55,1),round(28.55,0),round(28.55,-1);
        //?28.6?29?30

        截?cái)嗪瘮?shù)

        select?truncate(28.55,1),truncate(28.55,0),truncate(28.55,-1);
        //?28.5?28?20

        取模,返回x被y除后的余數(shù)

        select?mod(11,2);?//?1
        select?book_id,book_name,price,?round(price)?from?bookinfo;

        select?*?from?bookinfo?where?mod(book_id,2)=0;

        字符函數(shù)

        字符串連接

        select?concat('hello','world');
        select?concat_ws('-','hello','world');

        字母轉(zhuǎn)換大小寫(xiě)

        select?lower('Hello?World');
        select?upper('Hello?World');

        求長(zhǎng)度

        select?length('?hello?');

        刪除空格

        select?ltrim('?hello?'),length(ltrim('?hello?'));
        select?rtrim('?hello?'),length(rtrim('?hello?'));
        select?trim('?hello?'),length(trim('?hello?'));

        截取字符串

        select?substring('hello?world',1,5);

        select?substring('hello?world',-5,2);

        獲取指定長(zhǎng)度的字符串

        select?left('hello?world',?5);?//?hello
        select?right('hello?world',?5);?//?world

        替換函數(shù)

        select?replace('hello?world','world','mysql');?//?hello?mysql

        格式化函數(shù)

        select?format(1234.5678,2),format(1234.5,2),format(1234.5678,0);
        //1234.57?1234.50?12345

        select?book_id,book_name,format(price,2)from?bookinfo;

        日期和時(shí)間函數(shù)

        查看當(dāng)前的系統(tǒng)日期

        select?curdate();
        //?2020-02-02
        select?curdate()+0;

        select?curtime()+0;

        查看當(dāng)前的系統(tǒng)日期和時(shí)間

        select?now();?//?2020-10-10?12:12:12

        select?sysdate();?//?2020-10-10?12:12:12

        date_add(date,interval expr type): year,month,day,week,hour

        日期的加運(yùn)算
        select?date_add('2020-01-01',?interval?5?month);?//?2020-06-01

        計(jì)算兩個(gè)日期之間間隔的天數(shù)
        select?datediff('2020-02-10','2020-02-01');

        日期格式化
        select?date_format('2020-02-01',?'%Y%m');

        聚合函數(shù)(分組函數(shù))

        | 名稱(chēng) | 描述 | | avg() | 返回某列的平均值 | | count() | 返回某列的行數(shù) | | max() | 返回某列的最大值 | | min() | 返回某列的最小值 | | sum() | 返回某列值的和 |

        求圖書(shū)信息表中,所有圖書(shū)的平均價(jià)格。

        select?avg(price)?from?bookinfo;

        求圖書(shū)信息表中,所有圖書(shū)的總價(jià)格。

        select?sum(price)?from?bookinfo;

        求圖書(shū)信息表中的最大庫(kù)存。

        select?max(store)?from?bookinfo;

        求圖書(shū)信息表中的最小庫(kù)存。

        select?min(store)?from?bookinfo;

        求圖書(shū)信息表中有多少種圖書(shū)。

        select?count(*)?from?bookinfo;

        按類(lèi)別進(jìn)行分組, 查詢(xún)每種類(lèi)別下有多少種圖書(shū)以及每種類(lèi)別圖書(shū)的庫(kù)存總和。

        select?book_category_id?as?'圖書(shū)類(lèi)別',count(book_id)?as?'圖書(shū)種類(lèi)',?sum(store)?as?'庫(kù)存總和'?from?bookinfo?group?by?book_category_id;

        信息函數(shù)與加密函數(shù)

        系統(tǒng)信息函數(shù)

        查看當(dāng)前MySQL服務(wù)器版本的版本號(hào)
        select?version();

        查看MySQL服務(wù)器當(dāng)前連接的次數(shù)
        select?connection_id();

        查看當(dāng)前的數(shù)據(jù)庫(kù)名
        select?schema();

        查看當(dāng)前登錄的用戶(hù)名
        select?user();

        加密函數(shù)

        select?md5('test');

        create?table?myuser(
        ?username?varchar(10),
        ?password?varchar(35)
        );

        insert?into?myuser?values('user1',md5('pwd1'));

        select?*?from?myuser;

        select?*?from?myuser?where?username?=?'user1'?and?password?=?md5('pwd1');

        select?password('rootpwd');

        set?password?=?password('rootpwd');

        select?user,authentication_string?from?mysql.user;

        11.多表連接查詢(xún)

        多表連接查詢(xún)是從多個(gè)表中獲取數(shù)據(jù)。

        由圖書(shū)信息表:(圖書(shū)編號(hào)book_id,類(lèi)別編號(hào)book_category_id,書(shū)名book_name

        由圖書(shū)類(lèi)別表:(類(lèi)別編號(hào)category_id,類(lèi)別名稱(chēng)category,父類(lèi)別parent_id)

        獲取表:(圖書(shū)編號(hào)book_id,書(shū)名book_name,類(lèi)別名稱(chēng)category)

        多表連接的語(yǔ)法結(jié)構(gòu):

        table_reference
        [INNER]?JOIN?|?{LEFT|RIGHT}?[OUTER]?JOIN
        table_reference
        on?conditional_expr

        多表連接 通過(guò)查看圖書(shū)信息表和圖書(shū)類(lèi)別表 來(lái)獲取圖書(shū)編號(hào)、圖書(shū)名稱(chēng)、圖書(shū)類(lèi)別

        select?book_id,book_name,category?from?bookinfo?inner?join?bookcategory??on?bookinfo.book_category_id?=?bookcategory.category_id;

        內(nèi)連接

        根據(jù)連接條件從多個(gè)表中查詢(xún)選擇數(shù)據(jù),顯示這些表中與連接條件相匹配的數(shù)據(jù)行,組合成新記錄。(內(nèi)連接就是兩者共同都有的

        內(nèi)連接的語(yǔ)法結(jié)構(gòu):

        select?column_list
        from?t1
        [INNER]?JOIN?t2?ON?join_condition1
        [INNER]?JOIN?t3?ON?join_condition2
        ...]
        where?where_conditions;

        由于圖書(shū)借閱統(tǒng)計(jì)的需要,想查詢(xún)未歸還圖書(shū)的圖書(shū)編號(hào),圖書(shū)名稱(chēng),身份證號(hào),姓名,電話,歸還日期, 是否歸還。

        select?borrowinfo.book_id,book_name,borrowinfo.card_id,?name,?tel,?return_date,?status?from?borrowinfo
        inner?join?bookinfo?on?borrowinfo.book_id?=?bookinfo.book_id
        inner?join?readerinfo?on?borrowinfo.card_id?=?readerinfo.card_id
        where?borrowinfo.status?=?'否';

        select?t1.book_id,book_name,t1.card_id,?name,?tel,?return_date,?status?from?borrowinfo?t1
        join?bookinfo?t2?on?t1.book_id?=?t2.book_id
        join?readerinfo?t3?on?t1.card_id?=?t3.card_id
        where?t1.status?=?'否';

        外連接

        外連接將查詢(xún)多個(gè)表中相關(guān)聯(lián)的行。

        外連接分為:左外連接 left outer join;右外連接right outer join

        根據(jù)業(yè)務(wù)需要,我們需要查看圖書(shū)類(lèi)別表中的所有類(lèi)別下都有哪些圖書(shū)。

        select?book_id,?book_name,?category?from?bookcategory
        left?join?bookinfo?on?bookcategory.category_id?=?bookinfo.book_category_id
        where?parent_id<>0;

        select?book_id,?book_name,?category?from?bookinfo?a
        right?join?bookcategory?b?on?b.category_id?=?a.book_category_id;

        select?*?from?bookcategory;

        左外連接:顯示左表全部記錄,右表滿(mǎn)足連接條件的記錄。

        右外連接:顯示右表全部記錄,左表滿(mǎn)足連接條件的記錄。

        語(yǔ)法結(jié)構(gòu):

        select?column_list
        from?t1
        left?|?right?[outer]?join?t2?on?join_condition1;

        自連接

        如果在一個(gè)連接查詢(xún)中,涉及的兩個(gè)表都是同一個(gè)表,這種查詢(xún)稱(chēng)為自連接

        查詢(xún)所有圖書(shū)類(lèi)別的圖書(shū)類(lèi)別編號(hào),類(lèi)別名稱(chēng),上級(jí)分類(lèi)名稱(chēng)。

        select?*?from?bookcategory;

        select?s.category_id?as'圖書(shū)類(lèi)別編號(hào)',?s.category?as?'圖書(shū)類(lèi)別名稱(chēng)',?p.category?as'圖書(shū)的上級(jí)分類(lèi)名稱(chēng)'?from?bookcategory?s
        inner?join?bookcategory?p
        on?s.parent_id?=?p.category_id;

        多表更新

        update?
        table1?{[inner]?join?|?{left|right}?[outer]?join}?table2
        on?conditional_expr
        set?col1?=?{expr1|default}
        [,col2?=?{expr2|default}]...
        [where?where_condition]

        身份證號(hào)為432xxxxxx的讀者將超時(shí)的圖書(shū)86154歸還,根據(jù)描述實(shí)現(xiàn)如下需求:

        1. 更新借閱信息表,將借閱狀態(tài)(status)更新為‘是’。
        2. 更新罰款記錄信息表,更新實(shí)際還書(shū)日期和罰款金額,罰款金額為每超出一天扣0.2元。
        3. 同時(shí)更新讀者信息表的余額。(在余額中扣除罰款金額)
        update?readerfee?t1?join?readerinfo?t2?on?t1.card_id?=?t2.card_id
        set?actual_return_date?=?sysdate(),book_fee=datediff(sysdate(),return_date)*0.2,balance?=?balance?-?book_fee
        where?t1.book_id?=?86154?and?t1.card_id?=?'432xxxxxx';

        select?*?from?readerinfo;

        多表刪除

        delete?table1[.*],?table2[.*]
        from?table1?{[inner]join|{left|right}[outer]join}?table2
        on?conditional_expr
        [where?where_condition]

        圖書(shū)類(lèi)別表,圖書(shū)信息表:

        由于業(yè)務(wù)需求,需要?jiǎng)h除圖書(shū)類(lèi)別表中在圖書(shū)信息表中沒(méi)有圖書(shū)記錄的類(lèi)別。

        select?book_id,book_name,category?from?bookcategory_bak?t1
        left?join?bookinfo_bak?t2?
        on?t1.category_id?=?t2.book_category_id
        where?parent_id<>0;

        delete?t1?from?bookcategory_bak?t1
        left?join?bookinfo_bak?t2?
        on?t1.category_id?=?t2.book_category_id
        where?parent_id<>0?and?book_id?is?null;

        select?*?from?bookcategory_bak;

        需要?jiǎng)h除圖書(shū)類(lèi)別表的編程語(yǔ)言的類(lèi)別,以及圖書(shū)信息表中關(guān)于編程語(yǔ)言的圖書(shū)記錄。

        select?book_id,book_name,category_id,category?from?bookcategory_bak?t1
        inner?join?bookinfo_bak?t2
        on?t1.category_id?=?t2.book_category_id;

        delete?t1,t2?from?bookcategory_bak?t1
        inner?join?bookinfo_bak?t2
        on?t1.category_id?=?t2.book_category_id
        where?t1.category_id?=?3;?

        多表連接

        根據(jù)連接查詢(xún)返回的結(jié)果:內(nèi)連接(inner join),外連接(outer join),交叉連接(cross join)。

        根據(jù)連接條件所使用的操作符:相等連接,不等連接。

        12.自定義函數(shù)

        創(chuàng)建函數(shù)

        CREATE?FUNCTION?函數(shù)名(參數(shù)列表)?RETURNS?返回類(lèi)型
        BEGIN
        ?函數(shù)體
        END

        調(diào)用函數(shù)

        SELECT?函數(shù)名(參數(shù)列表)

        查看函數(shù)

        SHOW?FUNCTION?STATUS;

        刪除函數(shù)

        DROP?FUNCTION?IF?EXISTS?function_name;

        函數(shù):需要有返回值,可以指定0~n個(gè)參數(shù)

        創(chuàng)建自定義函數(shù):

        create?function?function_name([func_parameter])
        returns?type
        [characteristics..]?routine_body

        Characteristics指定存儲(chǔ)函數(shù)的特性,取值舉例:

        sql security{definer|invoker}指明誰(shuí)有權(quán)限來(lái)執(zhí)行。

        definer表示只有定義者才能執(zhí)行。

        invoker表示擁有權(quán)限的調(diào)用者才可以執(zhí)行,默認(rèn)情況下,系統(tǒng)指定為definer。

        comment?'string':注釋信息,可以用來(lái)描述存儲(chǔ)函數(shù)。

        函數(shù)體是由sql代碼構(gòu)成,可以簡(jiǎn)單的sql語(yǔ)句。如果為復(fù)合結(jié)構(gòu)需要使用begin...end語(yǔ)句,復(fù)合結(jié)構(gòu)可以包含聲明,流程控制。

        select?length('hello');
        select?date_format(pubdate,'%Y-%m')?from?bookinfo;

        delimiter?//?
        create?function?ym_date(mydate?date)
        returns?varchar(15)
        begin
        return?date_format(mydate,'%Y-%m');
        end//

        delimiter;
        select?ym_date(pubdate)?from?bookinfo;

        創(chuàng)建自定義函數(shù):

        語(yǔ)法格式:

        create?function?function_name([func_parameter])
        returns?type
        [characteristics...]?routine_body
        select?length('hello');

        select?date_format(pubdate,'%Y-%m')?from?bookinfo;
        delimiter?//
        create?function?ym_date(mydate?date)
        returns?varchar(15)
        begin
        return?date_format(mydate,'%Y-%m');
        end//
        delimiter?;

        使用(調(diào)用)自定義函數(shù)
        select?ym_date(pubdate)?from?bookinfo;

        實(shí)例分析函數(shù):

        創(chuàng)建一個(gè)函數(shù)
        delimiter?$$?--定界符
        ---?開(kāi)始創(chuàng)建函數(shù)
        create?function?user_main_fn(v_id?int)
        returns?varchar(50)
        begin
        --定義變量
        declare?v_userName?varchar(50);
        --給定義的變量賦值
        select?f_userName?info?v_userName?from?t_user_main
        where?f_userId?=?v_id;
        --返回函數(shù)處理結(jié)果
        return?v_userName;
        end?$$?--函數(shù)創(chuàng)建定界符
        delimiter;

        自定義函數(shù)兩個(gè)必要條件:參數(shù),返回值

        創(chuàng)建自定義函數(shù)

        create?function?function_name
        returns
        {string|integer|real|decimal}
        routine_body

        語(yǔ)法格式:

        CREATE?FUNCTION?function_name([func_parameter])
        RETURNS?type
        [characteristics?…?]?routine_body
        1. function_name : 函數(shù)名稱(chēng)
        2. func_parameter : 函數(shù)的參數(shù)列表
        3. RETURNS type : 指定返回值的類(lèi)型
        4. Characteristics : 指定存儲(chǔ)函數(shù)的特性
        5. routine_body : 函數(shù)體

        創(chuàng)建無(wú)參的自定義函數(shù):

        刪除自定義函數(shù)

        DROP?FUNCTION?[IF?EXISTS]?func_name;
        SELECT?DATE_FORMAT(NOW(),?'%Y年%m月%d日?%H點(diǎn):%i分:%s秒')

        CREATE?FUNCTION?f1()?RETURNS?VARCHAR(30)
        RETURN?DATE_FORMAT(NOW(),?'%Y年%m月%d日?%H點(diǎn):%i分:%s秒');

        SELECT?f1();

        復(fù)合結(jié)構(gòu)體的函數(shù)

        --?將語(yǔ)句結(jié)束符改為$$,為了防止下面的函數(shù)將;看成是語(yǔ)句的結(jié)束
        DELIMITER?$$

        CREATE?FUNCTION?adduser(username?VARCHAR(20))
        RETURNS?INT?UNSIGNED
        RETURN
        BEGIN
        INSERT?INTO?table_1(username)?VALUES(username);
        LAST_INSERT_ID();
        END;

        --?將分隔符改回來(lái)
        DELIMITER?;

        流程控制的使用

        常用的流程控制語(yǔ)句:

        1. IF條件判斷語(yǔ)句-if
        2. CASE條件判斷語(yǔ)句-case
        3. WHILE循環(huán)語(yǔ)句-while
        4. LOOP循環(huán)語(yǔ)句-loop
        5. REPEAT循環(huán)語(yǔ)句-repeat

        13.存儲(chǔ)過(guò)程

        局部變量以關(guān)鍵字DECLARE聲明

        DECLARE?var_name?[,?varname2,?varname3?…]?date_type?[DEFAULT?value];
        例:DECARE num INT DEFAULE 10;

        內(nèi)部BEGIN…END塊中定義的變量只在該塊內(nèi)有效

        會(huì)話變量的作用范圍為整個(gè)程序

        語(yǔ)法結(jié)果

        create?procedure?proc_name([proc_parameter])
        [characteristics...]?routine_body
        delimiter?//?
        create?procedure?selectproc1()
        begin
        select?book_id,?book_name,?price,?store?from?bookinfo;
        end?//
        delimiter;

        call?selectproc();

        刪除存儲(chǔ)過(guò)程:

        drop?procedure?[if?exists]?proc_name;
        創(chuàng)建一個(gè)查詢(xún)圖書(shū)的編號(hào)、書(shū)名、價(jià)格和庫(kù)存的存儲(chǔ)過(guò)程。
        delimiter?//
        create?procedure?selectproc1()
        begin
        select?book_id,book_name,price,store?from?bookinfo;
        end//
        delimiter?;

        調(diào)用存儲(chǔ)過(guò)程
        call?selectproc1();
        創(chuàng)建查詢(xún)圖書(shū)編號(hào)、書(shū)名、圖書(shū)類(lèi)別的存儲(chǔ)過(guò)程
        delimiter?//
        create?procedure?proc1()
        begin
        select?book_id,book_name,category?from?bookinfo?t1
        join?bookcategory?t2
        on?t1.book_category_id?=?t2.category_id;
        end//
        delimiter?;

        call?proc1();

        設(shè)計(jì)一個(gè)存儲(chǔ)過(guò)程,刪除一個(gè)讀者,并輸出剩余讀者的個(gè)數(shù)。
        delimiter?//
        create?procedure?proc2(in?cid?char(18),?out?num?int)
        begin
        delete?from?readerinfo?where?card_id?=?cid;
        select?count(card_id)?into?num?from?readerinfo;
        end//
        delimiter?;

        select?*?from?readerinfo;
        call?proc2('6545xx',?@num);
        select?@num;


        設(shè)計(jì)一個(gè)存儲(chǔ)過(guò)程,實(shí)現(xiàn)交換兩個(gè)數(shù)的處理。
        delimiter?//
        create?procedure?proc3(inout?num1?int,?inout?num2?int)
        begin
        declare?t?int?default?0;
        set?t?=?num1;
        set?num1?=?num2;
        set?num2?=?t;
        end//
        delimiter?;

        set?@n1?=?3,?@n2?=?5;
        call?proc3(@n1,@n2);
        select?@n1,@n2;

        刪除存儲(chǔ)過(guò)程
        drop?procedure?proc1;
        drop?procedure??if?exists?proc2;

        存儲(chǔ)過(guò)程和函數(shù)的區(qū)別

        存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程實(shí)現(xiàn)的功能比較復(fù)制,功能強(qiáng)大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫(kù)操作。

        存儲(chǔ)函數(shù),實(shí)現(xiàn)的功能針對(duì)性比較強(qiáng)。

        返回值上的不同

        存儲(chǔ)過(guò)程:可以返回多個(gè)值,也可以不返回值,只是實(shí)現(xiàn)某種效果或動(dòng)作。

        存儲(chǔ)函數(shù):必須有返回值,而且只能有一個(gè)返回值。

        參數(shù)不同

        存儲(chǔ)過(guò)程:存儲(chǔ)過(guò)程的參數(shù)類(lèi)型有三種,in,out,inout。

        存儲(chǔ)函數(shù):參數(shù)類(lèi)型只有一種,類(lèi)似于in參數(shù),調(diào)用函數(shù)時(shí)需要按照參數(shù)的類(lèi)型指定值即可。

        語(yǔ)法結(jié)構(gòu)

        存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程聲明時(shí)不需要指定返回類(lèi)型。

        存儲(chǔ)函數(shù),函數(shù)聲明時(shí)需要指定返回類(lèi)型,且在函數(shù)體中必須包含一個(gè)有效的return語(yǔ)句。

        調(diào)用方式

        存儲(chǔ)過(guò)程,用call語(yǔ)句進(jìn)行調(diào)用

        存儲(chǔ)函數(shù),嵌入在sql中使用的,可以在select中調(diào)用

        14.事務(wù)

        事務(wù)必須滿(mǎn)足的四個(gè)條件:

        atomicity?原子性
        consistency?一致性
        lsolation?隔離性
        durability?持久性

        控制事務(wù)處理

        rollback,回滾會(huì)結(jié)束用戶(hù)的事務(wù),并撤銷(xiāo)正在進(jìn)行的所有未提交的修改

        commit,會(huì)提交事務(wù),并使已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的所有修改稱(chēng)為永久性的

        savepoint identifier,允許在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),一個(gè)事務(wù)中可以有多個(gè)savepoint

        rollback to identifier,把事務(wù)回滾到標(biāo)記點(diǎn)

        事務(wù)處理主要有兩種方法

        begin, rollback, commit來(lái)實(shí)現(xiàn)

        1. begin,start transaction開(kāi)始一個(gè)事務(wù)
        2. rollback事務(wù)回滾
        3. commit事務(wù)確認(rèn)

        直接用set來(lái)改變mysql的自動(dòng)提交模式

        1. set autocommit = 0 禁止自動(dòng)提交
        2. set autocommit = 1 開(kāi)始自動(dòng)提交

        innodb使用事務(wù)

        從Mysql5.5版本開(kāi)始,InnoDB是默認(rèn)的表存儲(chǔ)引擎。

        innodb是事務(wù)型數(shù)據(jù)庫(kù)的首選引擎,支持事務(wù)安全表。

        MySql中 delimiter

        默認(rèn)下,delimiter是分號(hào),在命令行客戶(hù)端中,如果有一行命令以分號(hào)結(jié)束,那么回車(chē)后,mysql將會(huì)執(zhí)行該命令。

        (告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。)

        什么是存儲(chǔ)引擎:數(shù)據(jù)庫(kù)存儲(chǔ)引擎是數(shù)據(jù)庫(kù)底層軟件組件。數(shù)據(jù)庫(kù)管理系統(tǒng)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建,查詢(xún),更新和刪除數(shù)據(jù)的操作。

        mysql的核心就是存儲(chǔ)引擎。

        innodb存儲(chǔ)引擎

        • 它為mysql提供了具有提交,回滾和崩潰恢復(fù)能力的事務(wù)安全存儲(chǔ)引擎。
        • 對(duì)于處理巨大數(shù)據(jù)量的數(shù)據(jù)擁有很好的性能
        • innodb存儲(chǔ)引擎支持外鍵完整性約束
        • innodb被用在眾多需要高性能的大型數(shù)據(jù)庫(kù)站點(diǎn)上

        設(shè)置存儲(chǔ)引擎:

        1. 設(shè)置服務(wù)器的存儲(chǔ)引擎
        2. 在配置文件my.ini中的mysqld下面設(shè)置需要的存儲(chǔ)引擎
        3. default-storage-engine=InnoDB
        4. 重啟mysql服務(wù)器
        創(chuàng)建表(單個(gè))設(shè)置存儲(chǔ)引擎
        create?table?mytest(
        ?id?int?primary?key,
        ?name?varchar(10)
        )?engine?=?innodb?default?charset?=?utf8;

        修改表的存儲(chǔ)引擎

        alter?table?tablename?engine?=?engineName

        15.管理與維護(hù)

        管理用戶(hù)

        USE?mysql;

        select?user?from?user;

        權(quán)限表:存儲(chǔ)賬號(hào)的權(quán)限信息表:user,db,host,tables_priv,columns_privprocs_priv

        各個(gè)權(quán)限表的作用

        tables_priv表用來(lái)對(duì)表設(shè)置操作權(quán)限;columns_priv表用來(lái)對(duì)表的某一列設(shè)置權(quán)限;procs_priv表可以對(duì)存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)設(shè)置操作權(quán)限。

        使用CREATE USER語(yǔ)句創(chuàng)建新用戶(hù)

        語(yǔ)法格式:

        CREATE?USER?“user”@“host”?[IDENTIFIED?BY?“password”];

        使用DROP USER 語(yǔ)句刪除用戶(hù)

        語(yǔ)法格式:

        DROP?USER?user[,?user];

        例:使用DROP USER刪除賬戶(hù)"rose"@"localhost":
        DROP?USER?"rose"@"localhost";

        示例:

        查看日志文件的路徑
        show?variables?like?'log_error';

        創(chuàng)建新的日志信息表
        flush?logs;

        創(chuàng)建新的日志信息表
        mysqladmin?-uroot?-p?flush-logs

        點(diǎn)關(guān)注,不迷路

        好了各位,以上就是這篇文章的全部?jī)?nèi)容,能看到這里的人都是人才。我后面會(huì)不斷更新技術(shù)相關(guān)的文章,如果覺(jué)得文章對(duì)你有用,歡迎給個(gè)“在看”,也歡迎分享,感謝大家 ?。?/p>


        —————END—————



        掃碼關(guān)注公眾號(hào),訂閱更多精彩內(nèi)容。


        “在看和轉(zhuǎn)發(fā)”就是最大的支持
        瀏覽 62
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天综合—永久入口 | 亚洲欧美中文日韩在线 | 色综合天天拍天天 | 国产精品久久久久久久久懂色 | 韩国电影少妇的激情 | 五月婷婷欧美 | www.青青草原 | 操初中女生 | 色域五月天 | 屁屁影院—线路①屁屁影院 |