课程安排
(一) 数据库概述
(二) MySql概述
(三) MySql使用
(四) SQL的应用
(五) 案例编写
(六) 课程总结
课程目标
通过MySql的学习,要熟练的掌握使用数据库对数据的操作;
第1章 数据库介绍
1.1 数据库概述
前言 : 前一阶段,我们学习了HTML的相关知识,可以对数据进行简单的添加 修改 删除,但是很遗憾的是我们对数据的处理只是暂时的,一刷新什么都没有 了,究其原因是因为我们不能
对我们的操作的数据进行永久性的存储,那么这时候我们就想有没有永久存储数据的技术呢?
1.1.1 什么是数据库
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查 询操作。
数据库软件
1.1.2 什么是数据库管理系统
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进 行统一管理和控制,以保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中表内的数据。
一大坨数据(文件) --> 数据库管理系统(系统) MYSQL --> 操作数据库管理系统的人(管理员) DBA 自己 (分钟算工资) 6W/月
最终 : 永久的保存数据
管理数据库操作系统的程序员叫做数据库管理员 英文简称 DBA(database administrator),以后看见这样的人一定要多跟他玩耍,这都是一个企业里大佬级人物
数据库与数据库管理系统的关系
如果你想往数据库里存储一条数据
1) 安装一个数据库软件 mysql 5.5
2) 创建一个数据库 MYSQL
3) 统一大数据库 MYSQL 大数据库下创建自己的小数据库 来存储我们自己的数据
学生管理系统 student_db
考试管理系统 exam_db
天气管理系统 weather_db
交通管理系统 jiaotong_db
最起码 需要管理孙建国 和 赵文明的数据 person_db person(字段 id name sex age from) = java类
4) 有了自己的小数据库之后 我们还需要按类型存储数据 按类型 --> 数据库创建数据库表的过程
5) 真正存储数据
1.2 数据库表
java是以类来进行数据的封装,数据库中以表为组织单位存储数据。
表类似我们的Java类,表里面有字段就相当于是类中的属性。
举个例子 :
我们操作过的人员对应的类叫人员类
person
属性如下
id 数字 编号
name 字符串 名字
.........
数据库中也有类似的结构,叫做表
类名 person --> 数据库 perosn 表
属性 --> 字段
id Integer --> id number
name String --> name varchar
总结,就会发现以下对应关系。
类----------表
类中属性----------表中字段
对象----------记录
1.3 表数据
根据表字段所规定的数据类型,我们可以向其中填入一条条的数据,而表中的每条数据类似类的实例对象。表中的一行一行的我们称之为记录。
表记录与java类对象的对应关系
1.4 常见数据库
常见的数据库管理系统
MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite : 嵌入式的小型数据库,应用在手机端。
常用数据库:MYSQL,Oracle(DBA认证 OCA OCP OCM).
这里使用MySQL数据库。MySQL中可以有多个数据库,数据库是真正存储数据的地方。
第2章 MySql数据库
2.1 MySql安装
-
点开mysql安装包,会提示安装mysql,点击下一步即可,我们这里应用的是5.0 windows32位的安装程序
-
点击 next 之后,会出现安装类型选项 一共有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择 Typical(默认)即可
-
是确定你的安装类型 和 安装位置 有的同学可能不想安装在C盘,其实大可以放心,重新安装系统之后数据库肯定也得重装,所以安装在C,格式化的时 候一波带走岂不美滋滋
-
正在安装中耐心等候
-
安装好了之后,会弹出一个mysql的广告,会告诉你mysql非常非常好用之类的,直接next即可
- 补充说明mysql在各个领域都好用,直接点next
-
到此已经安装完成mysql的安装程序,然后出现这个页面,这个页面是告诉你马上要开始配置一个mysql数据库了,此处点击finsh完成mysql软件的安装
- 开始配置mysql的数据库
- 此处问你是要详细的配置一个mysql数据库(Detailed Configuration)还是标准化配置一个mysql数据库(StandardConfiguration)
作为一个mysql的专业从业人员来说,我们肯定是选择详细配置的
- 选择服务器类型,“Developer Machine(开发测试类,mysql占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资 源)”、
“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”,
大家根据自己的类型选择了,一般选“Server Machine”,不会太少,也不会占满。但是我们作为helloworld来说,开发环境就够用
- 选择mysql数据库的大致用途,
“Multifunctional Database(通用多功能型,好)”、
“Transactional Database Only(服务器类型,专注于事务处理,一般)”、
“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用),
随自己的用途而选择了,我这里选择“Multifunctional Database”,按“Next”继续。
关于Innodb数据库引擎,可参见https://baike.baidu.com/item/innodb/8970025?fr=aladdin
- 对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,此处不建议修改,否则可能会造成数据库损坏,
当然,对数据库做个备份就没问题了,这里不详述。我这里没有修改,使用用默认位置,直接按“Next”继续
还有要注意,此处真的不建议修改,修改了会导致你的数据库安装失败,其实装在C盘也没有什么,换句话说,你才能操作多少条数据呀,对不对,
也没有什么,换句话说,你才能操作多少条数据呀,对不对,
- 选择您的网站的一般mysql访问量,同时连接的数目,
“Decision Support(DSS)/OLAP(20个左右)”、
“Online Transaction Processing(OLTP)(500个左右)”、
“Manual Setting(手动设置,自己输一个数)”,我这里选“Online Transaction Processing(OLTP)”,
自己的服务器,应该够用了,按“Next”继续
- 是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,
我这里启用,把前面的勾打上,Port Number:3306,在这个页面上,您还可以选择“启用标准模式”(Enable Strict Mode),
这样MySQL就不会允许细小的语法错误。如果您还是个新手,我建议您取消标准模式以减少麻烦。但熟悉MySQL以后,
尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。还有就是后面的"Add firewall exception for this port",这句话是说将3306 加入防火墙
如果你是win10的系统或者你没有关闭防火墙,这步就一定要去掉那个勾,否则会导致你安装失败,一定要切记,按“Next”继续
15 . 这一步也很关键,设置字符集,
【Standard Character Set】默认字符集,支持的其它字符的很少;
【Best Support For Multilingualism】能支持大部分语系的字符,主要是以UTF-8的形式存储,所以一般选择这一项;
【Manual Selected Default Character Set/ Collation】,手动设置字符集
其实此处也可以手动设置为UTF-8 或者 GBK (当然需要看下你的eclipse的编码是GBK还是UTF-8,最后和eclipse保持一致)
- 设置Windows的操作,
【Install AS Windows Service】,设置Service Name,一般默认的就可以,这个名字会出现在windows服务里。
【Include Bin Directory in Windows PATH】,
把Bin目录放在Windows Path路径中,建议选择上它,这样在Dos窗口里直接可以访问MySQL,不需要到MySQL的bin目录下进,方便,快速。 按【Next】继续。
- 这一步询问是否要修改默认root用户(超级管理)的密码(默认为空),
“New root password”如果要修改,就在此填入新密码(如果是重装,并且之前已经设置了密码,
在这里更改密码可能会出错,请留空,并将“Modify Security Settings”前面的勾去掉,安装配置完成后另行修改密码),
“Confirm(再输一遍)”内再填一次,防止输错。 “Enable root access from remote machines(是否允许root用户在其它的机器上登陆,如果要安全,就不要勾 上,如果要方便,就勾上它)”。
最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据不能操作数据,包括查询)”,一般就不用勾了,设置完毕,按“Next”继续。
- 确认设置无误,如果有误,按“Back”返回检查。按“Execute”使设置生效。
到此 mysql数据库软件和mysql数据库都已经安装到位了,也是美滋滋
安装后,MySQL会以windows服务的方式为我们提供数据存储功能。开启和关闭服务的操作:右键点击我的电脑→管理→服务→可以找到MySQL服 务开启或停止。
也可以在DOS窗口,通过命令完成MySQL服务的启动和停止(必须以管理员身份运行cmd命令窗口)
2.2 登录MySQL数据库
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录。
格式1:cmd>mysql –u用户名 –p
代码
接下来输入密码即可登录
登录成功效果
格式2:cmd>mysql -hip地址 --user=用户名 --password=密码
例如:mysql -h127.0.0.1 --user=root --password=root
代码:
Java --> java语言
网页 --> HTML语言
数据库 --> SQL语言
第3章 SQL语句
3.1SQL概述
3.1.1SQL语句介绍
数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。
SQL语言 是有规范的 是我们操作数据库的特定语言 和 java一样
java语言 是用来编写应用程序(网站类应用程序)
SQL 专门操作数据库的
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
SQL 语言 标准 所有数据库都会遵循的标准 各种不同的数据库都会在标准之上建立一些自己的规范
SQL 方言
MYSQL limit 分页 Oracle rownum 分页
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "SQL"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以 及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有 完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 1351986),1987年得到国际标准组织的支持下成为国际标 准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
3.1.2 SQL语句分类
SQL分类:
1) 数据定义语言: 主要对数据存储的结构进行定义 存储一个数据 --> 表 --> 数据库 创建 销毁 修改 DDL
简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 DDL 数据定义语言 主要定义 结构的
(创建(create)一个结构,修改(alter)一个结构,删除(drop 摧毁)一个结构)
教室 DDL构建或者修改或者删除这个教室(结构)
表 结构 DDL create table alter table drop table
对数据本身的操作
2) 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。 关键字:insert,delete,update等 对内容上进行操作(数据) 数据操作语言 DML 你对一条数据的操作 添加(INSERT) 修改(UPDATE) 删除(DELETE)
对数据本身的查询 3) 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等 查询(SELECT)
mysql select
hbase/hive select
公司 DCL DBA>Java/BD 开发 Java运维 Java测试 老板
1) 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。 权限操作(DBA)
root用户 mysql中最高级的数据库管理员账户
2) TCL 事务控制语言(不常用)
3.1.3 SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾
-
可使用空格和缩进来增强语句的可读性
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。 - 同样可以使用/**/的方式完成注释,也可以用 -- 的形式完成注释
-- 注释
2种
数值 和 非数值
4中基本数据类型
3.1.4 MySql的数据类型
MySQL中的我们常使用的数据类型如下
char 字符类型 固定长度 char(10) 一
varchar 可变长度的字符串 varchar(10) 一
date 日期
datetime 日期 时间
详细的数据类型如下
操作数据库的 > SQL > 分 3 类
1) DDL 数据定义语言 定义数据存储结果 表 数据库 create alter drop show
2) DML 数据操作语言 对数据进行 添加(insert) 修改(update) 删除(delete)
3) DQL 重要 数据查询语句 select
最终目的 存储数据 并 操作数据
数据存储在哪里? > 表 > 数据库
3.2 DDL之数据库操作:database
3.2.1 创建数据库
格式:
-
create database 数据库名;
- create database 数据库名 character set 字符集;
例如:
创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8
创建数据库 并指定数据库中数据的编码
效果 :
3.2.2 查看数据库
查看数据库MySQL服务器中的所有的数据库:
效果:
查看某个数据库的定义的:
show create database 数据库名;
例如:
3.2.3 删除数据库
drop database 数据库名称;
例如:
3.2.4 使用数据库
l 查看正在使用的数据库:
此处因为我们没有使用数据库,所以显示当前使用的数据库为 NULL 其他的数据库操作命令
使用某个数据库:
use 数据库名;
例如:
3.3 DDL之表操作:table
3.3.1创建表
格式:
举例 : 比如对京东商城进行数据库表分析
从上图我们可以知道京东的商品是先分成大类,然后大类中再分成小类小类中再保存具体商品
那么接下来我们也按照这种思路来进行表的学习
例如:
创建一张商品类别表
此处需要注意的是表都是在不同的数据库中,所以需要先指定要使用的数据库
指定完数据库就可以创建自己的表了
代码:
效果
3.3.2 查看表
查看数据库中的所有表:
格式:
查看表结构:
格式:desc 表名;
3.3.3 删除表
格式:drop table 表名;
3.3.4 修改表结构格式:
1) alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
为商品类别表添加一个新的字段为 分类描述 varchar(20)
注意 : desc 是SQL关键字,所以你要想用这个关键字作为列名必须转移,也就是在列名上加 进行转移,注意这不是单引号 而是 请详见下图
机械键盘这个键的位置可能有所不同,大家要细心查找
2) alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
例如:
为商品类别表的描述字段进行修改,类型varchar(50) 添加约束 not null(该字段的值不能为null)
3) alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
为商品类别表的分类名称字段进行更换 更换为 cdesc varchar(30)
4) alter table 表名 drop 列名;
ALTER TABLE category CHANGE desccdesc VARCHAR(30);1
作用:修改表删除列.
例如:
删除商品分类表中cdesc这列
5) rename table 表名 to 新表名;
作用:修改表名
例如:
为分类表category 改名成 producttype
问题 : 这么操作实在是适应不了,mysql有没有什么好操作一点的客户端呢?
答案 : 有的
3.3.4 安装mysql的第三方客户端Navicat:
1.: 解压第三方客户单Navicat
- 因为这个客户端是绿色版的所以点开直接就能用我们直接点开
-
找到Navicat的可执行程序双击打开即可,点开之后问你是试用还是注册,可以点击注册,我们选择注册
-
在刚才解压的文件夹里找到注册码
- 填入注册码即可
3.4 DML数据操作语言
3.4.1插入表记录:insert
语法:
-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
--向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values (值1,值2,值3..);
注意:
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
如果要插入空值,可以不写字段,或者插入 null。
首先我们先把表名改回来,代码
然后添加数据,代码:
3.4.2 更新表记录:update
用来修改指定条件的数据,将满足条件的记录指定列修改为指定值
语法:
--更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,...;
--更新符合条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件;
注意:
列名的类型与修改的值要一致.
修改值得时候不能超过最大长度.
除了数值类型外,其它的字段类型的值必须使用引号引起
代码 :
注意 : 更新的时候一定要按照某种条件再更新,一定要注意,因为更新全表数据这种需求根本就没有,如果是因为你忘记写条件而导致的全表数据更新那 么更新坏的数据你是需要按条的!
3.4.3 删除记录:delete
删除有两种情况
如果删除表中的部分数据
语法
delete from 表名 where 条件;
如果删除表中所有数据
语法:
delete from 表名;
或者
truncate table 表名;
此处有一道面试题:
传说中的面试题 : 假设表里有一亿条记录,当删除表中所有数据的时候,你会使用以下哪种方案,并说明原因
A. DELETE FROM 表
B. TRUNCATE TABLE 表;
答案 : B
解释 : 当删除表中所有数据的时候
delete from 表 数据DML语句 数据操纵语言 是从表中把数据一条一条的删除,所以这样删除大表数据的时候一条一条删会很慢
truncate table 数据DDL语句 数据定义语言 它不管表中有多少记录,它会先摧毁这个表结构,然后重建表结构,所以这样在删除大表数据的时候就会很快;
但是需要注意个问题,如果你要是误操作的话 delete from 是有可能恢复的 但是 truncate table是恢复不了的
代码 :
第4章 SQL 约束
4.1主键约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
主键的意义与作用
主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建 或更改表时可通过定义 PRIMARY KEY 约束来创建主键。
一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。
作用:
1)保证实体的完整性;
2)加快数据库的操作速度
3) 在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
4.1.1 添加主键约束
创建表时,在字段描述处,声明指定字段为主键:
4.2 自动增长列
我们通常希望在每次插入新记录时,数据库自动生成字段的值。
我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(一般是主键)。
下列 SQL 语句把 "persons" 表中的 "pid" 列定义为 auto_increment 主键
向persons添加数据时,可以不为pId字段设置值,也可以设置成null,数据库将自动维护主键值:
扩展:默认AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE person
MODIFY COLUMN pid int(8) NOT NULL AUTO_INCREMENT FIRST ;
4.3 非空约束
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 语句强制所有列不接受 NULL 值:
注意 : 主键如果标记为primary key 就已经不为null了,所以此处not null 可以省略;