Mysql基础(七):数据库总结
目录
MySQL数据库06 /数据库总结
1. 数据库/DBMS
MySQL -RDBMS 关系型
2. 数据库分类
关系型:mysql、oracle、sqlserver、access
非关系型:redis、mongodb...
3. 修改密码
mysql>set password for root@'127.0.0.1'=password('新密码')
mysqladmin -u root -p老密码 password 新密码;(不用进入mysql里边)
mysql>update user set password=password('新密码') where user='root';
4. 库操作
创建库:
create datadase 库名 charset='utf8';
连接库:
use 库名
查询库:
show databases;
show create database 库名 (查看库的详细创建语句);
删库:
drop database 库名;
5. 表操作
创建:
create table 表名(
字段1名 类型(宽度) 约束条件,
字段2名 类型(宽度) 约束条件
);
删除:
drop table 表名;
查看表:
show create table 表名;
show create table 表名\G(写了\G后面就不用加;)
show table;
select * from userinfo\G -- 表信息竖向展示
清空表:
truncate 表名; 清空表,自增重置
delete from 表名; 清空表
6. 存储引擎
InnoDB和MyISAM(三点:事务,行级锁/表级锁,外键)
MyISAM引擎特点:
1.不支持事务
事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。
2.表级锁定
数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
3.读写互相阻塞
不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。
4.只会缓存索引
MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。
5.读取速度较快
占用资源相对较少
6.不支持外键约束,但只是全文索引
7.MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。
InnoDB引擎
介绍:InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正称为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostGreSQL),以及参数完整性(即对外键的支持)。Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。
InnoDB引擎特点:
1.支持事务:支持4个事务隔离界别,支持多版本读。
2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3.读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。
4.具体非常高效的缓存特性:能缓存索引,也能缓存数据。
5.整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)
6.所有SecondaryIndex都会保存主键信息。(了解)
7.支持分区,表空间,类似oracle数据库。
8.支持外键约束,不支持全文索引(5.5之前),以后的都支持了。
9.和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。
7. 事务
事务介绍:
简单地说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败。
例如:你给我转账5块钱,流程如下
a.从你银行卡取出5块钱,剩余计算money-5
b.把上面5块钱打入我的账户上,我收到5块,剩余计算money+5.
上述转账的过程,对应的sql语句为:
update 你_account set money=money-5 where name='你';
update 我_account set money=money+5 where name='我';
上述的两条SQL操作,在事务中的操作就是要么都执行,要么都不执行,不然钱就对不上了。
这就是事务的原子性(Atomicity)。
事务的四大特性:
1.原子性(Atomicity)
事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
2.一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致。
3.隔离性(Isolation)
当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。也就是其他人的操作在这个事务的执行过程中是看不到这个事务的执行结果的,也就是他们拿到的是这个事务执行之前的内容,等这个事务执行完才能拿到新的数据。
4.持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允撤销,只能通过'补偿性事务'。
事务的开启:
数据库默认事务是自动提交的,也就是发一条sql他就执行一条。如果想多条sql放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql会自动回滚事务。或者我们使用rollback命令手动回滚事务。
8. 约束
not null unique default primary key foreign key auto_increment
foreign key
被关联的被关联的字段首先一定要是唯一
关联表字段数据不能超过被关联字段的数据范围
被关联表不能随意的删除和修改关联数据
9. 数据类型
数值类型 int float
整型
浮点型
字符串类型
char(10)和varchar(10)
0-255 255字符
日期和时间
data time datatime
枚举和集合
enum set
10. 单表语句
插入:insert into 表名 values(xx,x,xx),(xx,xx,x);
删除:delete from 表名 where id = 1;
改:update 表名 set 字段名='新值' where id = 1;
查:select distinct 字段1,字段2...from 库名.表名
where 筛选条件
group by 分组依据字段
having 过滤条件 分组后过滤 可以使用聚合函数
order by 排序
limit 限制显示条数
11. 多表查询
连表
inner join, left join,right join,union
select employee.name from employee inner join department on employee.dep_id = department.id where department.name='技术';
子查询:某个查询语句作为另外一个语句的查询条件
select name from employee where dep_id= (select id from department where name='技术');
12. 索引
b+树:提高查询效率
聚集索引
组织存储表所有数据的依据
id primary key
叶子节点存的是真实数据,存的是整行记录
辅助索引(普通索引)
普通索引建立树形结构,提高查询效率,但是叶子节点存的是该列的数据和对应行的主键值
index name_index(name)
unique name_index(name)
select name from 表名 where name = 'xx';
叶子节点找到了对应数据,称为覆盖索引
找不到列数据,需要回表操作(拿着主键重新走一遍主键的树形结构找到对应行的那一列的数据)
索引分类
主键索引 唯一索引 普通索引
联合主键索引 联合唯一索引 联合普通索引
联合索引的最走匹配特性
多条件查询时
where name = 'xx' and age='xx' and sex ='xx'
index name_index(name,age,sex)
where age='xx' and sex='xx'
Mysql基础(七):数据库总结的更多相关文章
- mysql基础篇 - 数据库及表的修改和删除
基础篇 - 数据库及表的修改和删除 修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先 ...
- mysql基础:数据库的创建,增删改查
=============查看数据库========================== 使用SHOW语句找出服务器上当前存在什么数据库: mysql> SHOW DATABASES; +--- ...
- MySQL基础 - 1 数据库基础
一.数据库基础 1.什么是数据库 1.数据库(database)是保存有组织的数据的容器( 通常是一个文件或一组文件 ) 2.数据库是一个以某种有组织的方式存储的数据集合 注意:数据库软件应该称为DB ...
- mysql基础之数据库备份和恢复实操
一.基于二进制文件的恢复*** 1.算好要恢复数据的时间段,重定向输入到bin.sql文件中 [root@ren7 mysql]# mysqlbinlog --start-datetime=" ...
- mysql基础之数据库备份和恢复的基础知识
备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...
- mysql基础之数据库变量(参数)管理
数据库的数据存放路径:[root@ren7 mysql]# pwd /var/lib/mysql [root@ren7 mysql]# ls aria_log.00000001 ibdata1 mul ...
- MySQL基础知识 数据库 数据表
1.数据库结构 库 表 数据 2. sql(structured query language)结构化查询语言 管理数据库 管理表 管理数据 3.数据库 增删改查 增 create database ...
- MySQL 基础七 视图
-- 查看表 SELECT * FROM student; SHOW CREATE TABLE student; -- 创建视图 CREATE VIEW v_student1 AS SELECT *F ...
- MySQL基础、MySQL安装和MariaDB安装
MySQL基础 目录 MySQL基础 关系型数据库介绍 数据结构模型 RDBMS专业名词 关系型数据库的常见组件 SQL语句 MySQL安装与配置 MySQL安装 MariaDB安装 关系型数据库介绍 ...
- day38数据库MySQL基础
数据库相关基础1 数据库介绍 1.数据库相关概念 数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端) 数据库管理管理系统RDBMS(本质就是一个C/S架构的套接字软件) ...
随机推荐
- Springboot拦截器实现IP黑名单
Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...
- maven配置错误之Unable to import maven project: See logs for details
很多朋友在初次使用maven时,都会出现这个问题. 一加载maven项目,即会报出Unable to import maven project这样的错误,哪怕是新的maven项目也不例外. 我查阅了很 ...
- 超详细Maven技术应用指南
该文章,GitHub已收录,欢迎老板们前来Star! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual 搜索关注微信公众号" ...
- Java并发编程-深入探讨synchronized实现原理
synchronized这个关键字对应Java程序猿来说是非常的熟悉,只要遇到要解决线程安全问题的地方都会使用这个关键字.接下来一起来探讨一下synchronized到底时怎么实现线程同步,使用syn ...
- skywalking的核心概念
在 SkyWalking 中,TraceSegment 是一个介于 Trace 与 Span 之间的概念,它是一条 Trace 的一段,可以包含多个 Span.在微服务架构中,一个请求基本都会涉及跨进 ...
- python list遍历方法汇总
list=['a','b','c','d','e'] #方法1: print('#方法1:') #i值为列表的item,list为列表名,因此i值即为列表元素 for i in list: #list ...
- TCP实战二(半连接队列、全连接队列)
TCP实验一我们利用了tcpdump以及Wireshark对TCP三次握手.四次挥手.流量控制做了深入的分析,今天就让我们一同深入理解TCP三次握手中两个重要的结构:半连接队列.全连接队列. 参考文献 ...
- Ajax实现文件上传(Spring MVC)
## 前端表单 和 JQuery jsp/html代码 使用JQuery <script src="static/js/jquery-3.4.1.js"></sc ...
- 入门大数据---Hadoop是什么?
简单概括:Hadoop是由Apache组织使用Java语言开发的一款应对大数据存储和计算的分布式开源框架. Hadoop的起源 2003-2004年,Google公布了部分GFS和MapReduce思 ...
- 几个常见CSS错误和解决办法
1.IE6下,当float存在时,margin双倍的问题 解决方法:加display:inline; 例: #content { float: left; width: 500px; ...