数据库概述
为什么使用数据库
- 持久化: 把数据保存到可掉电式存储设备中以供之后使用,大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成
- 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储到磁盘文件中,xml数据文件中
RDBMS与非RDBMS
关系型数据库RDBMS
实质
- 这种类型的数据库是最古老的数据类型,关系型数据库魔性是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
- 关系型数据库以行(row)和列(column)的形式存储数据,以便于用户理解,这一系类的行和列被称为表(table),一组表组成了一个库
- 表与表之间的数据记录有关系(rekarionship).现实世界中各种实体以及实体之间的各种联系均用关系模型来表示,关系型数据库就是建立在关系模型基础上的数据库
- SQL就是关系型数据库的查询语言
优势
-
复杂查询
可以用SQL语句方便的在一个表以及多个表之间做复杂的数据查询
-
事务支持
使得对于安全性能很高的数据访问要求得以实现
非关系型数据库(非RDBMS)
介绍
非关系型数据库,可看成是传统关系型数据库的阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高,同时,通过减少不常用的功能,进一步提高性能
目前基本大部分主流的非关系型数据库都是免费的
Mysql基本语句
Mysql语句
1. 登录语句
mysql -uroot -p密码 # -p参数后面不能有空格,其他参数可以
#参数
-P 代表指定端口号
-h 代表指定主机IP
2. 查看所有库
mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
3. 创建数据库
mysql> create database dbtest1;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| dbtest1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
基本的SELECT使用
1.SQL的分类
DDL:数据定义语言 CREATE\ALTER\DROP\RENAME\TRUNCATE
DML: 数据操作语言 INSERT\DELETE\UPDATE\SELECT
DCL: 数据控制语言 COMMIT\ROLLBACK\SAVEPOINT\GRANT\REVOKE
2. SQL语言的规则与规范
1. 基本规则
SQL可以写在一行或者多行
每条命令以;结尾
关键字不能被缩写也不能分行
关于标点符号:
必须保证所有(),单引号,双引号是成双成对的
必须使用英文的符号
3. 基本的SELECT语句
1. SELECT...FROM...
select * from emp;
* 代表查找表中所有字段
4. 列的别名
AS : 引入别名
别名需要""
SELECT LISTFILE AS "列出文件" FROM XXX;
5. 去除重复行
DISTINCT: 关键字,去重
SELECT DISTINCT(ID) FROM XXXX;
6. 空值参与运算
NULL 代表为空,不等同与 0 '' 'null'
空值参与运算结果一定为空
采用函数判断: nvl(xxx,0)或者IFNULL(xxx,0) 两种都为如果值为空,那么就用0来代替
7. 着重号
`` : 着重号,和关键字或数据库方法冲突的字段,使用着重号包裹
select * from order -- order是关键字
select * from `order`
8. 查询常数
常数就是在SELECT查询结果集中添加一列自定义的固定数列
SELECT '尚硅谷',id,name FROM em_id; --'尚硅谷'就是添加的常数
9. 显示表结构
DESCRIBE em_id;
或者 DESC em_id;
都可以显示表中字段的详细信息
10. 过滤数据
where : 后面跟查询条件
select * from employees where department_id = '90'
运算符
算术运算符
+ - * / div % mod
select 100,100-1,100-2,100-3 from DUAL;
select 100 + '1' from DUAL; -- SQL中+号没有连接作用,表示加法运算,此时会将字符串转换为数值(隐式转换),结果为101
select 100 + 'a' from DUAL; -- 此时将'a'视作为0
select 100 * 1 from dual;
select 100 / 10 from dual;
select 100 % 3 from dual;
比较运算符
= <=> != < <= > >+
-- 在使用=时,一侧为数值一侧为字符串,字符串存在隐式转换,如果转换不成功,则看作0
-- 两边都是字符串时,则不会进行隐式转换
select 1 = NULL,NULL = NULL -- 只要有null参与判断,结果就为null
select 1 <=> NULL,NULL <=> NULL -- 安全等于 为null而生,可以和null比较
is null is not null
LEAST GREATEST -- LEAST 取最小值 GREATEST 取最大值
BETWEEN...AND -- 查询条件1和条件2范围内的数据,包含边界
select * from dual where salary BETWEEN 6000 and 8000;
in \ not in
select * from dual where salart in (1,6,4)
select * from dual where salart not in (1,6,4)
like -- 模糊查询
select & from dual where name like '%bc%'
_ -- 一个下划线代表一个字符占位
select * from dual where name like '_a%'
REGEXP \ RLIKE -- 正则表达式
逻辑运算符
NOT \ ! -- 逻辑非
AND \ && -- 逻辑与
OR \ || -- 逻辑或
-- AND 优先级高于 OR
排序与分页
排序规则
使用 ORDER BY 子句排序
ASC 升序
DESC 降序
ORDER BY 子句在SELECT语句的结尾
例: SELECT id,name FROM DUAL ORDER BY id
-- ORDER BY 默认按照升序排列
-- 多列排序
select employee_id,salary,department_id from employees order by department_id desc,salary asc
分页
-- 查询返回的记录太多,实现分页
1.实现规则
LIMIT 0,20
-- 0 代表偏移量,表示从第几条开始,20 代表条目数
LIMIT公式: LIMIT (x-1) * y,y -- x代表第几页,y代表显示的条目数
例: 每页显示20条记录,显示第一页
select employee_id,last_name from employees limit 0,20
例: 每页显示20条记录,显示第二页
select employee_id,last_name from employees limit 20,20
2.Mysql 8.0 新特性
偏移量在后面,条目数在前面
例: 每页显示20条记录,显示第一页
select employee_id,last_name from employees limit 20 OFFSET 0