A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[学习交流] 杜铁岭

© 卞建彬 中级黑马   /  2018-10-18 19:43  /  281 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.数据库概述
1.        数据库的英文单词:DataBase  简称: DB
2.        什么是数据库? 用于存储和管理数据的仓库
3.        数据库的特点:
         1.持久化存储数据的
2.方便存储和管理数据
3.使用了统一的方式操作数据库 -- SQL
4.        数据库软件和数据库的区别:
[]  里边的值可写可不写
二.mysql数据库
安装细节:报这个状态码2003(2005),安装软件时,没有管理员权限(以管理员身份运行安装程序)
第一步:以管理员命令打开DOS命令窗口
第二步:

卸载第四步:搜索regedit注册表,删除mysql相关注册表
数据库软件和数据库的区别:
配置 :
Mysql服务启动\关闭
(每一个软件对应一个服务)
1.手动
2.mysql服务启动:cmd -->services.msc  再操作
3.Windows dos命令 net stop/start mysql (5 错误,因为权限不足)
MySQL登陆
1.mysql -uroot -proot(默认登陆本地服务器)
2.mysql -hip (连谁写谁的ip) -uroot -p连接目标的密码
3. mysql --host=ip --user=root --password=连接目标的密码
mysql退出
exit quit(属于mysql操作命令,不属于sql语法)
Mysql目录结构
mysql 安装目录
Bin:(二进制):exe ,bat 可执行文件
Conf configuration:(配置):核心配置文件:my.ini
lib:(图书馆,管理软件所需的jar)比如:xxxjar
Share:错误分享
mysql 数据目录
数据库:文件夹
:文件(二维表格)
数据(表记录)
Mysql,performance_schema不能对这两个数据库操作
MySQL服务器 硬件+软件
Mysql数据库安装好有三个文件夹(三个数据库)
.sql指令(掌握)操作数据库使用统一的方式(sql指令)来操作所有的数据库
1.        sql概述(结构化查询语言)
什么是SQL? 结构化查询语言(sql不仅能查询,还能进行添加,删除和修改操作(crud增删改查))
(定义了操作所有关系型数据库(英文单词)的规则(国际标准化组织制定的))
SQL通用语法
1.        sql语句
2.        可
3.        MYSQL数据库
4.        3种注释 单行注释:-- 注释内容(两个横杠,一个空格)  # 注释内容(不用写空格)
                                     多行注释: /*    */(java文档注释)
Sql常见的分类
DDL:数据库定义语言,作用:操作数据库/,(表结构)
操作数据库:CRUD
1.C(Create):创建
创建 create database (if not exists)名称; 判断如果不存在则创建
指定字符集create database 名称 character set gbk;
2.R(Retrieve):查询
                  showdatabases 查询所有数据库的名称
                  (通过查询某个数据库的创建语句)可以查看某个数据库的字符集:
show create database            数据库名称
                  安装好了目录下有4个文件夹(4个数据库)(其中一个不存在物理文件)
         3.U(Update):修改
修改数据库的字符集(如果修改会造成已有数据混乱吗)
alter database db3 character set utf8
(为什么不能写utf-8)
         4.D(Delete):删除
删除数据库 drop databasedb3;
判断数据库是否存在,存在再删除数据库 Drop databaseif exists 数据库名
5.使用数据库
         查询正在使用的数据库
操作表:
1.C(Create):创建
Creat table 表名 (
列名1 数据类型1,
列名2 数据类型2,
...
列名n数据类型n
);注意最后一列不加逗号
数据类型:1. int :整数类型
     2.double(n,m) 小数类型 数据长度一共n位,小数点后面m位
         3.日期类型 date:日期,只包含男月日, yyyy-MM-dd(数据必须添加进去,不添加没意义)
     4.datetime: 日期,包含年月日时分秒 yyyy-MM-ddHH:mm:ss
     5.时间戳类型 timestamp 包含年月日时分秒 yyyy-MM-ddHH:mm:ss
如果将来不给这个字段赋值,或者赋值为null,则默认使用当前系统时间来自动赋值
     6.字符串 varchar(最多位数 小于等于)
Create table 表名 like 被复制的表名;复制一个表
删除表
Drop (if exists )表名
第一行:表头行
2.R(Retrieve):查询
查询某个数据库中所有的表名称 showtables;
查询表结构 desc 表名;
3.U(Update):修改
1.修改表名 alter table 表名 rename to 新的表名;
2.修改表的字符集  showcreate table 表名 character set 字符集名称;
3.添加列 alter table 表名 add 列名 数据类型;
4.修改列名称 类型 alter table 表名 modify sex 新数据类型(只改类型)
Alter table 表名 change 列名 新列名 新数据类型
5.删除列 alter table drop 列名
(列 , 表头 ,字段)
4.D(Delete):删除
DCL:数据库控制语言,作用:授权,(了解)
DML:数据库操作语言,作用:(操作数据,增删改表中的数据)对表中的记录(数据)进行添加,修改,,删除操作
1.添加数据: insert into 表名 (字段1,字段2,字段n) VALUES(数据1,数据2,数据n)
Range(范围) 添加错会添加空值, 添加小数点超过范围的会发生精度损失,
注意事项:
         1.
列名和值要一一对应
2.如果表名后,不定义列名,则默认给所有列(不能少,少就会报错)添加值(不想写的值null ,时间戳的null会被替换为系统时间)
3.(日期默认格式以-分隔)
2.删除数据
delete form 表名 where 条件 如果不加条件(where-->),则删除表中所有记录(有多少条记录,就会执行多少次删除操作,效率比较低)
属于DDLTruncate table 表名; 推荐使用,效率更高删除表 ,然后再创建一个一模一样的空表
2.        修改数据
Update 表名 set 列名1 = 1 ,列名2 = 2... where 条件 如果不加任何条件,则会将所有记录全部修改
DQL:数据库查询语言,作用:(操作数据,查询表中数据)对表中的记录进行查询操作
语法: select  
            字段列表
From
表名列表
Where
条件列表
Group by
分组字段
                 Having
分组之后的条件
Order by
排序
Limit
分页限定
基础查询
1.多个字段的查询 Select * form 表名;(写*不方便阅读,显示所有字段 * 可以替换为一个或几个字段)
2.去除重复 select distinct (注意空字符) 查询出来的完全一样才去除,某一字段一样没用
3.计算列select name,math,english, math+english fromstudent;
如果有null参与的运算,计算结果都为null ifnull(表达式1,表达式2)
表达式1:哪个字段需要判断是否为null
表达式2:如果该字段为null后的替换值
select name,math,english, math+ifnull(english,0 as/(空字符,一个或多个) 总分 (起别名)from student;
第一个值为要判断的值
4.起别名 as (Alias)总分as也可省略
条件查询
模糊条件查询
分组条件查询
3.        Sql操作数据库和表
注意:
1.字段 ,列名称,表头,都表示一个意思,都是表的Filed
2.字符集,编码格式,编码表,都表示一个意思,都是编码
常见的编码:
Utf-8 万能的码表就,支持所有的字符
Gbk ,gbk2312,gb18030 中文的码表,支持中文,还支持其他字符,但不包含日文,韩文等
字符
Iso-8859-1 西欧的码表,支持西欧的字符,但不支持日文,韩文,中文等字符.
一.             单表查询(掌握)
条件查询:
1.Where子句后跟条件
2.运算符 > < <= >= =  <> 不等于
Where age >=20 AND age <=30;
Between and(betwwen 20 and 30)
In(集合)
Where age =22or,age =18 or age =25
Agein(22,18,25);
Is (not)null(null值不能使用= /!=判断)
And &&(不推荐用符号)
Or ||
Not !
模糊查询
Like
Like ‘‘ -->等于黄 // ename like (‘%’)
% 匹配任意0到个任意字符
_表示任意一个字符
排序查询
语法: order by 子句
Order by 排序字段, 排序方式, 排序字段2,排序方式2
排序方式:
ASC:(默认)升序
DESC:降序
注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件.
聚合函数查询
将一列数据作为一个整体,进行纵向的计算.
Count:计算个数
Select count(ifnull(,)) from student;
解决方案:
1.      选择非空的列进行计算(一般用这个方法):主键(非空,唯一)
*
这条数据如果有值不为null则算作一条数据
2.      Ifnull
Select count(ifnull(,)) from student;
Max:计算最大化
Min:计算最小值
Sum:计算和(排除null)
Avg:计算平均值
注意:1.聚合函数里面的参数:表的字段
2.聚合函数的计算,排除null(null值不参与运算)
3.聚合函数一般是对int类型的进行运算,其他类型没有意义
分组查询:
1.      语法:group by 分组字段;
2.      注意:
(分组字段,要有共同特点)
1.分组之后查询的字段:分组字段/聚合函数
分组查询:查询的字段具有共同特点
Select sex, ang(math),count(id) fromstudent group by sex;
Having count(id) >2;
2.wherehaving的区别?
1.where在分组之前进行限定,如果不满足条件,则不参与分组.having在分组之后进行限定,如果不满足结果,则不会被查询出来
2.where后不可跟聚合函数,having可以进行聚合函数的
Select 字段 把不符合的数据去掉,不参与下面分组
From 表名
Where 分组前条件判断
分组字段
Having 分组后的条件判断
Oredr by 排序字段
聚合函数一般放在放在分组后
分页查询
分页:数据太多,一次性查询出来,展示的效果不好,就是用户的体验不好.分页操作,不同的数据库分页基本原理不一样;(limit是一个mysql方言)
Mysql: limit 进行分页,其他数据库不能使用limit进行分页
limt
开始的索引,每页查询的条数 (索引从0开始)
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
二.             约束(掌握)
约束概述:一种规范(限制),数据库约束就是对表中的数据进行限定,保证数据的正确性,有效性,完整性.
数据库(mysql)约束分类:
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
非空约束:某一列的值不能为null
1.创建表时添加约束
2.创建表时在创建表头时后面添加not null
3.删除not null就是改变类型不添加.
4.添加not null alter table stu modify namevarchar(20) not null(duplicate 重复)
唯一约束:某一列的值不能重复
1.      在创建表时,添加唯一约束
2.      可以有nul,但是只能有一条记录为null
3.      删除 alter table stu drop index phone_number(与添加 not null 不同)
4.      在表创建完后添加唯一约束 (有重复记录无法添加)
主键约束:非空且唯一
1.注意:1.一张表只能有一个字段为主键
     2.主键是表中记录的唯一标识
2.   
1.在创建表时,添加主键约束
2.删除主键 alter table stu drop primary key
3.添加主键 (有重复记录无法添加)
               3.自动增长(只对int类型,不一定是主键)
如果某一列是数值类型的,可以使用AUTO_INCREMENT实现自动增长
1.AUTO_INCREMENT
2.删除alter table stu modify id inf;
3.添加
外键约束:外间作用,让表与表之间建立关系,保证数据的的有效性,正确性.
外键特点:
1.      外键的值不能随便写(可以为null,但是没什么用)
2.      外键的值引用于另一张
(称重复数据为冗余的数据)让表与表之间产生关系
1.在创建表时,可以添加外键
Constraint(约束) 外键名称 foreign key (外键列名称) references(关联) 主表名称
3.      删除外键
Alter table employee dropforeign eky 外键名称;
1. 11(了解) 主表(子表)可以是任意一方
2. 1对多/多对1 主表:一方表 子表:多方表
3. 多对多 主表子表可以是任意一方(不推荐这样区分和设计外键) 外间设计原则:
级联操作
级联操作概述:只有表与表之间有关联关系,才能进行级联操作
三.             多表关联(掌握)
1.多表之间的关系
1. 11(了解)
2. 1对多/多对1
3. 多对多
.数据库的设计范式(了解)
概念:设计数据库时,需要遵循的一些规范
数据库的备份和还原:
1.      命令行
备份语法: mysqldump -u用户名 -p密码 数据库名称> 保存的路径
还原: 1.登陆数据库
2.创建数据库
3.使用数据库
4.source      
2.      图形化工具
.JDBC:定义了操作所有关系型数据库的规则(接口)
1.概念:java database connectivity java数据库连接, java语言操作数据库
Jdbc本质:官方定义的一套操作所有关系型数据库的规则,即接口.各个数据库厂商去实现这套接口,提供数据库驱动jar.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类.
数据库驱动(实现类)
2.快速入门
1.步骤
1.导入驱动jar包
1.复制包到项目(建个目录)
2.右键-->add as library (真正将jar包加入到项目中)
2.注册驱动
Class.forname(“com.mysql.jdbc.Driver”)
3.获取数据库的连接对象 Connection
4.定义sql
5.获取执行sql语句的对象 statement
6.执行sql.接受返回结果
7.处理结果
8.释放资源
Denied 拒绝
Jdbc 常见的异常:
Java.sql.Exception:Access denied for root@
提示数据库的用户名或者密码错误
2.jdvc的api
1.java.sql.DriverManager(类):驱动管理对象
        功能:1.注册驱动:把mysql在当前类启动起来
Static void registerDriver(Driver driver): 注册与给定的驱动程序DriverMangager
2.获取数据库连接拿到了连接对象:可以理解一座桥梁
当前代码和mysql的桥梁
方法:
                           参数:
2.java.sql.Connection(接口)数据库连接对象
3.java.sql.Statement(接口)执行sql的对象
4.java.sql.PreparedStatement(接口)执行sql的对象
5.ResultSet(接口)结果集对象
结果集概述:使用resultSet对象封装
第一类方法:next()方法:跳转到下一行,默认的位置是在第一行前边
跳转都最后一行的下面:没有数据,返回false,就不会继续向下跳转了
第二类方法: int
解决:代码冗余问题
1.        从加载驱动到获取连接对象
                  1.加载驱动Class.forName(“类名”)
                  2.通过DriverManager
2.        关闭资源closeResource
上面的工具类
问题1:获取连接对象的4个参数写死了
原因:后期在开发中.如果更换任意一个参数,需要修改源码,这种操作是不被允许的.
细节:在开发中,遵循一个OOP原则
对代码的修改是关闭的,对代码扩展是开放的.
解决方案:
步骤一:把四个连接参数配置到properties文件
步骤二:通过读取配置文件,获取四个参数,得到连接对象
SQL诸如问题:在拼接sql,有一些sql的特殊关键字
为什么使用会出现sql注入问题?
原因:传递的参数会作为sql语句的一部分,进行拼接,而不仅仅时作为参数来使用
(可能会作为sql语句的一部分)
不会出现sql注入问题?
网络适配器 网卡
数据库连接池:
组建(spring的模板类:JDBCTemplate(crud操作))
一. 数据库连接池
1.概念:其实就是一个容器(集合),存放数据库连接的容器.(存储和管理Connection对象的容器)
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,
从容器中获取连接对象,用户访问完之后,
2.优点:
1.节约资源 == 在没有数据库池时,使用完Connection 以后,释放(销毁)Connection
         如果从数据库连接池里面取Connection使用,使用完以后,归还给数据库连接池
2.用户访问高效(不用从系统申请)  == 不用每次都创建连接对象,可以从数据库连接池    取
3.实现:
1.标准接口:DataSource java.sql包下
1.方法:
获取连接:getConnection()
归还连接:若果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接,而是归还连接.
2.一般我们不去实现它,由数据库厂商来实现
1.C3P0:数据库连接池技术
2.Druid:(德鲁伊)数据库连接池实现技术,由阿里巴巴提供
数据库连接池:需要自己初始化Connection,存到池子里(在配置文件里)
数据库连接池,初始化连接对象时,需要导入数据库驱动包
-------需要4个参数,配置文件里
4.C3P0
使用步骤
1.导入jar包 (两个)
2.定义配置文件
名称:c3p0.properties 或者c3p0.config.xml
路径:直接刚在直接放在src目录下即可(自动加载)
3.创建数据库连接池对象 不传参数使用默认config,传参数使用指定名称配置
(对应名称 name的属性值)
4.获取连接对象
5.Druid:
步骤:
1.导入jar包 ,数据库驱动jar包
2.定义配置文件
Properties
可以叫任意名称,可以放在任意目录下,手动加载
3.加载配置文件 Properties
4.获取数据库连接池对象:通过工厂类来获取DruidDataSourceFactory
5.获取连接:getConnection
(连接主机 地址值可以省略)
Spring提供的模板类: JDBCTemplate
模板类概述:
本质也是类,作用:操作数据库,非常简单方便
Spring JDBC
Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化
JDBC的开发
步骤:
1.导入jar包(5个)
2.创建对象JdbcTemplate对象.依赖于数据源DataSource
一般只写一个参数
3.调用JdbcTemplate方法来完成crud操作
Update():DML,增删改语句
如果有?值 , template.update(sql,写问好1对应的值,问号2对应的值))
!!!问号1,问号2 为一个可变参数,编译的时候会被封装成1个数组,所以可以直接写成一个数组
queryForMap:()查询结果将结果集封装为map集合
(这个方法查询的结果集只能是1行,将列名作为key,将值作为value)
如果有?值 , template.queryForMap(sql,写问好1对应的值,问号2对应值)
queryForList:()查询结果将结果集封装为list集合
query:查询结果,将结果封装为JavaBean对象
query(sql, new RomMapper<要封装成的类型>(类型.class))
query的参数:RowMapper(BeanPropertyRowMapper)实现类,
可以完成数据到JavaBean的自动封装
queryForObject:查询总记录数
一般用于聚合函数的查询 第二个参数传递封装的返回值结果类型(的class)
template.quetyForObject(sql,)
classcastException 类型转换异常
ctrl + p 查看参数类型
Select count (id/*)  查询总数
Conver null to bonus 查询报错                                                   

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马