基本概念
什么是数据库?
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来
使得用户可以对非常方便对数据库中的数据进行增加,修改,删除及查询操作
为什么要使用数据库?
原始IO流的方式将数据读写到文件中费时费力
使用数据库的形式:
数据库管理软件
分为服务器端和客户端
数据库的分类
关系型数据库
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
主流关系型数据库:Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP
非关系型数据库
NoSQL,泛指非关系型的数据库
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销
主要代表:redis
优点
用户可以根据需要去添加自己需要的字段,为了获取用户的不同信息,不像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。
不足:
只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适。不适合持久存储海量数据
控制台登录mysql
命令 | 说明 |
---|---|
mysql -u用户名 -p密码 | 使用指定用户名和密码登录当前计算机中的MySQL数据库。mysql -uroot -p1234(本地登录) |
mysql -h主机名 -u用户名 -p密码 | 使用指定用户名和密码登录 网络上指定主机中 的MySQL数据库。例如:mysql -h127.0.0.1(ip地址) -uroot -p1234(本地登录可以省略 -hIp地址)127.0.0.1 本机的ip地址远程连接 使用root用户,密码1234登录网络上127.0.0.1主机的MySQL数据库 |
备份:mysqldump -uroot -p1234 数据库名>文件位置(无需登录)
还原:登录进去、创建一个空数据库、选中数据库、执行source 文件位置命令
SQL语句
- SQL语句可以单行或多行书写,以分号结尾
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写,而数据库名,数据表名,列名建议使用小写
- 同样可以使用/**/的方式完成多行注释(MySQL还可以使用#作为单行注释)
分类
- 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。针对的是结构上的改变(create、drop、alter)
- 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。结构上没有变化,数据变化了(insert、update、delete)
- 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。(结构和数据都没变化)select
- 数据控制语言:简称DCL(Daat Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(DBA数据库管理员)(了解)
mysql数据类型
DDL操作数据库结构
创建数据库
命令 | 说明 |
---|---|
create database 数据库名; | 在当前服务器下创建指定名称的数据库。配置数据库时我们指定了utf8,那么数据库默认字符集就是utf8 |
create database 数据库名 character set 字符集; | 在当前服务器下创建指定名称的数据库,并且指定数据库的字符集 |
查看/选中数据库
命令 | 说明 |
---|---|
use 数据库名; | 切换数据库。 |
select database(); | 查看当前正在操作使用的数据库名称。 |
show databases; | 查看MySQL服务器中有哪些数据库 |
show create database 数据库名; | 查看某个数据库的定义的信息 |
删除数据库drop database 数据库名称;
DDL操作数据表结构
创建表
create table 表名(
字段1 类型(长度),
字段2 类型(长度),
…
)
查看表
命令 | 说明 |
---|---|
show tables; | 查看当前数据库中的所有表名; |
desc 表名; | 查看某张数据表的表结构 |
删除表drop table 表名;
修改表结构格式alter table 表名 关键字
DML更新表记录
插入表记录insert into
INSERT INTO category(cid,cname) VALUES(1,‘手机’);
- 值与字段必须对应,个数相同,类型相同
- 值的数据大小必须在字段的长度范围内
- 除了数值类型,其它的字段类型的值必须使用单引号/双引号引起(varchar、date)。
- 如果要插入空值,可以忽略不写字段,或者插入 null。
- 插入表的全部字段,可以不写字段名和括号
更新表记录update
更新所有记录的指定字段
update 表名 set 字段1 = 值1,字段2 = 值2
更新符合条件记录的指定字段
update 表名 set 字段1 = 值1,字段2 = 值2 where 条件
- 列名的类型与修改的值要一致.
- 修改值得时候不能超过最大长度.
- 除了数值类型外,其它的字段类型的值必须使用引号引起
删除表记录delete from
-
语法:
- 逐条删除表中所有记录
delete from 表名;
- 逐条删除表中符合条件的记录
delete from 表名 where 条件;
truncate (摧毁表结构,然后创建一张一模一样的表)
delete 只是删除表中的数据,表结构还在
DQL查询数据
查询并展示表中所有记录
select * from 表名
简单查询
查询并展示表中符合要求的记录
select * from 表名 where 条件
- 别名查询.使用的关键字是:as
列别名、表别名
- 别名的引号可加可不加
- as 可以省略
-
去掉重复值 关键字:distinct
-
查询结果是表达式(运算查询):将所有员工的工资+1000元进行显示.
条件查询where
语句 | 说明 |
---|---|
BETWEEN …AND | …查询某一区间的值 between 50 and 100 >=50 <=100 |
IN(set) | 满足集合中任意条件 in (1,2,3,4) |
LIKE ‘张pattern | ’模糊查询 % 任意字符 ‘%张%’ _ 一个字符 ‘张_’ |
IS NULL | 判断是否为空 |
and | 多个条件同时满足 |
or | 满足任意一个条件即可 |
not | 除了 |
单表操作
排序
order by 字段 需要写在sql语句的最后
升序:asc(默认)
降序:desc
1.使用薪水排序(降序)
SELECT * FROM emp ORDER BY salary DESC
2.在薪水排序(降序)的基础上,以id排序(降序)
#即若薪水相同,相同薪水格的数据以id降序排序
SELECT * FROM emp ORDER BY salary DESC,id DESC;
聚合函数
使用聚合函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值;
另外聚合函数会忽略null空值。
- count(字段):统计指定列不为NULL的记录行数;、
- sum(字段):计算指定列的数值和
- max(字段):计算指定列的最大值
- min(字段):计算指定列的最小值
- avg(字段):计算指定列的平均值
分组
按部门分组、按小组分组、分类名称
分组查询是指使用group by字句对查询记录进行分组运算。
格式:
SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段;
统计每个部门的人数:
SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件;
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
where 和 having的区别:
1、where 是分组前对条件进行过滤,having是分组后对条件进行过滤
where age > 22 group by sex
group by sex having age > 22
2、where后不能跟聚合函数,having后可以跟上聚合函数