目录
- 数据库概述
- 数据库概念
- 数据库的由来和发展
- 常见的关系型数据库服务器(DBMS)
- SQL概述
- 表的概念
- 数据库的安装与配置
- 安装
- 启动和连接MySQL
- 启动MySQL服务
- 连接MySQL
- MySQL图形化管理软件-Navicat
- 数据库安装失败解决方案
- MySQL数据库操作
- 数据库操作和存储引擎
- MySQL常用列类型[Mysql数据类型---Java数据类型]
- 表的操作
- 查询操作
数据库概述
数据库概念
1.数据库(Database,简称DB)
是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件)
【算法+IO+文件】
2.数据库管理系统(Database Management System,简称DBMS) — mysql
① 专门用于管理数据库的计算机系统软件;
② 能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并对数据完整性、安全性进行控制;
③ 我们一般说的数据库,就是指的DBMS,例如我们马上学习的MySQL就是其中之一;
3.数据库应用系统(Database Application System)
使用数据库技术的系统,基本上所有的信息系统都是数据库应用系统,它通常由软件、数据库和数据管理员组成。我们开发一款软件,然后这款软件能使用到数据库(和数据库有关系,有通信),那么,这一款软件我们就可以称之为数据库应用系统。
数据库的由来和发展
见文档
常见的关系型数据库服务器(DBMS)
数据库 | 公司 | 特点 |
---|---|---|
Oracle | Oracle(甲骨文/神域) | 运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。 |
DB2 | IBM | 速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。 |
SQL SERVER | 微软 | 全面,效率高,界面友好,操作容易,但是不跨平台。适用于于中小型企业领域。 |
MYSQL | AB–>SUN–>Oracle | 开源,体积小,速度快。适用于于中小型企业领域。 |
SQL概述
SQL:结构化查询语言(Structured Query Language),是关系数据库的标准语言,它的特点是:简单、灵活、功能强大,包含6个部分
一、数据查询语言(DQL):query查询[掌握]–用的多
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二、数据操作语言(DML):【掌握】–用的多
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三、事务处理语言(TPL):java概念
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四、数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
五、数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
六、指针控制语言(CCL):Sql编程!..
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
表的概念
表的特点和常用术语:
表具有固定的列和任意的行,在数学上称为”关系”;
二维表是同类实体的各种属性的集合,每个实体对应于表中的一行,在关系中称为元组,相当于通常的一条记录;表中的列表示属性,称为Field,相当于通常记录中的一个数据项,也叫列/字段
数据库的安装与配置
安装
见文档
启动和连接MySQL
启动MySQL服务
查看是否启动:
方式一:控制面板 - 管理工具 - 服务 - 查找mysql
方式二:任务管理器 - 服务 - 打开服务 - 查找mysql
方式三:win+r 输入 services.msc - 查找mysql
关闭mysql方式:
1.在服务里右键mysql可以停止mysql
2.win+R - net stop MySQL
启动方式:
方式一:在服务里右键mysql可以启动mysql
方式二:win+R - net start mysql
连接MySQL
win+r - mysql -u(用户名) -p(密码) -h(host) -P(端口)
如输入 mysql -uroot -proot -hlocalhost -P3306 回车
在运行窗口或cmd窗口输入都可以
密码可防窥输入,-p后回车再输入将以*号显示
MySQL图形化管理软件-Navicat
直接安装
连接mysql
数据库安装失败解决方案
控制面板 - 程序和功能 - 卸载程序 - 卸载mysql
查看Navicat连接不上代表卸载成功
卸载残留文件:
C盘 - Program Files 里搜索 mysql文件夹 删除掉
C盘 - Program Files (x86) 里搜索 mysql文件夹 删除掉
C盘 - ProgramData(这是个隐藏文件夹) 里搜索 mysql数据文件 删除掉
重启电脑
重新安装
MySQL数据库操作
数据库操作和存储引擎
见文档
MySQL常用列类型[Mysql数据类型—Java数据类型]
常用对照
其他见文档
表的操作
两种创建表的方式,查看表结构和删除表,表的约束
见文档
查询操作
见文档和sql文件
-- 对表的查看 - 数据库查询语句
SELECT 列名1,列名2,列名3,...(*) FROM 表名(视图 子查询)-->数据源; -- 不建议写 * (效率慢) 数据库优化方法
SELECT * FROM product;
-- 查询所有货品(product) 信息
SELECT * FROM product;
-- 查询所有货品的id,productName,salePrice
SELECT id,productName,salePrice FROM product;
-- 消除重复的数据
SELECT DISTINCT brand FROM product
-- 实现数学运算
-- 查询所有货品的id,名称和批发价(批发价=卖价*折扣)
SELECT id, productName, salePrice*costPrice FROM product
-- 查询所有货品的id,名称,和各进50个的成本价(成本=costPrice)
SELECT id, productName, 50*costPrice FROM product;
-- 查询所有货品的id,名称,各进50个,并且每个运费1元的成
SELECT id, productName, 50*(costPrice+1) FROM product;
-- 别名的使用
-- 查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
SELECT id, productName, 50*(costPrice+1) as 成本 FROM product; -- 使用别名的第一种方式
SELECT id, productName, 50*(costPrice+1) 成本 FROM product; -- 使用别名的第二种方式
-- 设置显示格式 CONCAT 函数 ex:列名:productSalePrice,行内容:罗技M90商品的零售价为:90.00
SELECT CONCAT(productName,'商品的零售价为:',salePrice) AS productSalePrice FROM product;
-- 过滤查询 比较运算符 ------------- 公式
SELECT 列名1,列名2,... FROM 表名 WHERE 条件; 单条件
SELECT 列名1,列名2,... FROM 表名 WHERE 条件1 AND 条件2; 多条件 AND (且)
SELECT 列名1,列名2,... FROM 表名 WHERE 条件1 OR 条件2; 多条件 or (或)
-- 练习
-- 查询货品零售价为119的所有货品信息.
SELECT * FROM product WHERE salePrice=119;
-- 查询货品名为罗技G9X的所有货品信息.
SELECT * FROM product WHERE productName='罗技G9X';
-- 查询货品名 不为 罗技G9X的所有货品信息.
SELECT * FROM product WHERE productName<>'罗技G9X';
-- 查询分类编号不等于2的货品信息
SELECT * FROM product WHERE dir_id!=2;
-- 查询货品名称,零售价,对于零售价小于等于200的货品
SELECT productName,salePrice FROM product WHERE salePrice<=200;
-- 查询id,货品名称,批发价,对于批发价大于350的货品
SELECT id,productName,salePrice*cutoff AS pfj FROM product WHERE salePrice*cutoff>350;
-- 思考:使用where后面使用别名不行,总结select和where的执行顺序
SQL 的执行顺序 (面试题)
from -> where -> SELECT
-- 字符串大小写的区分 BINARY
SELECT * FROM product WHERE BINARY productName='罗技g9x'
-- 逻辑运算 and or NOT(....)
-- 选择id,货品名称,批发价在300-400之间的货品
SELECT id,productName, salePrice*cutoff as pfj from product where salePrice*cutoff>=300 and salePrice*cutoff<=400
-- 选择id,货品名称,分类编号为2,4的所有货品
SELECT id,productName ,dir_id FROM product where dir_id=2 OR dir_id=4;
-- 选择id,货品名词,分类编号不为2的所有商品
SELECT id, productName ,dir_id FROM product where dir_id != 2;
-- 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
select id,productName ,dir_id ,salePrice,costPrice from product where salePrice>=250 OR costPrice>=200;
SELECT 列名1,列名2,... FROM 表名 WHERE 条件; 单条件
select 列名1,列名2,... from 表名 where 条件1 and (or) 条件2; -- ============================= 特重要
-- 范围查询 BETWEEN AND between and
SELECT 列名1,列名2,(*) FROM 表名 WHERE 列名 between 最小值 and 最大值 ----
-- 选择id,货品名称,批发价在300-400之间的货品
SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff>=300 AND salePrice*cutoff<=400; -- 没有用between and 的写法
SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff between 300 AND 400; -- 用between and 的写法
-- 选择id,货品名称,批发价不在300-400之间的货品
SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff NOT between 300 AND 400; -- not 的使用
-- 集合查询 in
SELECT 列名1,列名2 (*) FROM 表名 WHERE 列名 in(值1,值2,)
-- 选择id,货品名称,分类编号为2,4的所有货品
SELECT * FROM product where dir_id=2 or dir_id=4; -- 不要in的写法
SELECT * FROM product where dir_id IN(2,4); -- 用in的写法
-- 选择id,货品名称,分类编号不为2,4的所有货品
SELECT * FROM product where dir_id NOT IN(2,4);
-- 空值查询
-- 查询商品名为NULL的所有商品信息
SELECT * FROM product where productName is null -- 为空
SELECT * FROM product where productName =""; -- 对空字符串的查询
-- 模糊查询 LIKE % (匹配零个或多个字符串) _(匹配一个字符串) like
-- 查询id,货品名称,货品名称匹配'%罗技M9_'
SELECT id,productName FROM product WHERE productName LIKE '%罗技M9_'
-- 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%罗技M1__'
SELECT id,productName,dir_id,salePrice FROM product WHERE salePrice>200 AND productName LIKE '%罗技%'
-- 正则表达式
-- 查找product_name字段中包含字母的所有数据
SELECT * FROM product WHERE productName REGEXP'[a-zA-Z]'
-- 排序 ORDER BY DESC ASC
-- 选择id,货品名称,分类编号,零售价并且按零售价降序排序
SELECT id,productName,dir_id,salePrice FROM product ORDER BY salePrice DESC -- DESC 降序
SELECT id,productName,dir_id,salePrice FROM product ORDER BY salePrice -- ORDER BY 默认 是 ASC
-- 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
SELECT id,productName,dir_id,salePrice FROM product ORDER BY dir_id, salePrice
-- 查询M系列并按照批发价排序(加上别名)
SELECT *, salePrice*cutoff pfj FROM product WHERE productName like '%M%' ORDER BY pfj
SQL 的执行顺序 (面试题)
from-> where -> SELECT -> ORDER BY
-- 查询分类为2并按照批发价排序(加上别名)
SELECT *, salePrice*cutoff pfj FROM product WHERE dir_id=2 ORDER BY pfj
-- 分页查询 LIMIT (重点 慢慢来掌握)
逻辑分页-- 一次性全部查出来 ,然后把数据交给浏览器,让浏览器自己去分页
SELECT * from product
物理分页-- 推荐 不一次查询完 LIMIT
SELECT * FROM product limit ?,? -- 第一个?代表从哪一个开始查,第二个?代表查询多少条
SELECT * FROM product limit 0,5 -- 第一页
SELECT * FROM product limit 5,5 -- 第二页
--------------------------------------------------------------
每页展示五条数据
1, 0,5 (1-1)*5=0
2, 5,5 (2-1)*5=5
3, 10,5 (3-1)*5=10
4 15,5 (4-1)*5=15
................. (n-1)*5
-- 聚集函数
-- 查询所有商品平均零售价
SELECT AVG(salePrice) FROM product;
-- 查询商品总记录数(注意在Java中必须使用long接收)
SELECT COUNT(1) FROM product; -- 统计
-- 查询分类为2的商品总数
SELECT COUNT(1) FROM product WHERE dir_id =2
-- 查询商品的最小零售价,最高零售价,以及所有商品零售价总和
SELECT MIN(salePrice), MAX(salePrice),SUM(salePrice) FROM product;
-- 分组查询 GROUP BY (稍难的)
-- 查询每个商品分类编号和每个商品分类各自的平均零售价
SELECT AVG(salePrice) FROM product GROUP BY dir_id
-- 查询每个商品分类编号和每个商品分类各自的商品总数。
SELECT count(*),dir_id FROM product GROUP BY dir_id
-- 查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
SELECT count(*),dir_id FROM product WHERE salePrice>100 GROUP BY dir_id
-- 查询零售价总和大于1800的商品分类编号以及总零售价和:
SELECT sum(salePrice) ,dir_id FROM product GROUP BY dir_id HAVING sum(salePrice)>1800
-- 分组前的条件用where,分组后的条件用having
-- 存储引擎
MyISAM 不支持事务 表锁
InnoDB 支持事务 行锁
memory 不支持事务 表锁 不入库
对事务要求高我们用InnoDB,对事务要求不高我们用MyISAM,对事务要求不高 且查询修改极其频繁 且数据不用入库(重启数据库数据就消失)我们用memory