一、数据库相关概念
1.1 数据库
- 存储和管理数据的仓库,数据是有组织的进行存储。
- 数据库英文名是 DataBase,简称DB。
1.2 数据库管理系统
- 管理数据库的大型软件
- 英文:DataBase Management System,简称 DBMS
1.3 常见的数据库管理系统
- Oracle:收费的大型数据库,Oracle 公司的产品
- MySQL: 开源免费的中小型数据库。后来 Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购
- SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用
- PostgreSQL:开源免费中小型的数据库
- DB2:IBM 公司的大型收费数据库产品
- SQLite:嵌入式的微型数据库。如:作为 Android 内置数据库
- MariaDB:开源免费中小型的数据库
1.4 SQL
- 英文:Structured Query Language,简称 SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其 他的数据库管理系统,也同样的使用SQL来操作。
二、MySQL
2.1 MySQL安装
1. 下载
不用理会上面的登录和注册按钮,直接点击 No thanks, just start my download. 就可以下载。
2.安装(解压)
※卸载 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,就是没有界面的应用程序。后台的一些服务。后台的服务是在任务管理器选择服务选项中就可以看到了(跟进程在同一栏中)。
1.Windows 服务方式启动
1.操作步骤:
2.手动启动的方式--2种
1.cmd--->service.msc 打开服务的窗口
2.使用管理员打开cmd
* net start mysql : 启动mysql的服务
* net stop mysql:关闭mysql服务
2.4控制台连接数据库(mysql登录和退出)
登录格式 1:u 和 p 后面没有空格
mysql -u 用户名 -p 密码
- 后输入密码方式:
- 127.0.0.1 代表本机的 IP 地址
2.5SQLyog 图形化工具——客户端
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数据库管理系统
2.8数据库管理系统、数据库和表的关系
2.9结论:
三、SQL概述
3.1 SQL简介
- 英文:Structured Query Language,简称 SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”
3.2通用语法
同样的一条sql语句写成下图的样子,一样可以运行处结果。
单行注释:-- 注释内容 或 # 注释内容(MySQL 特有)
注意:使用-- 添加单行注释时,--后面一定要加空格,而#没有要求。(也就是2个横杆+1个空格)
- 多行注释:/* 注释内容 */
3.3SQL分类---4种
- DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
- DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
- DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
- DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
四、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 分页限定
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"方言"