Bootstrap

mysql学习(一)

一、数据库相关概念

1.1 数据库

以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存 储也有它的弊端。
假设在文件中存储以下的数据:
姓名 年龄 性别 住址
张三 23 男 北京西三旗
李四 24 女 北京西二旗
王五 25 男 西安软件新城
现要修改李四这条数据的性别数据改为男,我们现学习的 IO 技术可以通过将所有的数据读取到内存中,然后进行修改再存到 该文件中。通过这种方式操作存在很大问题,现在只有三条数据,如果文件中存储1T 的数据,那么就会发现内存根本就存储 不了。
现需要既能持久化存储数据,也要能避免上述问题的技术使用在我们的系统中。数据库就是这样的一门技术。
  • 存储和管理数据的仓库,数据是有组织的进行存储。
  • 数据库英文名是 DataBase,简称DB
数据库就是将数据存储在硬盘上,可以达到持久化存储的效果。那又是如何解决上述问题的?使用数据库管理系统。

1.2 数据库管理系统

  • 管理数据库的大型软件
  • 英文:DataBase Management System,简称 DBMS
在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数 据进行数据的增删改查相关的操作。我们平时说的MySQL 数据库其实是 MySQL 数据库管理系统。

通过上面的描述,大家应该已经知道了 数据库管理系统 数据库 的关系。那么有有哪些常见的数据库管理系统呢?

1.3 常见的数据库管理系统

接下来对上面列举的数据库管理系统进行简单的介绍:
  • Oracle:收费的大型数据库,Oracle 公司的产品
  • MySQL: 开源免费的中小型数据库。后来 Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购
  • SQL ServerMicroSoft 公司收费的中型的数据库。C#.net 等语言常使用
  • PostgreSQL:开源免费中小型的数据库
  • DB2IBM 公司的大型收费数据库产品
  • SQLite:嵌入式的微型数据库。如:作为 Android 内置数据库
  • MariaDB:开源免费中小型的数据库
我们学习的是 MySQL 数据库管理系统, PostgreSQL 在一些公司也有使用,此时大家肯定会想以后在公司中如果使用 我们没有学习过程的PostgreSQL 数据库管理系统怎么办?这点大家大可不必担心,如下图所示:

我们可以通过数据库管理系统操作数据库,对数据库中的数据进行增删改查操作,而怎么样让用户跟数据库管理系统打交道 呢?就可以通过一门编程语言(SQL )来实现。

1.4 SQL

  • 英文:Structured Query Language,简称 SQL,结构化查询语言
  • 操作关系型数据库的编程语言
  • 定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其 他的数据库管理系统,也同样的使用SQL来操作。

二、MySQL

2.1 MySQL安装

1. 下载

https://downloads.mysql.com/archives/community/
点开上面的链接就能看到如下界面:

选择选择和自己 系统位数 相对应的版本点击右边的 Download ,此时会进到另一个页面,同样在接近页面底部的地方找到如 下图所示的位置:

 不用理会上面的登录和注册按钮,直接点击 No thanks, just start my download. 就可以下载。

2.安装(解压)

安装过程分成两个部分:
1) 文件解压和复制过程,默认的安装目录:

2) 安装好以后必须对 MySQL 服务器进行配置
mysql 中管理员的名字: root

下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到 MySQL 5.7.24 的软件本体了 ( 就是一个文件夹 ),我们可以 把它放在你想安装的位置。---我用的是“mysql-5.5.27-win32.msi”。
1. 打开下载的 mysql 安装文件双击解压缩,运行“mysql-5.5.27-win32 .msi”。

2. 选择安装类型,有“Typical (默认) “Complete (完全) “Custom (用户自定义) 三个选项,选择 “Custom” , 按“next” 键继续。

3. 点选 “Browse” ,手动指定安装目录。

4. 填上安装目录,我的是 “d:\Program Files (x86)\MySQL\MySQL Server 5.0” ,按 “OK” 继续。

5. 确认一下先前的设置,如果有误,按 “Back” 返回重做。按 “Install” 开始安装。

 

6. 正在安装中,请稍候,直到出现下面的界面 , 则完成 MYSQL 的安装

 

数据库安装好了还需要对数据库进行配置才能使用 MYSQL 的配置
7. 安装完成了,出现如下界面将进入 mysql 配置向导。

 

8. 选择配置方式, “Detailed Configuration (手动精确配置) “Standard Configuration (标准配置) ,我 们选择“Detailed Configuration” ,方便熟悉配置过程。

9. 选择服务器类型, “Developer Machine (开发测试类, mysql 占用很少资源) “Server Machine (服务 器类型,mysql 占用较多资源) “Dedicated MySQL Server Machine (专门的数据库服务器, mysql 占 用所有可用资源)”

10. 选择 mysql 数据库的大致用途, “Multifunctional Database (通用多功能型,好) “Transactional Database Only(服务器类型,专注于事务处理,一般) “Non-Transactional Database Only (非事务 处理型,较简单,主要做一些监控、记数用,对 MyISAM 数据类型的支持仅限于 non-transactional ),按 “Next” 继续。

 

11. 选择网站并发连接数,同时连接的数目, “Decision Support(DSS)/OLAP 20 个左右)
、“Online Transaction Processing(OLTP)( 500 个左右) “Manual Setting (手动设置,自己输一个数)

12. 是否启用 TCP/IP 连接,设定端口,如果不启用,就只能在自己的机器上访问 mysql 数据库了,在这个页 面上,您还可以选择“ 启用标准模式 Enable Strict Mode ),这样 MySQL 就不会允许细小的语法错误。
如果是新手,建议您取消标准模式以减少麻烦。但熟悉 MySQL 以后,尽量使用标准模式,因为它可以降 低有害数据进入数据库的可能性。按“Next” 继续
13. 就是对 mysql 默认数据库语言编码进行设置(重要),一般选 UTF-8 ,按 “Next” 继续。

14. 选择是否将 mysql 安装为 windows 服务,还可以指定 Service Name (服务标识名称),是否将 mysql bin 目录加入到 Windows PATH (加入后,就可以直接使用 bin 下的文件,而不用指出目录名,比如连接, “mysql.exe -uusername -ppassword;”就可以了,不用指出 mysql.exe 的完整地址,很方便),我这里全部 打上了勾,Service Name 不变。按 “Next” 继续。

15. 询问是否要修改默认 root 用户(超级管理)的密码。 “Enable root access from remote machines (是否允 许 root 用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它) 。最后 “Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括询)
一般就不用勾了,设置完毕,按 “Next” 继续。
16. 确认设置无误,按 “Execute” 使设置生效,即完成 MYSQL 的安装和配置。

注意:设置完毕,按 “Finish” 后有一个比较常见的错误,就是不能 “Start service” ,一般出现在以前有安装 mysql 的服务器上,解决的办法,先保证以前安装的 mysql 服务器彻底卸载掉了;不行的话,检查是否按上面一步所说, 之前的密码是否有修改,照上面的操作;如果依然不行,将 mysql 安装目录下的 data 文件夹备份,然后删除,在 安装完成后,将安装生成的 data 文件夹删除,备份的 data 文件夹移回来,再重启 mysql 服务就可以了,这种情况 下,可能需要将数据库检查一下,然后修复一次,防止数据出错。

 卸载 MySQL,重装 MySQL

2.2 MySQL卸载

1.停止 window MySQL 服务。 找到控制面板”-> “管理工具”-> “服务,停止 MySQL 后台服务。

2.卸载 MySQL 安装程序。找到控制面板”-> "程序和功能",卸载 MySQL 程序。

3.删除 MySQL 安装目录下的所有文件。

去mysql的安装目录找到my.ini文件
			* 复制 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

4.删除 c ProgramDate 目录中关于 MySQL 的目录。路径为:C:\ProgramData\MySQL(是隐藏文件,需要显示 出来)

 

2.3 数据库服务的启动与登录--2种方式

mysql安装好的是mysql服务,安装好的mysql服务是在windows服务列表中注册的mysql服务,服务简称service,就是没有界面的应用程序。后台的一些服务。后台的服务是在任务管理器选择服务选项中就可以看到了(跟进程在同一栏中)。

MySQL 服务器启动方式有两种:
1) 通过服务的方式自动启动
2) 手动启动的方式

1.Windows 服务方式启动

1.操作步骤:

2.手动启动的方式--2种

1.cmd--->service.msc 打开服务的窗口

2.使用管理员打开cmd

* net start mysql : 启动mysql的服务

* net stop mysql:关闭mysql服务

2.4控制台连接数据库(mysql登录和退出)

MySQL 是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置 的密码即可登录

登录格式 1:u 和 p 后面没有空格

mysql -u 用户名 -p 密码

  • 后输入密码方式:

登录格式 2:
mysql -hip 地址 -u 用户名 -p 密码
  • 127.0.0.1 代表本机的 IP 地址

登录格式 3:
mysql --host=ip 地址 --user= 用户名 --password= 密码

退出 MySQL:
quit exit

2.5SQLyog 图形化工具——客户端

SQLyog 是业界著名的 Webyog 公司出品的一款简洁高效、功能强大的图形化 MySQL 数据库管理工具。使用 SQLyog 可以快速直观地让您从世界的任何角落通过网络来维护远端的 MySQL 数据库

 SQLyog是傻瓜式安装,一路下一步即可。

注意:电脑多少位的,就安装多少位的

先要进行安装,然后再进行激活。

使用数据库:

方法一:使用数据库,可以使用use 数据库名称 命令(use db1),然后再去执行。我们看到这里变成了db1了。

方法二: 我们也可以点一下数据库即可,效果是一样的。

看表的结构也是2种方式:命令行和图像化操作

2.6MySQL 目录结构

1. MySQL安装目录:

MySQL安装目录:basedir="D:/develop/MySQL/"
				* 配置文件 my.in

2. MySQL数据目录

 MySQL数据目录:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
				* 几个概念
					* 数据库:文件夹
					* 表:文件
                                        * 数据:文件里的数据
如果数据目录看不到的话,就是被隐藏了,需要吧隐藏目录打开它。					

我们的计算机安装了mysql数据库服务器软件,被称为mysql服务器。这个服务器是硬件+软件,mysql服务器指的是mysql服务器软件所在的那台计算机。

2.7数据库管理系统

数据库管理系统( DataBase Management System DBMS ):指一种操作和管理数据库的大型软件,用于建 立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理 系统访问数据库中 表内的数据

2.8数据库管理系统、数据库和表的关系

数据库管理程序 (DBMS) 可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用 中实体的数据,一般会在数据库创建多个表,以保存程序中实体 User 的数据。
数据库管理系统、数据库和表的关系如图所示:

2.9结论:

1) 一个数据库服务器包含多个库
2) 一个数据库包含多张表
3) 一张表包含多条记录

三、SQL概述

3.1 SQL简介

  • 英文:Structured Query Language,简称 SQL
  • 结构化查询语言,一门操作关系型数据库的编程语言
  • 定义操作所有关系型数据库的统一标准
  • 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为方言

3.2通用语法

1). SQL 语句可以单行或多行书写,以分号结尾。

如上,以分号结尾才是一个完整的 sql 语句。
2). MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

 同样的一条sql语句写成下图的样子,一样可以运行处结果。

3). 注释:(注释有3种,单行注释2种,多行注释1种)

单行注释:-- 注释内容 # 注释内容(MySQL 特有)

 意:使用-- 添加单行注释时,--后面一定要加空格,而#没有要求。(也就是2个横杆+1个空格)

  • 多行注释:/* 注释内容 */

4). SQL 语句可以使用空格 / 缩进来增强语句的可读性。---写sql语句的时候要有空格

3.3SQL分类---4种

  • DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
DDL 简单理解就是用来操作数据库,表等

  • DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
DML 简单理解就对表中数据进行增删改

  • DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
        DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
  • DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
        DML简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。
注意: 以后我们最常操作的是 DML DQL ,因为我们开发中最常操作的就是数据。

四、DDL:操作数据库

4.1 查询数据库

  • 查询所有数据库的名称:
     show databases;
    
  • 查询某个数据库的字符集:查询某个数据库的创建语句

show create database 数据库名称;

 

4.2 创建数据库--3种方式

1. C(Create):创建
  • 创建数据库

 create database 数据库名称;

  • 创建数据库,判断不存在,再创建:(创建数据库可以先进行判断的操作)
create database if not exists 数据库名称(创建数据库可以先进行判断的操作));

  • 数据库名称; 创建数据库,并指定字符集

create database 数据库名称 character set 字符集名;

  • 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk

create database if not exists db4 character set gbk

4.3修改数据库

修改数据库的字符集
	 alter database 数据库名称 character set 字符集名称;

4.4删除数据库

  •  删除数据库
    drop database 数据库名称;
    

  • 判断数据库存在,存在再删除

drop database if exists 数据库名称;

4.5 使用数据库

使用数据库就是你现在是在数据库之外,没有进到数据库里面去。

  • 查询当前正在使用的数据库名称

  select database();

  • 使用数据库

use 数据库名称

 

五、DDL:操作表

5.1 查询表

  • 查询某个数据库中所有的表名称
    show tables;

  • 查询表结构
desc 表名;

5.2 创建表

1. C(Create):创建
	1. 语法:
	create table 表名(
		列名1 数据类型1,
		列名2 数据类型2,
		....
		列名n 数据类型n
		);
注意:最后一列,不需要加逗号(,)
创建学生表
        create table student(
			id int,
			name varchar(32),
			age int ,
			score double(4,1),
			birthday date,
			insert_time timestamp
			);

复制表:
create table 表名 like 被复制的表名;	

5.3 数据类型

1.常使用的数据类型如下:

1. int:整数类型
 age int,
2. double:小数类型
 score double(5,2) --小数一共有5位,小数点后面保留2位
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	
如果是时间戳类型,将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

6. varchar:字符串
name varchar(20):姓名最大20个字符
zhangsan 8个字符  张三 2个字符

2.详细的数据类型如下

5.4 删除表--2种写法

drop table 表名;
drop table  if exists 表名 ;--删除表的时候先判断一下再去删除,如果存在的话表名应该写在后面去

5.5 修改表

修改表主要是修改表的名称,列的名称或者列的类型等等。

1. 修改表名

alter table 表名 rename to 新的表名;

2. 修改表的字符集--先去查看原来的字符集,然后再去修改它

alter table 表名 character set 字符集名称;




3. 添加一列

alter table 表名 add 列名 数据类型;

4. 修改列名称或者 类型

alter table 表名 change 列名 新列别 新数据类型;

alter table 表名 modify 列名 新数据类型;



5. 删除列

alter table 表名 drop 列名;

 

六、navicat使用

傻瓜式安装,一路下一步即可。

 

先要进行安装,然后再进行激活。

安装:

双击`navicat111_mysql_cs_x86.exe` ,然后一路下一步。安装成功


 

 

 

 

激活(破解它):

双击`PatchNavicat.exe`,选择安装目录中的navicat.exe 。完成激活。

navicat默认安装路径: `C:\Program Files (x86)\PremiumSoft\Navicat for MySQL`
看到Successfully,证明激活成功


 

使用:

连接数据库:

 

选中表右键选择设计表就可以修改表了。

 

你要写sql语句,选择查询工具栏,然后选择新建查询,然后就可以写sql了。

七、DML:操作数据(增删改)

7.1 添加数据

语法:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
1. 列名和值要一一对应。
2. 如果表名后,不定义列名,则默认给所有列添加值
	insert into 表名 values(值1,值2,...值n);
3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

7.2 修改数据

语法:

update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

注意:
1. 如果不加任何条件,则会将表中所有记录全部修改。

7.3 删除数据

语法:

delete from 表名 [where 条件]
注意:
1. 如果不加条件,则删除表中所有记录。
2. 如果要删除所有记录
	1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作,效率低。(就是一次的一次删除)
	2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。(不管你的表中有多少条记录,truncate只会执行2条sql,删除/drop表,然后创建/create表)

八、DQL:操作数据(查询)

select * from 表名;

语法:

                select
			字段列表
		from
			表名列表
		where
			条件列表
		group by
			分组字段
		having
			分组之后的条件
		order by
			排序
		limit
			分页限定
准备数据
创建一个学生表,包含如下列:
CREATE TABLE student (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int, -- 数学
english int -- 英语
);
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,' 马云 ',55,' ','
杭州 ',66,78),(2,' 马化腾 ',45,' ',' 深圳 ',98,87),(3,' 马景涛 ',55,' ',' 香港 ',56,77),(4,' 柳岩
',20,' ',' 湖南 ',76,65),(5,' 柳青 ',20,' ',' 湖南 ',86,NULL),(6,' 刘德华 ',57,' ',' 香港
',99,99),(7,' 马德 ',22,' ',' 香港 ',99,99),(8,' 德玛西亚 ',18,' ',' 南京 ',56,65);

8.1 基础查询

1. 多个字段的查询         

select 字段名1,字段名2... from 表名;

注意: 如果查询所有字段,则可以使用*来替代字段列表。
2. 去除重复:

distinct


3. 计算列 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

ifnull(表达式1,表达式2):null参与的运算,计算结果都为null

表达式1:哪个字段需要判断是否为null

表达式2:如果该字段为null后的替换值。

如果遇到null,就让他的值为0即可,0加上任何数都是任何数。sql中有个函数ifnull()来解决。

英语成绩为null的话,就用0去替换它,如果不是null的话,就还是原来的值.

  4. 起别名:         as:

as也可以省略

8.2 条件查询(单个条件和多个条件)

1. where子句后跟条件
2. 运算符
         > 、< 、<= 、>= 、= 、<>
	 BETWEEN...AND  
	 IN( 集合) 
	 LIKE:模糊查询
		占位符:
			_:单个任意字符
			%:多个任意字符
	IS NULL  
        and  或 &&
	or  或 || 
	not  或 !
			
运算符				

注意:

1.Java中的等于号是2个==,sql中的等号用1个=即可。

2.不等于号有2种写法,<>或者!=

3.为空是is null(不是=null),不为空是is not null 

 逻辑运算符

in关键字

范围查询

模糊查询

案例 :

 

8.3 排序查询

排序查询

语法:order by 子句

         order by 排序字段1 排序方式1 , 排序字段2 排序方式2...

排序方式:

ASC:升序,默认的。

DESC:降序。

注意:

如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

8.4 聚合函数

聚合函数:将一列数据作为一个整体,进行纵向的计算。比如:我要算数学这一列的平均分。
聚合函数得到的值是单行单列的一个值。
		1. count:计算个数
			1. 一般选择非空的列:主键
			2. count(*)
		2. max:计算最大值
		3. min:计算最小值
		4. sum:计算和
		5. avg:计算平均值
		

		注意:聚合函数的计算,排除null值。
			解决方案(2种):
				1. 选择不包含非空的列进行计算
				2. IFNULL函数

8.5 分组查询

班里有5组,每一排就是一组,每一组的平均分比一下,哪个组同学平均分更高一些。这一组的同学当成一个整体来看,分组查询急就是用来统计具有相同特性的某一类数据,把这些数据当成整体来看。

我们看这张表,我们吧男同学当成一个整体,女同学当成另外一个整体,我们这是分为了2组,我们看每一组的平均分是多少。

1. 语法:group by 分组字段;
2. 注意:
	1. 分组之后查询的字段:分组字段、聚合函数
	2. where 和 having 的区别?
	        1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
		2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

where是分组前筛选个体,having是分组后筛选组。
分组前每条数据是一个个体,分组后每条数据就是一个组了。

		-- 按照性别分组。分别查询男、女同学的平均分

		SELECT sex , AVG(math) FROM student GROUP BY sex;
			
		-- 按照性别分组。分别查询男、女同学的平均分,人数
			
		SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
			
		--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
			
		--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
			
		SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

 8.6 分页查询

1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
			-- 每页显示3条记录 

			SELECT * FROM student LIMIT 0,3; -- 第1页
			
			SELECT * FROM student LIMIT 3,3; -- 第2页
			
			SELECT * FROM student LIMIT 6,3; -- 第3页

		3. limit 是一个MySQL"方言"

;