学到mysql的时候非常的快,感觉前面的没有很巩固,还是要复习前面的博客
常见的数据库
MySQL , Oracle , SQL Server , SQLite , DB2 , …
- SQL Server 微软的 中小型关系型数据库
- MySQL 中小型的关系型数据库
- Oracle 大型的关系型数据库
- 数据库管理系统(DataBase Management System)
关系型数据库:具有行和列这种二维表结构的数据库
非关系型数据库: NOSQL 用键值关系来存储数据 类似 json
- 数据库的安装
- 数据库的卸载
1.可以使用第三方的卸载软件来卸载
2.在控制面板里面常规卸载
2.1.停止后台服务 电脑–右键–管理—服务—mysql–右键停止掉
2.2.卸载
2.3.清除残留文件 C:\ProgramData\MySQL 把这个MySQL文件夹删除
数据库的概念
- 数据库(DataBase,简称DB)
- 概念:放在计算机内有组织,可共享大量数据的仓库
- 作用:保存,并且能安全管理数据(增删改查),减少数据的冗余
MySQL介绍
- 概念:是现在流行的开源的的,免费的,关系型数据库
- 历史:由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
- 特点:
免费,开源数据库
小巧,功能齐全
使用便捷
可运行Windows或Linux操作系统
适用于中小型公司或者是大型网站
安装
链接数据库
首先在dos命令下打开,net start myslq,然后登陆 mysql -u -p
几个基本的数据库操作命令
update user set password =password (‘123456’)where user =‘root’;
flash privilegs ;刷新数据库
show databases;显示所有的数据库
use dbname;打开某个数据库
show tables;显示mysql数据库中的所有的表
describe user;显示表mysql数据库中user表的列的信息
create databases name;创建数据库
use databasesname;选择数据库
exit ;退出mysql
?命令关键词:寻求帮助
#表示注释
/**/表示多行注释
结构化分类
DDL(data definition language):数据定义语言,用来定义数据库对象:库,表,列等;
DML(data manipulation language ):数据库操作语言,用来定义数据库记录(增,删,改);
DCL(data control language):数据控制语言,用来定义访问权限和安全级别;
DQL(data query language):数据查询语言,用来查询记录(数据),
DDL:创建 表对象修改列名
创建数据库:create database ; 数据库名字
查询所有的数据库:show databases;
删除:drop database 数据库名字
修改数据库编码:alter database 数据库名字 character set=‘gbk’;
查看建库语句:show create database 数据库名字
建表 删除表 对表头进行操作
切换库: use mydb;
查看库下面所有的表 show tables;
查看表结构 desc 表名;例如: desc student;
- 常见的数据类型
- 字符串类型
- 日期和时间型数值类型
- 数据表类型
MySQL数据表的常见类型:MyISAM,InnoDB,HEAP,BOB,CSV等…
常见的MyISAM与InnoDB类型
创建表
create table 表名(列名 数据类型,列名2 数据类型2(长度),…);
案例
# 目标 : 创建一个school数据库
# 创建学生表(列,字段)
# 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
# 创建表之前 , 一定要先选择数据库
CREATE TABLE IF NOT EXISTS `student` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`address` varchar(100) DEFAULT NULL COMMENT '地址',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
#查看数据库的定义
show create databases sholl;
#查看数据表的定义
show create table sstudent;
#显示表结构
dese student;
#设置严格检查模式(不能容错了)
set sql_mode='STRICT_TRANS_TABLES';
列名的命名规范和Java一样,不要拿SQL中的关键字来命名
- 修改表名
alter table 旧表名 rename to 新表名;
alter table student rename to stu; - 删除表
drop table 表名;
表中表头的操作
- 添加列
alter table 表名 add(phone varchar(20)); - 删除列
alter table 表名 drop(phone); - 修改列名
alter tablie 表名 change 旧列名 新列名(类型); - 修改列的数据类型
alter table 表名 cahnge 旧列名 新列名(类型);
alter table 表名 modify 列名(新的类型); - 查看建表语句
show create tables 表名;
DML修改表的结构,给表进行增删改查
- 插入数据:
insert into 表名 (把表头插进去,插入全部的话表头可以省略)value(‘值是字符串类型的话就用单引号引起来’,double类型的要一致,timestamp’可以指定格式’/null(默认)); - 删除表中的所有行:
delete from 表名;
truncate table 表名; - 条件删除
delete from 表名 表名 where name=’'zhangsan;
delete from student where name=‘zhangsan’ and birthday=‘2019-08-21 15:44:12’
delete from student where name=‘zhangsan’ or name=‘wangwu2’ or name=‘wangwu3’; - 修改表中的数据:
(全部改成一样的)
update 表名 set 字段名=‘新值’,set 字段名=‘新值’ …
(有针对性的改)
update 表名 set 字段名=‘新值’ , 字段名=‘新值’ … where 字段名=‘旧值’ and 字段名=‘旧值’;
DQL 查询表中的数据
无条件查询
- 查询表中的所有的数据
selete * from 表名; - 查询个别字段
selete name,age(字段名) from 表名;
条件查询 where
=、!=、<>(不等于)、<、<=、>、>=;
BETWEEN…AND; 在什么范围之间
IN(set);
IS NULL;为空
IS NOT NULL 不为空
AND; 并且
OR; 或者
NOT;非
模糊查询
- 通配符: _ 匹配单个任意字符
比如: 我要查询姓名是3个任意字符组成的
select * from student sname like=’___’;(三个下划线)
例如:我要查询第二个字符是m的
select * from student where sanme like ‘_m%’; - **%**匹配多个任意字符
例如:我要查询名字中包含m的 select * from student where sname like ‘%m%’;
例如我要查询名字是a开头的 select * from student where sname like ‘a%’;
例如我要查询名字是b结尾的 select * from student wher like ‘%b’;
字段控制
- 修改字段名称:AS(可以山省略)
例如: select sname as 别名, sage 别名 from student;
给运算字段起别名:
例如: select sname as 姓名, (工资+奖金) as 总收入 from student;
给表起别名:给每一张表起一个别名。简化书写
例如: select stu.sname, stu.sage from student as stu; - 字段运算:
null参与的运算,结果都为null
比如 工资 是100 奖金是null 我们让这两个字段运算 那结果就为null
一般会将null替换为0: ifnull(字段名称,如果是null的替换值) ifnull 是mysql的方言
所有如果奖金字段为null 一般我们把奖金替换为0
例如: select sname,(工资+ifnull(奖金,0)) as 总收入from student; - 去除重复记录 比如我查询工资是3000的 出现了多条工资为3000 的记录 那我只想展示一条3000的记录 所以可以用 distinct 去除重复记录
* DISTINCT
例如: select distinct 工资 from student;
排序order by 默认升序 (sac) desc(降序)
按工资从大到小进行排序
selete * from student order by 工资 asc;
按照工资从小到大进行排序
selete * from student order by 工资 desc;
如果出现多条重复的工资,可以指定第二条排序
selete * from student order by 工资 desc ,奖金desc;
聚合函数
概念:我们可以做纵向运算的函数
- COUNT():统计个数的.统计不为null的记录的行数
select count (sid) from student; 或者select count (*) from student; - MAX():指定某列的最大值,如果是字符串的话就按照字符串的排运算
查询工资最大
selete max(工资) as 最高工资 from student; - MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
例如 查询 最少工资 select min(工资) as 最小工资 from student; - SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
例如 计算总工资 select sum(工资) as 总支出 from student; - SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
例如 计算总工资 select sum(工资) as 总支出 from student; - AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:计算平均 工资 select avg(工资) as 平均工资 from student;
分组查询group by 一般配合聚合函数的使用才有意义
- 查询的字段:
1.分组字段本身
2.聚合函数
- 比如:按照部门的编号分组,有三个部门,要查询各个部门的平均工资
selete 部门编号 avg(工资) from student group by 部门编号;
- where和having
where :在分组之前对条件进行限定,没有满足条件的就不能进行分组
having:在分组之后岁结果集进行删选,没有选上的就不用
2.我要查询各个部门的平均工资2000的部门
selete 部门编号 avg(工资) from student group by 部门编号 having avg(工资) >2000;
3.查询各个部门员工平均工资,大于1500的部门,大于2000的部门
selete 部门,avg(工资) from student group by 部门编号 where avg(工资)>1500 having avg(工资)>2000;
分页查询:limit
limit 0,5,10…
开始记录索引,每个索引显示的条数 (索引都是从0开始)
开始记录索引=(页码-1)*每一页显示的条数
例如:显示第一页,每页显示5条记录:
selete * from student limit 0,5;这是第一页的5条记录
selete * from student limit 1,5,这是第二页的5条记录
selete * from student limit 2,5这是第三页的5条记录
- oracle:rownum 分页方言
- sqlserver:top 分页方言