JavaEE課程筆記WEB36-MySQL篇

1.1上次課內容回顧: mysql

[AppleScript]純文本查看__複製代碼sql

?數據庫

01服務器

02框架

03函數

04工具

05插件

06設計

07code

08

09

10

11

12

13

14

15

16

17

BootStrap:

* 響應式的HTML`,CSS,`JS的框架.

* 響應式設計:

* 設計一套頁面`,適配不一樣的設備,在手機,PAD,`PC端都可以正常瀏覽.

* 響應式原理:

* 使用CSS`3的媒體查詢,`根據屏幕的分辨率匹配不用的樣式.

* BootStrap`:`

* 全局CSS:

* 柵格:

* 表單`:`

* 按鈕...

* 組件`:`

* 導航條:

* 分頁欄`:`

* 標籤頁`:`

* JS的插件:

* 圖片輪播.

1.2MYSQL的回顧:
1.2.1MySQL的概述:
1.2.1.1什麼是數據庫:
數據庫:就是一個文件系統,這個文件必須經過標準的SQL訪問.
1.2.1.2什麼是關係型數據庫:
關係型的數據庫存放的都是實體之間的關係.
1.2.1.3經常使用的關係型數據庫:

[AppleScript]純文本查看__複製代碼

?

1

2

3

4

5

6

7

8

9

MySQL       :免費的小型的數據庫`,`如今被Oracle收購.

Oracle      :Oracle公司收費的大型的數據庫.

SQLServer   :微軟公司收費中型的數據庫.

DB`2         :IBM公司收費的大型的數據庫.`

SyBase      :SyBase公司收費的數據庫.已經被淘汰.PowerDesigner數據建模的工具.

SQLite      :小型的嵌入式的數據庫.

*`*`* Java程序中常常使用的數據庫

MySQL

Oracle

1.2.1.4數據庫存儲的結構:

1.2.2SQL的概述:
1.2.2.1什麼是SQL:
SQL:結構化的查詢語言.
1.2.2.2SQL分類:
DDL:數據定義語言
    * create,alter,drop...
DML:數據操縱語言
    * update,insert,delete
DCL:數據控制語言
    * grant,if..
DQL:數據查詢語言
    * select
1.2.2.3SQL的特色:
非過程性語言:一條語句就會有一個運行的結果.
1.2.3使用SQL
1.2.3.1使用SQL操做數據庫(對數據庫的CRUD的操做)
【建立數據庫】

[AppleScript]純文本查看__複製代碼

?

1

2

3

4

5

6

7

8

9

語法`:`

* create database 數據庫名稱 [`character set 字符集 collate 字符集校對];`

練習`:`

* 建立db`1`;

* create database db`1`;

* 建立一個帶有字符集的數據庫db`2`;

*  create database db`2 character set gbk;`

* 建立一個帶有字符集和校對規則的數據庫db`3`;

* create database db`3 character set utf8` `collate  utf8`_bin;

【查看數據庫】

[AppleScript]純文本查看__複製代碼

?

1

2

3

4

5

6

7

語法`:`

* 查看數據庫服務器中全部的數據庫`:`

* show databases;

* 查看某個數據庫的定義信息.

* show create database 數據庫名;

* 查看當前正在使用的數據庫信息.

* select database`();`

【刪除數據庫】
語法:
* 刪除數據庫:
    * drop database 數據庫名;
【修改數據庫】
語法:
* 修改數據庫修改的是的數據庫的字符集和校對規則.
    * alter database 數據庫名 character set 新字符集 collate 校對規則;
【切換數據庫】
語法:
* use 數據庫名稱;
1.2.3.2使用SQL操做數據庫中的表(對數據庫的表CRUD的操做)
【建立表】

[AppleScript]純文本查看__複製代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

語法`:`

* create table 表名 (

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

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

字段名 類型`(長度) 約束`

)`;`

數據類型`:`

* Java類型`:               MySQL`:

byte`/short/int/long   tinyint/smallint/int/`bigint

String                    char`/`varchar

* 區別?char是固定長度的字符串`,`varchar可變長度的字符串.

* char`(8) 和 varchar(8`)

* 若是插入一個字符串hello 插入到char 那麼 插入hello   .插入到varchar中 插入hello

float                  float

double                 double

boolean                bit

Date date`/time/datetime/`timestamp

* datetime和timestamp都是既有日期又有時間的日期類型

* 區別? datetime須要使用外部傳入的日期.若是沒傳這個值就是Null. timestamp會使用系統當前的時間做爲這個值的默認值.

文本文件                   Text

二級制文件              BLOB

*`**` `Oralce使用CLOB/`BLOB

*`*`* MYSQL中除了字符串類型須要設置長度其餘的類型都有默認長度.

約束:

單表約束:

* 主鍵約束:primary key (`默認就是惟一非空的`)

* 惟一約束:unique

* 非空約束:`not null`

建立一個表:

`*** 建立表以前先選擇數據庫:use 某個數據庫;`

create table employee`(`

eid int primary key auto_increment`,`

ename varchar`(20) not null`,

email varchar`(30) unique`,

birthday date`,`

job varchar`(20)`,

resume text

)`;`

【表的查看】

[AppleScript]純文本查看__複製代碼

?

1

2

3

4

查看數據庫中有哪些表:

* show tables;

查看錶結構`:`

* desc 表名;

【表的刪除】
表的刪除:
* drop table 表名;
【表的修改】

[AppleScript]純文本查看__複製代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

修改表添加列:

* alter table 表名 add 列名 類型`(長度) 約束;`

* alter table employee add image varchar`(50)`;

修改表刪除列:

* alter table 表名 drop 列名;

* alter table employee drop job;

修改表的列的類型長度及約束`:`

* alter table 表名 modify 列名 類型`(長度) 約束;`

* alter table employee modify image varchar`(80) not null;`

修改表的列名

* alter table 表名 change 舊列名 新列名 類型`(長度) 約束;`

* alter table employee change image eimage varchar`(60)`;

修改表名

* rename table 舊錶名 to 新表名;

* rename table employee to user;

修改表的字符集:

* alter table 表名`character set 字符集;`

* alter table user character set gbk;

1.2.3.3使用SQL操做數據庫中的表的記錄(對錶的記錄的CRUD的操做)
【插入記錄】

[AppleScript]純文本查看__複製代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

語法

* insert into 表名 (`列名,列名,...)` `values` `(1,2,...); ---插入指定列的值`

* insert into 表名 values (`值1,2,...); ---插入全部列的值`

注意事項:

* 列名的個數與值的個數對應.

* 列的類型與值的類型對應.位置也要對應.

* 列的類型若是是字符串或者日期`,`寫值的時候使用單引號將值引發來.

* 插入的值的最大長度不能超過列的最大長度.

插入記錄:

* 插入某幾列的值`:`

* insert into employee (`eid,ename,email)` `values` `(null,'aaa','aaa@itcast.cn');`

* 插入全部列的值`:`

* insert into employee values (`null,'bbb','bbb@itcast.cn','1990-09-01','HR','I am HR');`

插入中文:

insert into employee (`eid,ename,email)` `values` `(null,'張三','aaa@163.cn');`

ERROR 1366 (`HY000):` `Incorrect` `string` `value: 'xD5xC5xC8xFD' for column 'ename' at row 1`

*`*`* 插入中文問題的解決:

* show variables like '%`character`%';

*`* 找到MYSQL的安裝路徑/my`.ini文件:

*`* 從新加載mysql的配置文件:`

* services.msc

* 中止mysql的服務`,`從新啓動mysql服務.

* 執行以前的SQL語句.

[AppleScript]純文本查看__複製代碼

?

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

【修改記錄】

語法:

* update set 列名`=,列名=值 [where 條件];`

注意事項:

* 列名和值類型也要一致.

* 值不能超過列的最大長度.

* 值是字符串或日期`,`須要使用單引號.

練習:

* 修改employee表中全部記錄的job爲WORKER

* update employee set job`=`'WORKER';

* 修改employee表將`name爲aaa的郵箱改成[email]aaa@163.com[/email]`

* update employee set email = 'aaa@`163.`com' where ename = 'aaa';

* 修改employee表將`name爲bbb的郵箱改成[email]bbb@163.com[/email]同時修改job爲HR`

* update employee set email = 'bbb@`163.com'` `,` `job='HR'` `where` `ename=`'bbb';

【刪除記錄】

語法:

* delete from 表 [`where 條件];`

注意事項:

* 刪除表中的一行記錄`,`不能刪除某列值

* 若是沒有條件刪除表中的全部列.

練習:

* 刪除`id8的記錄:`

* delete from employee where eid = 8`;`

* 刪除全部記錄`:`

* delete from employee;

刪除表中的全部記錄truncate table 表名  和 delete from 表  區別?

* 區別`:`

* truncate table 刪除表的記錄:將整個表刪除掉`,`從新建立一個新的表.truncate屬於DDL.

* delete from 刪除表的記錄:一條一條進行刪除. delete`屬於DML。`

* 事務管理 只能做用在DML語句上.若是再一個事務中使用`delete`刪除全部記錄,能夠找回.

【基本查詢】

查詢語句:

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

準備:

create table exam`(`

id int primary key auto_increment`,`

name varchar`(20)`,

english int`,`

chinese int`,`

math    int

)`;`

insert into exam values (`null,'張三',85,74,91);`

insert into exam values (`null,'李四',95,90,83);`

insert into exam values (`null,'王五',85,84,59);`

insert into exam values (`null,'趙六',75,79,76);`

insert into exam values (`null,'田七',69,63,98);`

insert into exam values (`null,'李四',89,90,83);`

查詢全部記錄`:`

* select * from exam;

查詢這個班級人的姓名和英語成績`:`

* select name`,`english from exam;

查詢英語成績`,將重複英語成績去掉:`

* select distinct english from exam;

查詢李四的學生成績`:`

select * from exam where name`=`'李四';

查詢名稱叫李四而且英語成績大於`90`的

select * from exam where name`='李四'` `and` `english` `>90`;

將成績`+10分進行顯示`:

select name ,`english+10,chinese+10 ,math+`10 from exam;

顯示這我的的名稱和對應總成績的分數`:`

select name`,english+chinese+`math from exam;

使用`as起別名,as能夠省略.`

select name , english`+chinese+`math as sum from exam;

【條件查詢】

`where`語句後面能夠加:

條件的關鍵字:

= , > , >`= , <,` `<= , <`>

like中可使用佔位符`: _ 和 %  :下劃線匹配一個字符,` `%:`能夠匹配任意多個字符.

* like ‘張%’;  like ‘張_’; like ‘%明’; like ‘%明%’;

in 後跟着一組值.

* id in (`1,2,3`)

and or not

【排序查詢】

order by 對數據進行排序.默認升序. (asc升序`,`desc降序)

* 查詢全部學生的信息`,`而且按語文成績進行排序.

* select * from exam order by chinese;

* 查詢全部學生的信息`,`而且按語文成績進行降序排序.

* select * from exam order by chinese desc;

* 查詢學生的信息`,按照英語成績降序排序,若是英語成績相同,`按照語文降序.

* select * from exam order by english desc`, chinese desc;`

* 查詢姓李的學生的信息`,`同時按照英語升序排序.

* select * from exam where name like '李%' order by english asc;

【聚合函數】

sum`(`)

count`(`)

max`(`)

min`(`)

avg`(`)

* 查詢每一個學生總成績`:`

* select name`,(english+chinese+math`) from exam;

* 統計全部學生的總分`:`

* select sum`(english+chinese+math) from exam; -- ifnull(english,0)`

* select sum`(english)+sum(chinese)+sum(math) from exam;`

* 統計學生的個數`:`

* select count`(*) from exam;`

* 統計英語成績的最高分:

* select max(english) from exam;

* 統計語文成績的最低分:

* select min(chinese) from exam;

* 統計英語成績平均分:

* select avg(english) from exam;

【分組】

group by

建立一個訂單詳情的表:

* 統計訂單中的每類商品所購買的個數:

* SELECT product,COUNT(*) FROM orderitem GROUP BY product;

* 統計訂單中的每類商品所花的金額`:`

* SELECT product`,SUM(price) FROM orderitem GROUP BY product;`

* 統計訂單中的每類商品所花總金額大於`2000`信息.

* SELECT product`,SUM(price) FROM orderitem GROUP BY product HAVING SUM(price)` `>` `2000;`

* 統計訂單中名稱有電子的商品而且所花金額大於`1500`同時按照價格降序排序:

* SELECT product`,SUM(price) FROM orderitem WHERE product LIKE '電%' GROUP BY product HAVING SUM(price)` `>` `1500` `ORDER BY SUM(price) DESC;`

【SQL的查詢語句的總結】

順序`: s...f...w...g...h...o...;`

1.3`案例一:將商城的案例中的表結構進行分析:`

1.3`.1需求`:

在最後的綜合案例中`,會建立數據庫,爲數據庫中建立不少表.表與表之間是有關係存在,`分析表之間關係而且完成表的建立.

1.3`.2分析:`

1.3`.2.1技術分析`

【數據庫的多表設計】

數據庫都是關係型的數據庫`,`存的是實體之間的關係.實體之間有哪些關係?

實體的關係總結起來就有三種關係:

一對多`:`

* 客戶和訂單:一個客戶能夠產生多個訂單`,`一個訂單隻能屬因而某一個客戶.

* 部門和員工:一個部門下能夠有多個員工`,`一個員工只能屬於某一個部門.

多對多`:`

* 學生和課程:一個學生能夠選擇多門課程`,`一門課程能夠被多個學生選擇.

* 訂單和商品:一個訂單中包含多個商品`,`一個商品也能夠出現多個訂單中.

一對一:

* 公司和地址:一個公司只能有一個註冊地址`,`一個地址也只能被一個公司註冊.

【多表的設計】

一對多的關係的建表原則:

* 在多的一方建立一個字段`,`這個字段做爲外鍵執向一的一方的主鍵.

多對多的關係的建表原則:

*` 建立一個第三種表,中間表中至少須要兩個字段分別做爲外鍵執向多對多雙方的各自的主鍵.`

一對一的關係的建表原則:

* 惟一外鍵對應:假設一對一的雙方是一對多的關係.在多的一方建立外鍵執向一的一方的主鍵.須要在外鍵上添加一個unique約束.

* 主鍵對應:將一對一的雙方的主鍵創建映射.

【使用SQL建立一對多的關係】

建立客戶表`:`

create table customer`(`

cid int primary key auto_increment`,`

cname varchar`(20)`

)`;`

create table orders`(`

oid int primary key auto_increment`,`

addr varchar`(50)`,

cid int

)`;`

*`*`* 約束:用來保證數據的完成型.

* 多表約束:外鍵約束!!!

*`*`* 給orders表中的cid添加外鍵約束.

* alter table orders add foreign key (`cid)` `references customer(cid)`;

[AppleScript]純文本查看__複製代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

1.4`.2分析:`

1.4`.2.1技術分析:`

【多表的查詢的SQL】

多表的查詢的方式:

* 交叉鏈接:

* select * from A`,`B; --- 得到的是兩個表的笛卡爾積.

* 內鏈接`: inner join -- inner 能夠省略`

* 顯式內鏈接:`select * from A inner join B on 條件;`

* SELECT * FROM customer c INNER JOIN orders o ON c.cid = o.cid;

* 隱式內鏈接:`select * from A,B where 條件;`

* SELECT * FROM customer c ,`orders o WHERE c.cid = o.cid;`

* 外鏈接:outer join -- outer 能夠省略

* 左外鏈接:left outer join -- select * from A left outer join B on 條件;

* SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.cid = o.cid;

* 右外鏈接:right outer join -- select * from A right outer join B on 條件;

* SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.cid = o.cid;

【多表查詢的子查詢】

一個SQL語句查詢的過程當中須要依賴另外一個查詢語句.

SELECT * FROM customer c`,orders o WHERE c.cid` `=` `o.cid AND  c.cid IN` `(SELECT cid FROM orders WHERE addr LIKE '海淀%');`

【多表練習】

按客戶名稱統計訂單的個數.

SELECT c.cname`,COUNT(*) FROM customer c,orders o WHERE c.cid=o.cid GROUP BY c.cname;`

相關文章
相關標籤/搜索