第一天:Mysql數據庫

一、Mysql的安裝

1、打的mysql安裝文件mysql-5.0.27-win32.zip,雙壓縮,運行“setup.exe”。

wKiom1nOCMOSUN9JAACRlECZhes886.jpg-wh_50

 

2、選擇安裝型,有“Typical(默)”、“Complete(完全)”、“Custom(用自定)”三個選項選擇“Custom”,按“next”鍵繼續。 wKioL1nOCI3i9ZJpAACe-VB_WBw001.jpg-wh_50

3、在“DeveloperComponents(開發者部分)”上左鍵單擊選擇“This feature,

and allsubfeatures, will be installed on local hard drive.”,即“此部分,及下屬子部分內容,全部安裝在本地硬上”。在上面的“MySQL Server(mysql服器)”、“Client Programs(mysql客端程序)”、“Documentation(文檔)”也如此操作,以保安裝所有文件。點“Change...”,手指定安裝目

wKioL1nOCJiwouJVAADx8EL-yzM200.jpg-wh_50

 

4、填上安裝目,我的是“F:\Server\MySQL\MySQLServer 5.0”,也建不要放在與操作系同一分區,這樣可以防止系統備原的候,數據被清空。按“OK”繼續

wKiom1nOCOezY1GfAACC9CvBPvI354.jpg-wh_50

一下先前的置,如果有,按“Back”返回重做。按“Install”始安裝。

wKioL1nOCLGCv0KkAACIDssv0nA067.jpg-wh_50

wKiom1nOCQHibrdbAAB8txmY1ag204.jpg-wh_50

 

 

 

5、正在安裝中,稍候,直到出下面的界面

wKioL1nOCMzAPxAzAACgoxfpcac324.jpg-wh_50

裏是詢問你是否要註冊一個mysql.com的號,或是使用已有的號登mysql.com,一般不需要了,點“Skip Sign-Up”,按“Next”略步驟。繼續則完成MYSQL的安裝。

 

二、MYSQL的配置

1、安裝完成了,出如下界面將進入mysql配置向

wKioL1nOCNnBTxE8AACaqQOZ7oQ558.jpg-wh_50

wKiom1nOCSnxmByrAACF2TcsQxw815.jpg-wh_50

 

2、選擇配置方式,“DetailedConfiguration(手精確配置)”、“Standard Configuration(準配置)”,我們選擇“Detailed Configuration”,方便熟悉配置程。

wKiom1nOCTjg3F-OAACl8z_VpCE779.jpg-wh_50

3、選擇型,“DeveloperMachine(開發測試類,mysql佔用很少源)”、“Server Machine(服型,mysql佔用源)”、“Dedicated MySQL Server Machine(專門的數據器,mysql佔用所有可用源)”

 

wKioL1nOCQCgEtE2AADb_fWyTRg171.jpg-wh_50

 

4、選擇mysql數據的大致用途,“MultifunctionalDatabase(通用多功能型,好)”、“TransactionalDatabase Only(服型,注於事務處理,一般)”、“Non-Transactional Database Only(非事務處理型,較簡單,主要做一些控、數用,MyISAM數據型的支持限於non-transactional),按“Next”繼續

wKioL1nOCQqg2zBIAADgZ3n_dME643.jpg-wh_50

5、選擇網站併發連接數,同時連接的數目,“DecisionSupport(DSS)/OLAP(20個左右)”、“Online Transaction Processing(OLTP)(500個左右)”、“Manual Setting(手動設置,自己一個數)”。

wKiom1nOCVWxGXdLAADV2UnonMA353.jpg-wh_50

6、是否啓用TCP/IP接,定端口,如果不啓用,就只能在自己的機器上訪問mysql數據了,在面上,您可以選擇啓用準模式”(Enable Strict Mode),這樣MySQL就不會允許細小的錯誤。如果是新手,建您取消準模式以減少麻。但熟悉MySQL以後,儘量使用準模式,因它可以降低有害數據入數據的可能性。按“Next”繼續

wKiom1nOCV6RFPv_AACrlkULgKA183.jpg-wh_50

7、就是mysql數據庫語編碼進重要),一般選UTF-8,按 “Next”繼續

wKioL1nOCSfT5Vh7AADsVJXN7qw603.jpg-wh_50

8、選擇是否將mysql安裝windows可以指定ServiceName(服務標識名稱),是否將mysql的bin目加入到WindowsPATH(加入後,就可以直接使用bin下的文件,而不用指出目名,比如接,“mysql.exe-uusername -ppassword;”就可以了,不用指出mysql.exe的完整地址,很方便),我裏全部打上了勾,ServiceName不“Next”繼續

wKioL1nOCTHzBpAwAAC4eOsWv9U032.jpg-wh_50

9、詢問是否要修改默root(超管理)的密碼。“Enable root access from remotemachines(是否允root在其它的機器上登,如果要安全,就不要勾上,如果要方便,就勾上它)”。最後“Create An Anonymous Account(新建一個匿名用,匿名用可以接數據,不能操作數據,包括查詢)”,一般就不用勾了,置完,按“Next”繼續

 

wKiom1nOCX3jTtTWAACrJZA37WU932.jpg-wh_50

 

10、確認設置無,按“Execute”使置生效,即完成MYSQL的安裝和配置。

wKiom1nOCYjx53E9AAB_aI_azYU435.jpg-wh_50

wKioL1nOCU_D_BElAACehNH1T5g416.jpg-wh_50

 

注意:設置完,按“Finish”有一個比錯誤,就是不能“Startservice”,一般出在以前有安裝mysql的服器上,解決的法,先保以前安裝的mysql服底卸掉了;不行的檢查是否按上面一,之前的密是否有修改,照上面的操作;如果依然不行,將mysql安裝目下的data文件夾備份,然後除,在安裝完成後,將安裝生成的 data文件夾刪除,份的data文件移回來,再重啓mysql服就可以了,這種情況下,可能需要將數據庫檢查一下,然後修一次,防止數據出錯。


二、數據庫的使用

1、打開window“服務”

win+r,“運行”-》service.msc

wKiom1nOCoORsw2pAABVPG0a9ko246.jpg-wh_50

wKioL1nODaTCAk-TAAHNvadz3Xw565.jpg-wh_50

2、啓動和關閉(必須以管理員身份運行cmd命令窗口)

開啓數據庫服務:net start mysql

關閉數據庫服務:net stop mysql

wKiom1nODjqAB2OoAABs20pYsEU513.jpg-wh_50

3、登錄

mysql -uroot -p

wKioL1nODijh6ExsAACNjedz3k8735.jpg-wh_50

4.退出數據庫

exit;

quit;

q;

wKiom1nQ2_yxYIlyAAAKTn4Ykns110.jpg-wh_50

wKioL1nQ2-uTG9zLAAAJ7Vz3CQY964.jpg-wh_50

wKioL1nQ3CejZ0voAAAJMjgvQXI772.jpg-wh_50

5、查看數據庫的版本號和當前日期

select version(),current_date;

wKioL1nRsQLRrZSqAAB1kkosMYQ273.jpg-wh_50

6、將mysql用作一個簡單的計算器

select sin(pi()/4),(4+1)*5;

wKioL1nRsdTwj2WJAABOt6wVAxg734.jpg-wh_50

7、‘\c’表示取消命令,它切換回到mysql>,開始接受一個新的命令

wKiom1nRsvaBooLCAAAitzYKOS4815.jpg-wh_50

8、查詢當前使用的用戶

select user();

wKioL1nRs1yT2X52AAAxzD2RU04486.jpg-wh_50


三、SQL語句的分類

1、數據定義語言,簡稱DDL

用來定義數據庫對象:數據庫database,表table,列column等。

關鍵字:創建create,修改alter,刪除drop等

2、數據庫操作語言,簡稱DML

關鍵字:插入:insert,刪除delete,更新update等

3、數據查詢語言,簡稱DQL

關鍵字:select,from,where等

4、數據庫控制語言,簡稱DCL

四、對數據庫的操作

1、創建一個庫

create database 庫名

wKiom1nLyS3gM9CpAAAzy6r_pHw928.png-wh_50

查看MySQL支持的所有字符集

show character set;

wKiom1nQ4YqRHbFkAAJp4_TJrAc830.jpg-wh_50

創建帶有編碼的

create database 庫名 character set 編碼

wKioL1nLyx6ivKjTAAAI_ALREF8932.png-wh_50

查看編碼

show create database web08_01;

wKioL1nLzOTyAdwuAAATY1oIM7w726.png-wh_50

2、查看數據庫

查看數據庫服務器中的所有數據庫:show databases;

wKiom1nOEH_SVub8AAA_x9sYvuM434.jpg-wh_50

查看某個數據庫的定義的信息:show create database 數據庫名;

wKiom1nOEL2A9FGDAACKrfJRLkE049.jpg-wh_50

3、刪除一個庫

drop database 庫名

wKioL1nLzX3waqOFAAAtISOfFQU851.png-wh_50

4、使用庫

use 庫名

wKioL1nLzmvQXN4IAAAEVF0b5mY336.png-wh_50

5、查看當前正在操作的庫

select database();

wKioL1nLzqDBc_55AAAKVgaOfDk926.png-wh_50

五、對數據庫表的操作

1、創建一張表

create table 表名(

    字段名 類型(長度) [約束],

    字段名 類型(長度) [約束],

);

字符類型:varchar(n)

單表約束:

    主鍵約束:primary key,要求被修飾的字段:唯一和非空

    唯一約束:unique,要求被修飾的字段:唯一

    非空約束:not null,要求被修飾的字段:非空

    自動增長:auto_increment

wKioL1nL0JPQgaxiAAANmedIqbU208.png-wh_50

2、查看數據庫表

創建完成後,我們可以查看數據庫表

show tables;

wKioL1nL0VnDdQnwAAAIpdosuiY172.png-wh_50

查看錶的結構

desc 表名

wKiom1nL0dqzpj3GAAAYN4m2mhs743.png-wh_50

3、刪除一張表

drop table 表名

wKiom1nL0m-D7id_AAAJIEES-Xw732.png-wh_50

4、修改表

4.1添加一列

alter table 表名 add 列名 類型(長度)[約束];    -----修改表添加列

wKiom1nL0rnDyX9JAAAu4LB8Mt8601.png-wh_50

4.2修改列的類型(長度、約束)

alter table 表名 modify 要修改的字段名 類型(長度)[約束]

wKiom1nL1HLzqulOAAAxYhHKMUo375.png-wh_50

4.3修改列的列名

alter table 表名 change 舊列名 新列名 類型(長度)[約束]

wKioL1nL1PGyDrH5AAAvja8kwfQ179.png-wh_50

4.4、刪除表的列

alter table 表名 drop 列名

wKioL1nL1UPxBzClAAAiVupWifI734.png-wh_50

4.5、修改表名

rename table 表名 to 新表名

wKiom1nL1ezRX6fIAAAYPbTk1uo563.png-wh_50

4.6、修改表的字符集

alter table 表名 character set 編碼

wKioL1nL1n2RBWM_AAEogX5w-tk286.jpg-wh_50

4.7、修改字段的排列位置

alter table 表名 modify 列名1 數據類型 first|after 列名2

wKioL1nQ7ZKyl0fMAACtazxOK98432.jpg-wh_50

4.8查看當前編碼

show create table tbl_user;

wKioL1nL1reQoV0kAAAZKkWUKtU219.png-wh_50

4.9裝載數據

load data local infile 'path/1.txt' into table sort lines terminated by '\r\n';

wKiom1nR3X_QUAzOAAFTP9ziOO0858.jpg-wh_50

4.10、字段類型

wKiom1nOFPyBLRaUAAGcMbGe-hg855.jpg-wh_50

wKioL1nOFMXjjt9dAAPzQflTZr0726.jpg-wh_50

4.11、比較運算符

=、<=、>=、<>(!=)、<=>、>、<、is null、is not null、least、greatest、between、and、isnull、in、not in、like、regexp

三、對數據庫記錄進行操作(修改)

1、插入操作

insert into 表名(列名1,列名2,列名3)values(值1,值2,值3....)

wKiom1nL19uSfeI6AAAfKS4AAbU367.png-wh_50

insert into 表名 values(值1,值2,值3....)

wKiom1nL2OmhMwoLAAAf5It1vqQ694.png-wh_50

注意:

    1、列名數與values後面的值的個數相等

    2、列的順序與插入的值得順序一致

    3、列名的類型與插入的值要一致

    4、插入值的時候不能超過最大長度

    5、值如果是字符串或者日期需要加引號‘’(一般是單引號)

1.1插入數據中文亂碼問題解決辦法

方式一【不建議】

    直接修改數據庫安裝目錄裏面的my.ini文件的第57行

wKioL1nN3_uzTN0uAAAG806VhDs508.png-wh_50

wKiom1nOFk7CBZRqAAAfMDf8AL4070.jpg-wh_50

方式二:

    set names gbk;

wKioL1nN4D7D8JJXAAAXOx3pJhg281.png-wh_50

2、更新表記錄

2.1不帶條件的

update 表名 set 字段名=值,字段名=值,字段名=值....

它會將該列的所有記錄都更改

wKiom1nN4XOxZtMtAACt0P5xLPI409.jpg-wh_50

2.2帶條件的

update 表名 set 字段名=值,字段名=值,字段名=值....where 條件

wKioL1nN4b3j5VGmAAAoBN7tQJM850.png-wh_50

3.刪除表記錄

3.1帶條件的

delete from 表名 where 條件

wKiom1nN4q-gLI9_AAAgjw70P9c986.png-wh_50

注意:刪除後,uid不會重置!

3.2不帶條件的

先準備數據

insert into tbl_user values(null,'王五','666');

刪除操作

delete from 表名

wKioL1nN5AazUwdvAAAlAlQiN2s840.png-wh_50

3.3例題

說說delete與truncate的區別

delete刪除的時候是一條一條的刪除記錄,它配合事務,可以將刪除的數據找回。

truncate刪除,它是將整個表摧毀,然後再創建一張一模一樣的表。它刪除的數據無法找回

delete操作演示:

wKioL1nN5SzCw83eAAA4IRyww0I593.png-wh_50

truncate演示操作

wKiom1nN6CeB80orAAAfhsmta54540.png-wh_50

注意:delete刪除,uid不會重置!而使用truncate操作,uid會重置

4.查詢操作

語法:

    select [distinct] * |列名,列名 from 表名[where條件]

4.1簡單查詢 

1.查詢所有商品

select * from product;

wKioL1nN7dLDNJkVAAAkr1l4Txc528.png-wh_50

2.查詢商品名和商品價格

select pname,price from product;

wKioL1nN7n_hWhSHAAAUQ4IcG7Q080.png-wh_50

3.查詢所有商品信息使用表別名

select * from product as p;

wKiom1nN8CPi2J9lAAAl0LfadWw043.png-wh_50

4.查詢商品名,使用列別名

select pname as p from product

wKioL1nN8SrDtr-4AAAWDMJfutc649.png-wh_50

5.去掉重複值(按照價格)

select distinct(price) from product

wKioL1nN8kiDrhflAAAOOZFNT4U282.png-wh_50

6.將所有的商品的價格+10進行顯示

select pname,price+10 from product;

wKiom1nN8wDAwZ1aAAAdHIBUcW4357.png-wh_50

4.2條件查詢

1.查詢商品名稱爲“左慈”的商品信息

select * from product where pname='左慈';

wKioL1nN80-T-VTPAAANJeIIojY108.png-wh_50

2.查詢價格>60元的所有商品信息

select * from product where price>60;

wKiom1nN88uTpk0mAAAW6SJNRyI298.png-wh_50

3.查詢商品名稱含有“士”字的商品信息

select * from product where pname like '%士%';

wKioL1nN9Jein8YgAAAZX1Jq9jU189.png-wh_50

4.查詢商品id在(3,6,9)範圍內的所有商品信息

select * from product where pid in(3,6,9);

wKioL1nN9NfiOKy5AAAYKrt51J8049.png-wh_50

5.查詢商品名稱含有“士”字並且id爲6的商品信息

select * from product where pname like '%士%' and pid=6;

wKioL1nN9aGg7WtMAAAUGUHp47s416.png-wh_50

6、找出正好包含5個字符的名字

select * from pet where name like '_____';

+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

7.查詢id爲2或者6的商品信息

select * from product where pid=2 or pid=6;

wKioL1nN9fWRpBqzAAAUrNVnib0274.png-wh_50

4.3排序

1.查詢所有的商品,按價格進行排序(asc升序、desc降序)

select * from product order by price asc;

wKioL1nN_QihSaqEAAAwEm4uaYM405.png-wh_50

select * from product order by price desc;

wKiom1nN_WSCsnRHAAA1zV6wJf0626.png-wh_50

2.查詢名稱有“士”的商品信息並且按照價格降序排序

select * from product where pname like '%士%' order by price desc;

wKioL1nN_fbRiaRaAAAfQUotslc637.png-wh_50

4.4聚合函數

常用的聚合函數:sum()求和,avg()平均,max()最大值,min()最小值,count()計數

1.獲得所有商品的價格的總和

select sum(price) from product;

wKioL1nN_nPi8BKQAAAKrCoAwes880.png-wh_50

2.獲得所有商品的平均價格

select avg(price) from product;

wKioL1nN_t3RI1ElAAALhjRO04c787.png-wh_50

3.獲得所有商品的個數

select count(*) from product;

wKiom1nN_7PTvlS1AAAKhYy_WQM215.png-wh_50

4.5分組操作

1.添加分類id(alter table product add cid varchar(32);)

2.初始化數據

update product set cid='1';

update product set cid='2' where pid in(5,6,7);


1.根據cid字段分組,分組後統計商品的個數

select cid,count(*)from product group by cid;

wKiom1nOAzKizc-HAAAOAH5CVos944.png-wh_50

2.根據cid分組,分組統計每組商品的平均價格,並且平均價格大於20000元

select cid,avg(price)from product group by cid having avg(price)>20000

wKioL1nOA0bxBsuPAAAXmfD34GA326.png-wh_50

3、從第3條記錄開始顯示,顯示3條記錄

select * from sort limit 2,3;

("2"表示的是從第三條記錄開始,是從0開始計數的,"3"表示查詢3條記錄)

wKiom1nR5rOymTy5AAB-g9--u54351.jpg-wh_50


4.6、使用函數查詢

1、日期函數

計算每個寵物的年齡

select name,birth,curdate(),(year(curdate())-year(birth))-(right(curdate(),5)<right(birth,5)) as age from pet

year():提取日期的年部分

right():提取日期的MM-DD(日曆年)部分的最右面5個字符


+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
+----------+------------+------------+------+



4.6使用正則表達式查詢

1、字符‘^’:匹配以特定字符或者字符串開頭的文本

找出以"s"開頭的名字

select * from sort where sname regexp '^s';

wKiom1nR4qbR2oAdAACU-TmQqoc602.jpg-wh_50

2、字符‘$’:匹配以特定字符或者字符串結尾的文本

找出以"ao"結尾的名字

select * from sort where sname regexp 'ao$';

wKiom1nR46_yTRYXAACNPm9dAcs611.jpg-wh_50

3、字符‘.’:匹配任意一個字符

找出名字中帶有"n"的

select * from sort where sname regexp '.n.';

wKioL1nR5DqRpyYZAACh_nX6Prc664.jpg-wh_50

4、星號‘*’:匹配前面的字符任意多次,包括0次

select * from sort where sname regexp '^bn*';

wKiom1nR606gITWgAACtm5aJwC4143.jpg-wh_50

5、加號‘+’:匹配前面的字符至少一次

select * from sort where sname regexp '^di+';

wKiom1nR7ADxsifjAADSlMK83R4020.jpg-wh_50

6、字符‘|’:匹配多個字符串,多個字符串之間使用分隔符‘|’隔開

select * from sort where sname regexp 'di|nn|ao';

wKiom1nR7JmzaJ5zAAC067imiM4400.jpg-wh_50

7、方括號[]:指定一個字符集,只匹配其中任何一個字符,即爲所查找的文本

select * from sort where sname regexp '[nf]';

wKiom1nR7UTj9IH6AAC0BPL3eg8109.jpg-wh_50

8、字符串{n,}:表示至少匹配n次前面的字符

select * from sort where sname regexp 'd{2,}';

wKioL1nR73HxrWFbAACoRd_4G3s657.jpg-wh_50

9、字符串{n,m}:表示匹配前面的字符串不少於n次,不多於m次

wKiom1nR8DKxHrxbAAC-jtzwiRU546.jpg-wh_50

4.7查詢總結

select 一般後面的內容都是要查詢的字段

from 要查詢的表

where 查詢條件

group by 分組條件

having 分組後帶有條件只能使用having

order by 排序字段它必須放到最後面asc|desc

六、多表操作

1、外鍵

現在我們兩張表“分類表”和“商品表”,爲了表明商品屬於哪個分類,通常情況下,我們將在商品表上添加一列,用於存放分類cid的信息,此列稱爲:外鍵

wKiom1nPOqeD_xIsAABA1xaeiSc937.jpg-wh_50

wKioL1nPOnuzTmLdAAA8rSkGDO4558.jpg-wh_50

此時“分類表category”稱爲:主表,“cid”我們稱爲主鍵。“商品表product”稱爲:從表,category_id稱爲外鍵。我們通過主表的主鍵和從表的外鍵來描述主外鍵關係,呈現就是一對多關係

外鍵特點:

    從表外鍵的值是對主表主鍵的引用

    從表外鍵類型,必須與主表主鍵類型一致

聲明外鍵約束

    語法:alter table 從表 add [constraint] [外鍵名稱] foreign key (從表外鍵字段名)                  references 主表 (主表的主鍵);

          [外鍵名稱] 用於刪除外鍵約束的,一般建議“_fk”結尾

          alter table 從表 drop foreign key 外鍵名稱

使用外鍵目的:

    保證數據完整性

alter table product add foreign key(category_id) references category(cid);

wKiom1nPQB-h_zL8AADehs1yEpQ578.jpg-wh_50

alter table product add constraint product_fk foreign key(category_id) references category(cid);

wKioL1nPSCORvkBbAAFWhGH14AI398.jpg-wh_50

刪除外鍵

alter table 表名 drop foreign key 外鍵約束名

wKioL1nQ9EvAlBYQAAD6RZoRRvg397.jpg-wh_50

2、表與表之間的關係

2.1、一對多關係

    常見實例:客戶和訂單,分類和商品,部門和員工

    一對多建表原則:在從表(多方)創建一個字段,字段作爲外鍵指向主表(一方)的主鍵

wKioL1nPSv-CquIYAAFyjTVkTVM247.bmp-wh_50

建表語句

#創建數據庫

create database day09_db;

#使用數據庫

use day09_db;

#創建分類表

create table category(

    cid varchar(32) primary key, #主表的主鍵

    cname varchar(100)   #分類名稱

);

#商品表

create table product(

    pid varchar(32) primary key,

    name varchar(40),

    price double 

);

#添加外鍵字段 category_id

alter table product add column category_id varchar(32);

#添加約束

alter table product add constraint product_fk foreign key(category_id) references category(cid);

wKiom1nPXQHh8fnTAAGezvVNC3w188.jpg-wh_50

wKioL1nPXQaRWpIQAAAq3zup43o954.jpg-wh_50

總結:

    從表不能夠添加(更新),主表中不存在的數據

    主表不能夠刪除(更新),從表中已經使用的數據

2.2多對多關係:

    常見實例:學生和課程,商品和訂單,人和角色

    多對多關係建表原則:需要創建第三張表,中間表中至少兩個字段,這兩個字段分別作爲外鍵指向

    各自一方的主鍵。(就是將一個多對多拆分成兩個一對多。)

wKioL1nPXoODZZJyAAA2ONkrzPU930.jpg-wh_50

兩張表分別都是主表,第三張表爲從表,提供兩個字段,都是外鍵

#商品表

create table product(

    pid varchar(32) primary key,

    name varchar(40),

    price double

);

#訂單表

create table orders(

    oid varchar(32) primary key,

    totalprice double    #總計

);

#訂單項表

create table orderitem(

    oid varchar(50),--訂單id

    pid varchar(50) --商品id

);

#聯合主鍵(可省略)

alter table orderitem add primary key (oid,pid);

#---訂單表和訂單項表的主外鍵關係

alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);

#---商品表和訂單項表的主外鍵關係

alter table orderitem add constraint orderitem_product_fk foreign key (pid) references products(pid);

wKiom1nPp2izR0e8AAGtITchZYA667.jpg-wh_50

3、多表查詢操作

3.1、交叉連接查詢(基本上不會使用-得到的是兩個表的乘積)

    語法:select * from A,B;

wKioL1nPsOfyf9P1AACTzD453lA501.jpg-wh_50

3.2內連接查詢(使用的關鍵字inner join --inner可以省略)

    隱式內連接:select * from A,B where 條件

    顯示內連接:select * from A inner join B on 條件

wKiom1nPsbvh0oyeAABe_jI1FWo475.jpg-wh_50

3.3外連接查詢(使用的關鍵字outer join --outer可以省略)

    左外連接:left outer join

        select * from A left outer join B on 條件;

    右外連接:right outer join

        select * from A right outer join B on 條件;

wKiom1nPs8rTn5pLAADDJ38fC14886.jpg-wh_50

wKioL1nPs7ayo2s3AACm_auD4IY075.jpg-wh_50

3.4、查詢例題

#1.查詢哪些分類的商品已經上架

select * from category,product where cid=category_id;

wKioL1nPtEvQ58b-AACrkGQwF3Y082.jpg-wh_50

select * from category c,product p where c.cid=p.category_id;

wKioL1nPtVLhCLpSAACnNIQu2G8521.jpg-wh_50

#隱式內連接

select distinct cname from category c,product p where c.cid=p.category_id;

wKiom1nPtqyjfc13AAA8vq1VgCM311.jpg-wh_50

#內連接

select distinct cname from category c inner join product p on c.cid=p.category_id;

wKioL1nPtvjxv7_RAABIt3i7bDQ606.jpg-wh_50

#2.查詢所有分類上架商品的個數

#左外連接

select cname,count(category_id) from category c left outer join product p on c.cid=p.category_id group by cname;

wKioL1nPuoLwuGZQAABb5phcfbY976.jpg-wh_50

3.5、子查詢

一條select語句結果作爲另一條select語句一部分(查詢條件,查詢結果,表等)。

#子查詢,查詢“化妝品”分類上架商品詳情

#隱式內連接

select * from product p,category c where p.category_id=c.cid and c.cname='化妝品';

#子查詢

select * from product where category_id=(select cid from category where cname='化妝品');wKiom1nQ1puDufuUAAAcDxzyTx4260.jpg-wh_50

注意:

    從表外鍵不能添加主表中不存在的記錄。

    主表不能刪除從表中已經引用的記錄。

七、存儲引擎

存儲引擎:也叫表類型,指的是數據表的存儲機制,索引方案等配套相關功能。不同的引擎,由於處理方式不同,會帶來不同的功能或者相應優化,根據實際需求選擇合理的引擎。

選擇表的存儲引擎的標準:

    是否需要事務支持

    是否支持外鍵

    併發量的要求

    錯誤恢復的處理

    是否支持某些具體功能

最常用的存儲引擎:

    MyISAM:分開保存、支持索引壓縮、是表級鎖、不支持事務,外鍵、保存表中具體的行數

    InnoDB:保存到表空間、索引和數據是綁定保存的,不壓縮,體積大、很多時候是行級鎖,併發               高、不支持FULLTEXT類型的索引(新版本的InnoDB也支持),支持事務,外鍵,數據完整             性約束強、不保存表中具體行數

7.1、查看數據庫支持的引擎

show engines;

wKioL1nQ7wTSwHZaAAGhGGWiXTg721.jpg-wh_50

7.2、查看當前所使用的存儲引擎

show create table 表名

wKiom1nQ8CzQp3hGAADBLWNgk3M320.jpg-wh_50

7.3、更改表的存儲引擎

alter table 表名 engine=更改後的存儲引擎名

wKioL1nQ8JDDdwMtAAHsr_SwDZc465.jpg-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章