B026-MySQL基础

目录

      • 数据库概述
        • 数据库概念
        • 数据库的由来和发展
        • 常见的关系型数据库服务器(DBMS)
        • SQL概述
        • 表的概念
      • 数据库的安装与配置
        • 安装
        • 启动和连接MySQL
          • 启动MySQL服务
          • 连接MySQL
        • MySQL图形化管理软件-Navicat
        • 数据库安装失败解决方案
      • MySQL数据库操作
        • 数据库操作和存储引擎
        • MySQL常用列类型[Mysql数据类型---Java数据类型]
        • 表的操作
      • 查询操作

数据库概述

B026-MySQL基础_第1张图片

数据库概念

B026-MySQL基础_第2张图片
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,相当于通常记录中的一个数据项,也叫列/字段
B026-MySQL基础_第3张图片

数据库的安装与配置

安装

见文档

启动和连接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
B026-MySQL基础_第4张图片

数据库安装失败解决方案

控制面板 - 程序和功能 - 卸载程序 - 卸载mysql

查看Navicat连接不上代表卸载成功

卸载残留文件:
C盘 - Program Files 里搜索 mysql文件夹 删除掉
C盘 - Program Files (x86) 里搜索 mysql文件夹 删除掉
C盘 - ProgramData(这是个隐藏文件夹) 里搜索 mysql数据文件 删除掉

重启电脑

重新安装

MySQL数据库操作

数据库操作和存储引擎

见文档

MySQL常用列类型[Mysql数据类型—Java数据类型]

常用对照
B026-MySQL基础_第5张图片
其他见文档

表的操作

两种创建表的方式,查看表结构和删除表,表的约束
见文档

查询操作

见文档和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  --  第二页
--------------------------------------------------------------
   每页展示五条数据
   10,5        (1-1)*5=0
   25,5        (2-1)*5=5
   310,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

你可能感兴趣的:(笔记总结,mysql,数据库)