MySQL數據庫板書


一、課程介紹

《數據庫的原理和應用》是一個前導課程,也是一個基礎課程。是《應用程序開發》類的課程的基礎課程。

二、數據庫產品介紹

目前主流的數據庫有:

Oracle(美國甲骨文公司),大中型應用程序。(java+Oracle)

SQL Server(美國微軟公司),.NET應用程序。(C#+SQL Server)

MySQL(美國甲骨文公司),中小型網站。(Java+MySQL,PHP+MySQL)

三、MySQL基礎

1、創建數據庫

數據庫是一個容器,里面有表、視圖、存儲過程等。

格式:create  database  <數據庫名>;

查看數據庫:show databases;

使用數據庫:use  <數據庫名>;

2、創建表

表是用來存儲數據,表是數據庫中最重要的一個對象。

格式:create  table  <表名>(

  <字段名>  <字段類型>(寬度) ,

  ...

);

  auto_increment:

    auto_increment表示自增,即自動編號,只有整型字段才可以設置,一個表只能有一個自增字段。

示例:

create table product(
  id int auto_increment primary key, --auto_increment表示自增,primary key表示主鍵。
  name varchar(50),
  price float,
  image varchar(255)
);

查看表結構:

desc <表名>

查看表數據(查詢):

select  *  from <表名>

插入數據:

insert into <表名>(<字段名1>,<字段名2>,...)   values(<值1>,<值2>,...)

 

一、查詢語句(select)

1、基本格式:select   <字段列表>   from    <表名>

說明:

  *表示所有字段。

  如果查部分字段,需要指定,字段間用逗號隔開。

  指定標題使用as,如:select  id  as  '編號', name  as  '名稱'  from product;

  去重的關鍵字:distinct

  例如:select distinct teamid from player where chinesename like '%傑克遜%'

 2、條件子句where

  格式:where  <條件>

  說明:條件是一個邏輯表達式。

  (1)比較運算符:>  <  >=  <=  !=

  (2)邏輯運算符:not   and    or

  (3)范圍運算符:<字段> between <值1> and <值2>

  (4)in運算符:<字段> in (<值1>,<值2>,...)

  (5)like運算符:like '含通配符的字符串',主要作模糊查詢

    mysql的通配符:

      %表示任意個字符(0~n)

      _表示任意1個字符(0~1)

        []表示范圍

  (6)is null運算符:<字段> is [not] null

3、排序子句

  格式:order by <字段> [desc | asc]

  說明: desc表示降序(值由大到小),asc表示升序(值由小到大),默認為升序。

4、limit子句

  格式:limit([偏移量],<記錄個數>)

  說明:如果省略偏移量,則表示從第1條開始取,

    如:limit 10  --從開始取前10條。

    如:limit 20,10  --則表示從第20+1條開始取10條,即(21~30)。

5、分組子句

  格式:group by <字段> [having <條件>]

  說明:having <條件>表示限定分組,即對分組后的結果進行篩選。

  聚合函數(統計函數):

    count(<字段>):記錄個數

    sum(<數值字段>):求和

    avg(<數值字段>):求平均值

    max(<數值字段>):求最大值

    min(<數值字段>):求最小值

 6、多表的連接查詢

  (1)全連接查詢

  格式:select <字段列表> from <表1>,<表2> where <表1>.<連接字段>=<表2>.<連接字段>

  功能:從多張表查詢數據

   (2)join連接

    a、內連接

    格式:select <字段列表> from <表1> t1 inner join <表2> t2 on <表1>.<連接字段>=<表2>.<連接字段>

    說明:格式中t1和t2分別表示表1和表2的別名;inner join也簡寫為join。

    b、外連接

      左外連接

       格式:select <字段列表> from <表1>left join <表2> on <表1>.<連接字段>=<表2>.<連接字段>

       說明:左表中所有的記錄都顯示

      右外連接

       格式:select <字段列表> from <表1>right join <表2> on <表1>.<連接字段>=<表2>.<連接字段>

       說明:右表中所有的記錄都顯示

    c、交叉連接

    格式:select <字段列表> from <表1>cross join <表2>

 7、子查詢

  概念:子查詢就是一個SQL語句中嵌套的一個select語句。  

  (1)比較子查詢

  格式:select <字段列表> from <表名> where <字段>  <比較運算符>  <子查詢>

  說明:此時子查詢的結果必須是單值。

  舉例:查詢身高最高的球員的中文名和身高。

    查詢超過平均身高的球員的中文名和身高。

  (2)in子查詢

  格式:select <字段列表> from <表名> where <字段>  in  <子查詢>

  說明:該子查詢結果應是一個單列的結果集。

  (3)exists子查詢

  格式:select <字段列表> from <表名> where  exists <子查詢>

 

二、數據庫的基本操作:增、刪、改 

  1、增(insert)

  格式:insert | replace into <表名>[(<字段列表>)] values(<值列表>)

  說明:

    replace into :表示如果有該主鍵的記錄,則進行替換;沒有的話,則和insert into相同,插入新的一條。

    如果一次要插入多行,則數據行之間用","分隔。

  2、刪(delete)

  格式:delete from <表名> where <條件>

  說明:還可以加上order by 子句和limit子句

  舉例:delete from score order by maths limit 3; --刪除成績表中數學成績最低的3行記錄。

  3、改(update)

  格式:update <表名> set <字段1>=<值1>,...where <條件>

    說明:可以加上order by 子句和limit子句

三、約束(constraint)

1、主鍵約束(Primary Key)

  主鍵是用來唯一地表示一個實體,為了防止出現重復的記錄。

  一個表只能有一個主鍵。

  例如:學生(學號,姓名,……)

  (1)在創建表時候創建主鍵約束

    create table <表名>(

            <字段1> <類型1>  primary key,  --列的完整性約束

            <字段2> <類型2>  ,

            ...

             )

 

    

    create table <表名>(

            <字段1> <類型1> 

            <字段2> <類型2>  ,

            primay key(<字段1>)  --表的完整性約束

             )

    (2)在表創建后添加主鍵約束

      alter table <表名>  add primary key(<字段名>)

2、唯一約束(unique)

  限制某個字段不要出現重復值

(1)在創建表時候創建唯一約束

    create table <表名>(

            <字段1> <類型1> unique,  --列的完整性約束

            <字段2> <類型2>  ,

            ...

             )

    

    create table <表名>(

            <字段1> <類型1> 

            <字段2> <類型2>  ,

            unique(<字段1>)  --表的完整性約束

             )

(2)在表創建后添加唯一約束

    alter table <表名>  add unique(<字段名>)

 

3、檢查約束(check)

  設置某個字段取值范圍。  

(1)在創建表時候創建檢查約束

    create table <表名>(

            <字段1> <類型1> check(<條件>),  --列的完整性約束

            <字段2> <類型2>  ,

            ...

             )

(2)在表創建后添加檢查約束

      alter table <表名>  add check(<條件>)

  MySQL的存儲引擎均能對check子句進行分析,但會忽略check子句,即check子句約束還不起作用。

4、外鍵約束(參照完整性約束Foreign key)

   外鍵不是當前表的主鍵,是別的表的主鍵。

  外鍵一定要取自於父表的主鍵。

   (1)在創建表的時候定義外鍵約束

    create table <表名>(

            <字段1> <類型1> ,

            <字段2> <類型2>  ,

            foreign key(<外鍵字段>) references <父表>(<主鍵字段>)  --表的完整性約束

             )

      說明:外鍵的定義應放在所有字段定義的后面,不能放在某列的定義里面

    (2)在表創建后添加外鍵約束

      alter table <表名>  add foreign key(<外鍵字段>) references <父表>(<主鍵字段>) 

    說明:

      在外鍵的定義的最后可加上以下幾種選項:

 

      on update cascade  --級聯更新,即更新了父表的主鍵值,子表中對應的外鍵值也會隨之更新。

      on delete cascade   --級聯刪除,即刪除了父表中某主鍵對應的記錄,那么子表中外鍵值和主鍵相同的記錄也會隨之刪除。

      on update ristrict  --禁止更新,即如果父表中有和外鍵值相同的主鍵值,則禁止修改此外鍵值

      on delete ristrict  --禁止刪除,即如果父表中有和外鍵值相同的主鍵值,則禁止刪除該記錄

 5、默認值

  default <值>

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作業:

  (一)導入數據

  (1)下載study.sql文件。

    鏈接: https://pan.baidu.com/s/1aAYSHZ-C32DsaLG3PeSJNw

    提取碼: wj5x  

  (2)將study.sql腳本文件復制到p盤。

  (3)登錄mysql服務器,進入mysql提示符狀態。

    提示:

    (a)通過navicat修改root密碼為123456

    (b)找到mysql命令所在位置,如:C:\Program Files\MySQL\MySQL Server 5.7\bin,在此窗口空白處按下shift鍵的同時右鍵,選擇“在此處打開命令窗口”,進入windows命令行。

    (c)在windows命令行狀態,輸入:mysql -h localhost -P 3308 -u root -p123456

    說明:因為機房修改了mysql的端口號為3308,如果采用默認端口3306,登錄本機的話,只需要指定用戶名和密碼即可登錄 ,即:mysql -u root -p123456

  (4)mysql>create database study;

  (5)mysql>use study;

  (6)mysql>source  p:/study.sql;

  (7)mysql>show tables;

  (8)mysql>select * from player;

  (二)完成以下查詢並截圖

  (1)查詢身高(height)220以上的球員的編號(id),姓名(chinesename),身高(height)信息。

  (2)使用between..and..運算符查詢球齡(playAge)10~15之間(含10和15)的球員的編號(id),姓名(chinesename),球齡(playAge)信息。

  (3)查詢位置(position)是'中鋒'的球員的編號(id),姓名(chinesename),位置(position)信息。

  (4)使用in運算符查詢球隊編號(teamid)為13或15或17的球隊的球員的編號(id),姓名(chinesename),球隊編號(teamid)信息。

  (5)從player表中查詢中文姓名以"傑克遜"結尾的所有球員的編號(id),姓名(chinesename),英文名(englishname)。

  (6)從player表查詢英文名為"Chris Paul"的球員的編號(id),姓名(chinesename),英文名(englishname)。

  (7)從player表中查詢中文姓名含"詹姆斯"的所有球員的編號(id),姓名(chinesename),英文名(englishname)。

  (8)如果以20條記錄為1頁對所有球員的記錄進行分頁,請查詢第11頁的球員的編號(id),姓名(chinesename),英文名(englishname)。

  -------分組查詢--------

  (9)查詢身高(height)由高到低的前10位球員的編號(id),姓名(chinesename),身高(height)信息。

  (10)從球員表player中查詢全聯盟現役球員的年齡age最大值和最小的值。

  (11)從球員表player中查詢全聯盟現役球員的平均身高。

  (12)分別統計每個球隊的球員數,結果字段有球隊編號teamid和球員數。

  (13)統計球員數大於或等於20的球隊編號teamid和球員數。

 

  ------多表的連接查詢-----

    數據准備:

    提示:先使用use study;切換數據庫

    (a)向球隊表team中添加一支球隊

      insert into team(id,name) values(31,'啦啦隊');

    (b)向球員表player中添加一名球員

      insert into player(id,chinesename) values(540,'周琦');

    (c)分別對兩表進行全連接、內連接、左外連接、右外連接和交叉連接查詢,只查球員編號id,球員中文名chinesename和球隊名name,並提交相應的結果截圖(共5張)。

    

  --------子查詢---------

  (1)查詢球員中文名chinesename含“傑克遜”的球隊的隊名name。

  (2)查詢身高height最高的球員所在的球隊的球隊編號id和球隊名稱name。

  (3)查詢身高height高於全聯盟平均身高的球員的球員編號id,球員中文名chinesename和身高height。

 

  --------增、刪、改-------

  創建數據庫和表:

  (a)數據庫sanguo

  (b)國家表country

  

 

   (c)武將表person

  

 

   (d)添加記錄

  

 

  

 

   (e)刪除姓名為空的記錄

     (f)將“關雲長”的姓名改成“關羽”。

   

  -----------約束-------------

  (1)創建數據庫:school
  (2)創建班級表bj,班級編號cid作主鍵約束且自動編號, 班級名cname作唯一約束

  (3)創建學生表xs,學生編號sid作主鍵約束且自動編號,學生姓名sname字符串,學生的年齡sage整型作檢查約束,取值范圍(10-99),班級編號cid作外鍵約束參照班級表的班級編號

  (4)輸入記錄

      班級表bj

      

 

      學生表xs

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM