数据库基础-1
Posted 奔跑的路奇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库基础-1相关的知识,希望对你有一定的参考价值。
数据库基础
1 数据库介绍
1.1 数据库简介
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
1.2 常见的存储引擎
MYISAM-》不支持事务,是mysql最常用的存储引擎in
InnoDB-》支持事务,存储数据的安全性高,重量级的存储引擎
MEMORY-》不支持事务,数据容易丢失,但查询数据速度最快
InnoDB:
表的结构存储在xxx.frm文件中
数据存储在tablespace这样的表空间中,无法被压缩,无法转换为只读
这种InnoDB存储引擎在MySQL数据库崩溃之后提供自动恢复机制
支持练级删除和练级更新
1.3 数据库表设计的三大范式
什么是设计范式?-》设计表的依据。目的:减少数据冗余。
什么是三大范式,简单的描述:
- 第一范式:任何一张表必须有主键,并且每一个字段原子性不可再分
- 第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖;如果一张表有联合主键则不满足第二范式
- 第三范式:建立在第二范式之上,所有非主键字段直接依赖主键,不能产生传递依赖
1.4 什么是事务
什么是事务: 一个事务上一个完整的业务逻辑单元,不可再分
和事务相关的语句只有:DML语句(insert , delete , update)因为他们这三个语句都是和数据库表当中的 ‘数据’相关的。事务的存在是为了保证数据的完整性,安全性。
假设所有的业务都能使用1条dml语句完成-》不需要事务机制了
通常一个事务,需要多条dml语句共同联合完成
事务的特性?
事务的四大特性ACID:
A->原子性:事务是最小的工作单元,不可再分
C->一致性:事务必须保证多条dml语句同时成功或者失败
I->隔离性:事务a与事务b之间具有隔离
D->持久性:说的是数据最终必须持久化到硬盘文件中,事务才算成功的结束
关于事务之间的隔离性
事务隔离性存在隔离级别,包括4个
第一级别:读未提交(read uncommitted)-》对方事务还未提交,我们当前事务还可以读取到对方为提交的数据。
读未提交存在脏读(Dirty Read)现象,表示读到了脏的数据
第二级别:读已提交(read committed)-》对方事务提交之后,我方可以读取到数据
解决了脏读现象
读已提交存在的问题是-》不可重复读(每次读到的数据是不一样的)
第三级别:可重复度(repeatable read)-》解决了不可重复读的问题
存在的问题:读取到的数据是幻象(读到的数据一直是相同了,对方修改了也读取不到)
第四级别:序列化读/串行化读-》相当于给数据上了锁,只有对方commit之后,才可以查看到数据
解决了所有问题,但效率低,需要事务排队
2 SQL语言
2.1 sql语言分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
- TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
注意:sql语句以;结尾
mysql中的关键字不区分大小写
2.2 DDL操作数据库
2.2.1 创建数据库
# 链接mysql数据库后,进入mysql后可以操作数据
# 1. 创建库
create database if not exists test default charset=utf8;
# 1. 数据库 test 如果不存在则创建数据库,存在则不创建
# 2. 创建 test 数据库,并设置字符集为utf8
# 3. 无特殊情况都要求字符集为utf8或者utf8mb4的字符编码
2.2.2 查看数据库
查看当前数据库服务器中的所有数据库
show databases;
2.2.3 打开库/进入库/选择库
# use 库名
use test
2.2.4 删除数据库
# drop database 数据库名
# 删除库,那么库中的所有数据都将在磁盘中删除。
drop database 库名
2.2.5 查看当前使用的数据库
Select database();
2.3 DDL操作表
CREATE TABLE语句用于创建新表。
语法:
CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
说明:表名,列名是自定义,多列之间使用逗号间隔,最后一列的逗号不能写。
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;默认支持四舍五入
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
2.3.1 其他表操作
删除表:drop table 表名;
当前数据库中的所有表: show tables;
查看表的字段信息:desc 表名;
添加列名:alter table 表名 add 新列名 新的数据类型
修改列名: alter table 表名 change 旧列名 新列名 新的数据类型
删除列名:alter table 表名 drop 列名
修改表名: alter table 旧表名 rename 新表名;
查看创建表的细节:show create table 表名;
2.4 DML操作
DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
主要包括:INSERT 、UPDATE、 DELETE
2.5 DCL
1、创建用户:
create user 用户名@指定ip identified by 密码;
create user test123@localhost IDENTIFIED by 'test123'
create user 用户名@客户端ip identified by 密码; 指定IP才能登陆
create user test456@10.4.10.18 IDENTIFIED by 'test456'
create user 用户名@‘% ’ identified by 密码 任意IP均可登陆
create user test7@'%' IDENTIFIED by 'test7'
2、用户授权:
grant 权限1,权限2,…,权限n on
数据库名.* to 用户名@IP; 给指定用户授予指定指定数据库指定权限
grant select,insert,update,delete,create on chaoshi.* to 'test456'@'127.0.0.1';
grant all on . to 用户名@IP 给指定用户授予所有数据库所有权限
grant all on *.* to 'test456'@'127.0.0.1'
3、用户权限查询:
show grants for 用户名@IP;
show grants for 'root'@'%';
4、撤销用户权限:
revoke 权限1,权限2,…,权限n on 数据库名.* from 用户名@IP;
REVOKE SELECT ON *.* FROM 'root'@'%' ;
5、删除用户:
drop user 用户名@IP;
drop user test123@localhost;
3 DQL数据查询
查询关键字:SELECT
语法: SELECT 列名 FROM 表名 【WHERE --> BROUP BY–>HAVING–> ORDER BY】
总结顺序如下:
SELECT 要查询的列名称
FROM 表名称
WHERE 限定条件 /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/
3.1 分组函数
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
#记住:所有的分组函数都是对“某一组”数据进行操作的。
sql如下演示:
找出工资总和?
select sum(sal) from emp;
找出最高工资?
select max(sal) from emp;
找出最低工资?
select min(sal) from emp;
找出平均工资?
select avg(sal) from emp;
找出总人数?
select count(*) from emp;
select count(ename) from emp;
最后,如果有问题,希望指正,一起进步。
以上是关于数据库基础-1的主要内容,如果未能解决你的问题,请参考以下文章