mysql补充
mysql使用流程
- 开启服务端,mysqld或者net start mysql
- cmd下键入mysql -u root -p,输入设置好的密码,连接mysql客户端
- show databases;展示所有的mysql仓库
- 创建一个库:create database CRM;然后show databases;
- 切换数据库使用use + 库名,例如:use crm;
- 在切换仓库下创建一张表,命令:create table student(id int,name char(10),age int);
- 再执行show tables;就可以看到有了一个student表
- 查看一下这个表里的数据select * from student;
- 接下来正常执行表的增删查改操作即可
mysql目录介绍
总结:其实这些库就是我们电脑上对应的文件夹,在mysql中显示为对应的库,来方便我们管理数据,而文件或者文件夹这种与硬盘打交道的事情就交给mysql了,我们只需要对mysql库中的数据进行操作就可以了
指令补充
show variables like "%char%";
# 查看字符集编码指令
mysql -h 127.0.0.1 -P 3306 -u root -p
# MySQL客户端连接服务端时的完整指令
show variables like "storage_engine%";
# 查看当前正在使用的引擎
show engines;
# 查看MySQL所有的引擎,
mysql密码服务端密码忘记之后的操作
停掉MySQL服务端(net stop mysql)
切换到MySQL安装目录下的bin目录下,然后手动指定启动程序来启动mysql服务端,指令: mysqld.exe --skip-grant-tables
重新启动一个窗口,连接mysql服务端,
修改mysql库里面的user表里面的root用户记录的密码:
update user set password = password('666') where user='root';
关掉mysqld服务端,指令:
tasklist|findstr mysqld
taskkill /F /PID 进程号正常启动服务端(net start mysql)
修改密码的三种方式
用set password命令
首先登录MySQL,使用mysql自带的那个客户端连接上mysql。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');用mysqladmin(因为我们将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码)
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123关于mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能,虽然mysqladmin的很多功能通过使用MySQL自带的mysql客户端可以搞定,但是有时候使用mysqladmin操作会比较简单。
用update直接编辑那个自动的mysql库中的user表,
首先登录MySQL,连接上mysql服务端。
mysql> use mysql;use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。
mysql> update user set password=password('123') where user='root' and host='localhost';其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。
mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。
mysql工作流程与存储引擎
存储引擎的概念是MySQL独有概念
mysql所有存储引擎:
存储引擎介绍:
存储引擎是mysql数据库独有的存储数据、为数据建立索引、更新数据、查询数据等技术的实现方法
1、InnoDB引擎
InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正称为目前MySQL AB所发行新版的标准,被包含在所有二进 制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务,以及参数完整性(即对外键的支持)
InnoDB引擎特点:
- 支持事务:支持4个事务隔离界别,支持多版本读。
- 行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
- 读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。
- 具体非常高效的缓存特性:能缓存索引,也能缓存数据。
- 整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)
- 所有SecondaryIndex都会保存主键信息。(了解)
- 支持分区,表空间,类似oracle数据库。
- 支持外键约束,不支持全文索引(5.5之前),以后的都支持了。
- 和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。
InnoDB引擎适用的生产业务场景
- 需要事务支持(具有较好的事务特性,例银行业务)
- 行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。
- 数据更新较为频繁的场景,如:BBS(论坛)、SNS(社交平台)、微博等
- 数据一致性要求较高的业务,例如:充值转账,银行卡转账。
- 硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO,可以通过一些参数来设置
- 相比MyISAM引擎,Innodb引擎更消耗资源,速度没有MyISAM引擎快
InnoDB引擎调优精要
主键尽可能小,避免给Secondery index带来过大的空间负担。
避免全表扫描,因为会使用表锁。
尽可能缓存所有的索引和数据,提高响应速度,较少磁盘IO消耗。
在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交,有开关可以控制提交方式。
合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。
如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作。
避免主键更新,因为这会带来大量的数据移动。
事务:数据库中事务是用户一系列的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
2、MyISAM引擎
MyISAM引擎特点:
- 不支持事务
事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。 - 表级锁定
数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。 - 读写互相阻塞
不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。 - 只会缓存索引
MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。 - 读取速度较快占用资源相对较少
- 不支持外键约束,但只是全文索引
- MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。
3、其他搜索引擎:
- NDB 存储引擎
NDB 存储引擎是一个集群存储引擎,类似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不同的是,其结构是 share nothing 的集群架构,因此能提供更高级别的 高可用性。NDB 存储引擎的特点是数据全部放在内存中(从 5.1 版本开始,可以将非索引数 据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且能够在线添加 NDB 数据存储节点(data node)以便线性地提高数据库性能。由此可见,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。 - Memory 存储引擎
正如其名,Memory 存储引擎中的数据都存放在内存中,数据库重 启或发生崩溃,表中的数据都将消失。它非常适合于存储 OLTP 数据库应用中临时数据的临时表,也可以作为 OLAP 数据库应用中数据仓库的维度表。Memory 存储引擎默认使用哈希 索引,而不是通常熟悉的 B+ 树索引。 - Infobright 存储引擎
第三方的存储引擎。其特点是存储是按照列而非行的,因此非常 适合 OLAP 的数据库应用。 - NTSE 存储引擎
网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的将来会实现面向内存的事务支持。 - BLACKHOLE
黑洞存储引擎,可以应用于主备复制中的分发主库。
MySQL 数据库还有很多其他存储引擎,上述只是列举了最为常用的一些引擎。