数据库基础-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 '10varchar:可变长度字符串类型; varchar(10) 'aaa'3text:字符串类型,比如小说信息;
	 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的主要内容,如果未能解决你的问题,请参考以下文章

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

VsCode 代码片段-提升研发效率

JSP基础

片段是否执行基础数据的复制?

动态SQL基础概念复习(Javaweb作业5)

小程序基础13:模板