mysql数据库

mysql面试知识点

Deadly 提交于 2020-03-08 10:54:05
1 MyISAM和InnoDB的区别    a 是否支持行级锁 :   MyISAM 只有表级锁 (table-level locking),   而 InnoDB 支持行级锁 (row-level locking)和表级锁,默认为行级锁。    b 是否支持事务和崩溃后的安全恢复:    MyISAM 强调的是性能 ,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。   但是 InnoDB 提供事务支持事务 ,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。    c 是否支持外键:   MyISAM不支持,而InnoDB支持。    d 是否支持MVCC :   仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。 2 索引   MySQL索引使用的数据结构主要有 BTree索引 和 哈希索 引 。   对于 哈希索引 来说

Mysql基础

核能气质少年 提交于 2020-03-08 09:46:26
SQL 1. 什么是SQL? Structed Query Language:结构化查询语言 2. SQL通用语法 1. Sql可以单行或多行书写,以分号结尾。 2. 可以使用空格和缩进来增强语句的可读性。 3. Mysql的数据库SQL语句不区分大小写,关键字建议使用大写。 4. 3种注释 * 单行注释:--注释内容 或 #注释内容(mysql特有) * 多行注释:/*注释内容*/ 3. SQL的分类 1. DDL(Data Definition Languange)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:creat,drop,alter等 2. DML 用来对数据库表中的数据增删改。关键字:insert,delete,update等 3. DQL 用来查询数据库表中的记录(数据)。关键字:select,where等 4. DCL(了解) 用来定义数据库的访问权限和安全级别,和创建用户。关键字:GRANT,REMOVE等。 DDL:操作数据库,表 1. 操作数据库 :CRUD 1. C(create):创建 * 创建数据库; * create database 数据库名称 * 创建数据库,判断不存在,再创建: * create database if not exists 数据库名称 2. R(retrieve):查询 * 查询所有数据库的名称: * show

Linux下彻底卸载mysql详解

流过昼夜 提交于 2020-03-08 08:12:53
1、确认当前主机是否安装MySQL数据库 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql rpm -qa|grep -i mysql 可以看到如下图的所示: 显示之前安装了: MySQL-client-5.5.25a-1.rhel5 MySQL-server-5.5.25a-1.rhel5 2、停止mysql服务、删除之前安装的mysql 删除命令: rpm -e –nodeps 包名 rpm -ev MySQL-client-5.5.25a-1.rhel5 rpm -ev MySQL-server-5.5.25a-1.rhel5 如果提示依赖包错误,则使用以下命令尝试: rpm -ev MySQL-client-5.5.25a-1.rhel5 --nodeps 如果提示错误:error: %preun(xxxxxx) scriptlet failed, exit status 1 则用以下命令尝试: rpm -e --noscripts MySQL-client-5.5.25a-1.rhel5 3、查找之前老版本mysql的目录、并且删除老版本mysql的文件和库 find / -name mysql 查找结果如下: find / -name mysql /var/lib/mysql /var/lib/mysql/mysql /usr/lib64/mysql

数据库 mysql整体框架

ぐ巨炮叔叔 提交于 2020-03-08 06:00:54
数据库 mysql整体框架 文章目录 数据库 mysql整体框架 1、体系结构 2、存储引擎 2.1MyISAM存储引擎 2.2 InnoDB存储引擎 1、体系结构 连接者:不同语言的代码程序和mysql的交互(SQL交互) 1、 连接池 管理 : 缓冲用户的连接,线程处理等需要缓存的需求 2、 管理服务和工具组件 :系统管理和控制工具,例如备份恢复、Mysql复制、集群等 3、 sql接口 :接受用户的SQL命令,并且返回用户需要查询的结果 4、 查询解析器 : SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构) 5、 查询优化器 : SQL语句在查询之前会使用查询优化器对查询进行优化 6、 缓存 :如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据 7、 插入式存储引擎 :存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库 中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 说明: 在Oracle 和SQL Server等数据库中,所有数据存储管理机制都是一样的。 而MySql数据库提供了多种存储引擎 。 用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。 甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。 2

MySQL中关于OR条件的优化

与世无争的帅哥 提交于 2020-03-08 03:25:57
转载 MySQL在 5.0版本中引入新特性:索引合并优化(Index merge optimization),当查询中单张表可以使用多个索引时,同时扫描多个索引并将扫描结果进行合并。 该特新主要应用于以下三种场景: 1、 对OR语句求并集,如查询SELECT * FROM TB1 WHERE c1="xxx" OR c2=""xxx"时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果合并(union)操作,得到最终结果 2、 对AND语句求交集,如查询SELECT * FROM TB1 WHERE c1="xxx" AND c2=""xxx"时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果取交集(intersect)操作,得到最终结果 3、 对AND和OR组合语句求结果 该新特性可以在一些场景中大幅度提升查询性能,但受限于MySQL糟糕的统计信息,也导致很多场景查询性能极差甚至导致数据库崩溃。 以SELECT * FROM TB1 WHERE c1="xxx" AND c2=""xxx" 为例: 1、 当c1列和c2列选择性较高时,按照c1和c2条件进行查询性能较高且返回数据集较小,再对两个数据量较小的数据集求交集的操作成本也较低,最终整个语句查询高效; 2、 当c1列或c2列选择性较差且统计信息不准时

mysql错误:Table XXX is marked as crashed and should be repaired

China☆狼群 提交于 2020-03-07 23:58:42
找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/tablename/posts.MYI 然后myisamchk 工具会帮助你恢复数据表的索引。好象也不用重新启动mysql,问题就解决了。 问题分析: 1、 错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。 还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致 MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。 问题的编号为145 2、问题解决办法。 当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。 这三种修复方法如下所示: % myisamchk --recover --quick /path/to/tblName % myisamchk --recover /path/to/tblName % myisamchk --safe-recover /path/to/tblName 第一种是最快的,用来修复最普通的问题

高性能MySQL之锁详解

╄→尐↘猪︶ㄣ 提交于 2020-03-07 23:03:02
一、背景 MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。数据库锁的设计的初衷是处理并发问题。我们知道多用户共享资源的时候,就有可能会出现并发访问的时候,数据库就需要合理的控制资源的访问规则,因此,锁就应运而生了,它主要用来实现这些访问规则的重要数据结构。 二、全局锁 顾名思义,全局锁就是对整个数据库实例加锁,可以通过命令 Flush tables with read lock (FTWRL)对整个数据库实例子加锁。让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 全局锁有一个经典的使用场景就是做全库逻辑备份,也就是说吧整个数据库的每个表都用select 出来存成文本。以前有一种做法是通过FTWRL确保不会有其他线程对数据库做更新,然后对整个库做备份。注意,在备份过程中整个库完全处于只读状态。 你此时是不是觉得很危险? 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的binlog,会导致主从延迟。 看上去确实很危险,但是我们细想一下,备份为什么要加锁呢?如果我们不加锁又会出现什么问题呢? 假设你现在要维护京东的购买系统,关注的是用户账户余额表和用户商品表。

Helm工具详解

非 Y 不嫁゛ 提交于 2020-03-07 22:22:29
很多人都使用过Ubuntu下的apt-get或Centos下的yum,这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用卡发着可以管理应用包之间的依赖关系,发布应用;用户则可通过简单的方式查找、安装、升级、卸载应用程序等。 一、Helm概述 1)Helm简介 Helm是一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。我们可以将Helm看作Kubernetes下的apt-get/yum。 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。 对于使用者而言,使用Helm后无须了解Kubernetes的yaml文件语法、应用部署文件。直接使用Helm下载即可在Kubernetes上安装需要的应用。 2)Helm组件及相关术语 1)Helm Helm是一个命令行下的客户端工具。主要用于Kubernetes应用程序Chart的创建、打包、发布及创建和管理本地和远程的Chart仓库。 2)Tiller Tiller是Helm的服务端,部署在Kubernetes集群中,Tiller用于接收Helm的请求,并根据Chart生成Kubernetes的部署文件

jdbc连接MySQL数据库

荒凉一梦 提交于 2020-03-07 20:55:29
jdbc连接MySQL数据库 1、准备好mysql驱动 下载链接: https://dwz.cn/WJ10BClO 2、在数据库中创建数据库test以及表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for person -- ---------------------------- DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `PersonId` int(11) NOT NULL, `FirstName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `LastName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`PersonId`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT =

生产要不要开启MySQL查询缓存

一笑奈何 提交于 2020-03-07 18:51:54
一、前言 在当今的各种系统中,缓存是对系统性能优化的重要手段。MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议生产环境中把MySQL Query Cache关闭。按道理,MySQL Server默认打开,是鼓励用户使用缓存,但是大拿们却建议关闭此功能,并且国内各个云厂商提供的MySQL云服务中默认都是关闭这个功能,这是为什么?他们在使用中遇到了什么坑?本文将会从以下几方面来详解MySQL Query Cache。 1.MySQL查询缓存是什么? MySQL缓存规则是什么? 如何配置和缓存MySQL缓存 MySQL缓存的优缺点 生产要不要开启MySQL缓存 二、 MySQL查询缓存简介 MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,MySQL Server会对查询语句进行Hash计算后,把得到的hash值与Query查询的结果集对应存放在Query Cache中。当MySQL Server打开Query Cache之后,MySQL Server会对接收到的每一个SELECT 语句通过特定的Hash算法计算该Query的Hash值,然后通过该hashi值到Query Cache中去匹配