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;`

相关文章
相关标签/搜索