Mysql数据库基础

MYSQL:V5.7.17

中小规模、关系型数据库系统

常见的数据库

商业   Oracle  甲骨文、SQL Server 微软
开源   MySQL 甲骨文  DB2 IBM、redis 开源软件、Mencached、MongoDB
是否可跨平台
SQLserver ---只能用于windows系统

专业术语: DB-数据库;DBMS-数据库管理系统;DBS-数据库系统

常用的SQL命令

create、inset、update、delete、alter、drop、grant、revoke、commit、rollback、savepoint

1、mysql介绍
起源与发展:
    应用最广泛的开源数据库软件
       --最早隶属于瑞典的MySQL的AB公司,与 
           08年1月被sun收购,09年4月被Oracle收购
       --目前的版本: 5.5  5.6  5.7   8.0(测试)
特点及应用
     主要特点: 适用于中小规模、关系型数据系统
           支持多平台
           支持多种编程语言
           成本低、 性能高、  安装使用简单
典型应用环境
     -LAMP              -LNMP
2、mysql相关参数
--软件安装自动回创建相关目录与文件
tar -xvf mysql-5.7.17.tar               //解压mysql整合包
yum -y install *
    文件名                          
/etc/my.cnf                 主配置文件
/var/lib/mysql             数据库目录
默认端口                       3306
进程名                         mysqld
传输协议                       tcp
进程所有者、所属组               mysql
错误日志文件                 /var/log/mysqld.log
MySQL基础库
information_schema    信息概要库
mysql                 授权库
performance_schema    性能结构库
sys                   系统元数据库
3、数据库管理

1、mysql初始配置

--初始密码登录
    --数据库管理员名:root
         -默认仅允许root本机连接
         -首次登录密码在安装软件是随机生成
         -随机密码存储在日志文件/var/log/mysqld.log
         -连接命令:mysql -h  数据库地址 -u用户  -p密码
--修改root密码
    -使用alter user  命令修改登录密码
    -新密码必须满足密码策略
    -管理员root使用新密码连接服务
          alter user  root@'localhost'  identified by '密码';
--修改密码策略
       策略名称             验证方式
       0   or   low            长度
       1    or   MEDIUM    长度、数字、小写/大写和特殊字符
       2    or    STRONG  长度、数字、小写/大写和特殊字符、字典文件
--查看变量:    show  variabels  like  ‘变量名’;
        修改密码策略: set global  variadate_password_policy=0/LOW
	    查看密码:  grep 'password'  /var/log/mysqld.log
修改密码:mysql -uroot -p密码
mysql> alter user root@'localhost' ideintified by '123qqq...A';
             show variables like "%password%";
             set global validate_password_policy=0或者low  
             set global validate_password_length=6;
             alter user root@'localhost' identified by '123123';

2、连接msyql服务

连接方式:
	-客户端连接MySQL服务
     命令行:web页面、安装图形软件、编写监本(php、java、python)
     使用mysql命令
     mysql -h 服务器 IP  -p 端口  -u用户名  -p密码  【数据库名】
数据存储流程:
	-客户端把数据存储到数据库服务器:
      1.连接数据库服务器
      2.建库、建表、插入记录
      3.断开连接
MySQL管理环境
	SQL命令使用规则
     不区分字母大小写(变量值除外)
     每条SQL命令,结束
     \c终止当前的命令

3、常用SQL命令分类

管理数据库使用SQL(结构化查询语言)   
DDL  数据定义语言  create  alter   drop             Data Ddefinition Language
DML  数据操作语言  insert  update  delete           Data Query Language
DCL   数据控制语言  grant  revoke                   Data Manipulation Language
DTL   数据事务语言  commit  rollback  savepoint     Data Control Language
mysql注释:
注释: 单行注释:  #    /   --  注释文字
      多行注释:  /*  注释文字 /*

4、mysql基本操作

show create table  库.表 \G 查看表创建时的信息
库管理命令:
	类似于文件夹,用来储存表
-show databases;        	 显示已有库
-select  user ();        	显示连接用户
-use 库名   ;                 切换库
-select database();			显示当前所有库
-create database 库名;   		创建库
-show tables;                显示已有表
-drop   database 库名;   		删除库
-show tables from 库名         查看其它库的表
库名的命名规则:
	-仅可以使用数字、字母、下划线。不能为纯数字
	-区分字母大小写,具有唯一性
	-不可以使用指令关键字、特殊字符
表管理命令:
-create table 库名.表名(字段1, 类型(宽度),字段2  类型(宽度))
  DEFAULT  CHARSET=utf8;		##指定中文字符,让表支持插入中文
desc 库名.表名           --查看表结构
drop  table 库名.表名    --删除表
管理命令:
-select * from 库名.表名                           --查看表记录
-insert  into  库名.表名 values(值列表) 		    --插入表记录
-update 库名,表名  set  字段=值;            		 --修改表记录
-delete from  表名                                 --删除表记录
4、数据类型

1、字符类型

定长:char
	-最大字符个数255
	-不够指定字符个数时在右边用空格补全
	-字符个数超出则无法写入
变长:varchar
	--字符上线为65532
	--超出则无法写入
大文本类型
	text  、 blobo
	--字符数大于65535存储时使用

2、数值类型

-整数型
  类型          名称            有符号范围          无符号范围
tinyint         微小整数        -128-127            0-255
smallint        小整数          -32768-32767       0-65535     
mediumint  		中整型          -2(23)-2(23)-1     0-2(24)-1
init            大整型
bigint          极大整型
unsigned                    使用无符号存储范围
                数值类型:  四舍五入
-浮点型
  格式1:  字段名   类型;    float:单进度
  格式2: 字段名  类型;(总宽,小数位数)  double 双精度 

3、枚举型

enum:单选
    --字段名  enum(值1,值2)
    --仅能选择一个值
    --字段值必须在列表里选择
set:多选
	--字段名  set(值1,值2)
	--选择一个或多个
	--字段值必须在列表里选择

4、日期时间型

日期时间:datetime
	--范围:1000-01-01 00:00:00—9999-12-31 23:59:59
	--格式:yyyymmddhhmmss
日期时间:timestamp
	--范围:1970-01-01 00:00:00-2038-01-19 00:00:00
日期:date
	0001-01-01—9999-12-31
年:  year
	1901-2155
补充:--关于日期时间字段
         -当为给timestamp字段赋值时,自动以当前系统时间赋值;;然而datetime值为空
     --year 类型
         -要求使用4位数赋值
         -当使用2位数赋值时:01-69视为2001-2069;  70-99视为1970.1999

时间函数:

   类型	                   用途
Curtime()            	获取当前的系统时间
Curdate(0)           	获取当前的系统日期
Now()          	        获取当前的系统日期和时间
Year(now())	           获取年
Mouth(now())  	       获取月
Day(now())	       	   获取日
Date(now())	       	   获取日期
Time(now())	           获取时间
5、数据库表结构

1、约束条件

查看约束条件:
	desc  库名.表名
    字段名|   类型  |    空   |  键值  |  默认值  |  额外设置
设置约束条件
	--null           允许为空(默认设置)
    --not  null      不允许为null(空)
    --key            键值类型
    --default        设置默认值,缺省为NULL
    --extra          额外设置

2、修改表结构

语法结构:
		alter  table  库名.表名  执行动作;
添加新字段:
		-新字段默认添加在字段末尾
		--alter table 库名.表名  
      add   字段名  类型(宽度) 约束条件  (after 字段名/ first);
修改字段类型:
		-修改的字段类型不能与以存储的数据冲突
		--modify 字段名  类型(宽度)  约束条件  (after 字段名/ first);
修改字段名:
		-alter  table 库名.表名
		--change   源字段名  新字段名 类型(宽度)  约束条件;
         可以在修改字段名的同时更改约束条件
删除字段:
		-表中有多条记录的时候,所有列的此字段的值都会被删除
		--alter  table  库名.表名  drop  字段名;
修改表名:
		-表对应的文件名改变,表记录不受影响
		--alter table  旧表名  rename  新表名
6、mysql键值

1、键值概述

键值类型:
	--根据数据存储要求,选择键值
    index       普通索引
    unipue      唯一索引
    fulltext    全文索引
    primary key    主键
    foreign  key   外键
索引介绍:
	--类似于书的目录
    --对表中的字段值进行排序
    --索引类型包括:Btree、B+tree、bash
索引优缺点:
	优点:-通过创建唯一索引,可以保证数据库表中每一行数据的唯一性
          -可以加快数据的查询速度
	缺点: -当对表中的数据进行增加、删除和修改的时候,索引也 
          需要动态的调整,降低了数据的维护速度
           -索引需要占物理空间  

2、index普通索引

使用规则:
    -一个表中可以有多个index字段
    -字段的值允许重复,且可以赋NULL值
    - 通常把做为查询条件的字段设置为index字段
    - index字段标志是MUL
--建表时创建索引
   -index(字段名),index(字段名)..
--在已有的表里创建索引
   -create index 索引名 on 表名(字段名);
--删除索引
   -drop index  索引名  on  表名;
--查看索引信息
   -show index from  表名 \G;

3、promary key 主键

使用规则:
   -字段值不允许重复,且不允许赋NULL值
   -一个表中只能有一个primary key 字段
   -多个字段都做为主键,称之为复合主键,必须一起创建
   -主键字段的标志位PRI
   -通常把表中唯一标识记录的字段设置为主键(记录编号字段)
--建表时创建主键
   -primary key(字段名):create table t1(name char(3) primarykey);
--在已有表里添加主键
   -alter table 表名 add  primary key(字段名);
--删除主键
   -alter  table  表名  drop primary key;
--创建复合主键
   -primary key(两个及以上字段列表  : create table t1(name char(3),class char(4) primary key(name,calss));
 与auto_increment连用(设置字段值自增长)
     -字段名 primary key auto_increment
 删除自增长属性
     -alter  table  表名   modify  id  int  not   null;
 重置自增涨
     -alter  table  库名.表名  auto_increment=1;

4、foreign key 外键

外键功能
   -插入记录时,字段值在另一个表字段值范围内选择。
使用规则
   -表存储引擎必须是innodb
   -字段类型要一致
   -被参照字段必须要是索引类型类型的一种(primary key)
创建外键的参考键(需要设置自增属性:primary key  auto_increment)
  create table 表名(
         字段 primary key auto_increment,
          ...
          )engine=innodb;
创建外键
    create table 表名(字段列表,
	foreign key(字段名) reference 表名(字段名)  #指定外键
 	on update cascade                                              #同步更新
	 on  delete casade                                                #同步删除
	)engine=innodb;                         #指定存储引擎
删除外键
   --外键名
     show create table 表 \G;(查看外键的约束名称)
   -alter table  表名  drop  foreign  key  外键名-约束名称;
已有表新建外键
   -alter table 表名 add foreign key(字段) on update cascade on delete cascade;
案例:
   员工表:
		create  table  yg(
			yg_id  int  primary  key  auto_increment,
			name  char(20)
		);

   工资表:
		create  table  gz(
			gz_id  int  primary  key,
			pay  float(7,2),
			foreign  key(gz_id)  references  yg(yg_id)
			on  update  cascade 
			on  delete  cascade
		);
6、数据导入导出

1、数据存放、搜索路径

查看搜索路径:
	--show variables  like "secure_file_priv"
    --ls -ld /var/lib/mysql-files/
修改搜索路径:
创建目录并修改所有者:
修改主配置文件
    /etc/my.cnf下插入
    secure_file_priv="自定义目录"
对自定义目录授权
  chown mysql 目录
重启服务
  mkdir   /myload
  chown  mysql /myload
  vim /etc/my.cnf
  secure_file_priv='/myload'
  systemctl restart mysqld

2、数据导入

命令格式
    默认只有ROOT用户数据有导入权限
建表
导入数据
load data infile "目录/文件名" into table 库名.表 fields terminated by '分隔符' lines   terminated by '\n';

注意事项
–字段分隔符要与文件一致
–表字段类型的字段个数要与文件匹配
–导入数据时指定文件的绝对路径

3、数据导出

命令格式
    select * from 表 into outfile '目录/文件名'
    select 命令 into outfile '目录/文件名' fields terminated by '分隔符';
    select 命令 into outfile '目录/文件名' lines terminated by '\n';

注意事项
-导出数据行数有SQL查询决定
-导出的表记录,不包括字段名
-自动创建存储数据的文件
-存储数据文件,具有唯一性

7、管理表记录

1、增加表记录

语法格式
   添加一条记录,给所有字段赋值
   insert  into  表名  values(字段值列表)
注意事项
	--字段值要与字段类型相匹配
	--字符类型的字段,“ ”号
	--依次给所有字段赋值时,字段名可以省略
	--只给部分字段赋值,必须明确写出对应的字段名称
	--没有赋值的字段使用默认值或自增长赋值

2、查询表记录

语法格式
	select 字段1,.. ..,字段N from 库名.表名;
注意事项
	--*表示所有字段
	--查看当前库表记录时库名可以省略
	--条件决定显示行的个数

3、更新表记录

语法格式
	update 库名.表名 set  字段名=值,.....;
注意事项
	--字段值要与字段类型相匹配
	--对于字符类型的字段,值要用双引号括起来
	--若不使用where限定条件,会更新所有记录字段值
	--限定条件时,只更新匹配条件的记录的字段值

4、删除表记录

语法格式
	delete  from库名.表名  where 条件表达式;
注意事项
	--不加条件删除表中所有行
8、管理表的匹配条件

1、基本匹配

数值比较
	--字段必须是数值类型
    <>  <=  >=  !=
字符比较/匹配空/非空
	--字段必须是字符类型
    =  !=  is null     is not  null
逻辑匹配
	--多个判断条件时使用
		or       
		and
		!或 not
范围匹配/去重显示
	--匹配范围内的任意一个值
		in(值列表)
		not in(值列表)
		between    and   
		---去重:
		select  distinct 字段名 from ...

2、高级匹配

模糊查询
	--where  字段名  like  ‘通配符
	_ :表示1个字符
	%:表示0~n个字符
正则表达式
	where 字段名 regexp ‘正则表达式
     ^  $  .  []  *  |
四则运算
	--字段必须是数值类型
	+ - *  /  %  ()

3、select操作查询结果

聚集函数:
	--MySQL内置数据统计函数
	abg    统计字段平均值
	sum    统计字段之和
	min             字段最小
	max            字段最大
	count          字段值个数
	concat(字段名1,字段名2......)	##将多个字段的值组合到一块
查询结果排序
	select.. order by 字段名  asc   升序,默认
	select.. order by 字段名  desc 降序
查询结果分组
	select..  group  by  字段名;
查询结果过滤
	select.. having  条件表达式;
限制查询结果显示行数
	select..  limit 数字;     显示查询结果前多少条记录
	select.. limit  数字1,数字2;   显示指定范围内的查询记录
	--数字1  起始行 (0表示第1行)
	--数字2  总行数
9、数据库用户授权

1、grant授权

基础命令: grant  权限列表 on 库名.表名 to 用户名@'客户端地址' identified by '密码' 
   	     with grant option;  有授权权限,可选项
--权限列表
 		 usage 无权限、  select update drop  
		 select update(字段1,字段N) 自定字段
--客户端地址
		%                    所有主机
		192.168.4.%    网段内所有主机
		192.168.4.1      1台主机
		localhost        数据库服务本机

2、相关命令

select user();
  show grants;
  show grants for 用户名@‘客户端地址’
  set password=password('密码');
  set password for 用户名@‘客户端地址’=password('密码');
  drop user 用户名@‘客户端地址’;

3、授权库

mysql库中记录的表
  -user                记录已有的授权用户及权限
  -db                  记录已有的授权用户对数据库的访问限制
  -tables_priv     	   记录已有授权用户对表的访问权限
  -columns_priv        记录已有授权用户对字段的访问权限
查看表记录可以获得用户权限;  也可以通过更新记录,修改用户权限

4、撤销权限

通过grant查询用户的权限
  revoke  权限列表  on  库名.表  from  用户名@‘客户端地址’
如果没有事先建立其他管理账号,请不要轻易撤销root用户的本地访问权限,否 
则恢复起来会比较困难,甚至不得不重装数据库。

5、root密码

恢复root密码
停止MySQL 服务程序
   跳过授权表启动MySQL服务程序
   修改root密码
   以正常方式重启MySQL服务程序
   vim /etc/my.cnf
   skip-grant-tables
mysql> update mysql.user  set authentication_string=password('密码')   
       where  user='root' and host='localhost';
mysql>flush   privileges;
重置root密码
	mysqladmin -uroot -p旧密码 password'新密码'
10、Mysql图形管理工具
管理工具
类型			        界面	          操作系统		       说明
mysql			    命令行	            跨平台	          MySQL官方bundle包自带
MySQL-Workbench      图形	            跨平台		        MySQL官方提供
MySQL-Front   	     图形	           Windows		   开源,轻量级客户端软件
Navicat		         图形	           Windows		   专业、功能强大,商业版
phpMyAdmin	         浏览器	       跨平台		      开源,需LAMP平台
yum  -y  install  http  php  php-mysql
tar  -xf  phpMyAdmin-2.11.11-all-languages.tar.gz
mv   phpMyAdmin-2.11.11-all-languages  /var/www/html/phpmyadmin
cd   /var/www/html/phpmyadmin/
cp  config.sample.inc.php  config.inc.php	##创建主配置文件
vim   config.inc.php
$cfg['blowfish_secret'] = 'plj123';		##添加字符,给cookie做认证使用,不为空就行
$cfg['Servers'][$i]['host'] = 'localhost';		##指定数据库服务器IP地址
:wq	
		systemctl  start  httpd
		systemctl  enable  httpd
客户端访问测试
		http:.//192.168.4.50/phpmyadmin
		systemctl  stop  firewalld
		setenforce  0
11、完全备份

1、备份概述

原理
	通过采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃删除旧库
数据备份方式
		物理备份
			-冷备份:  cp  tar  
            -热备:    不关闭服务备份数据(xtrabackup)
		逻辑备份
			-mysqldump   -备份
            -mysql            -恢复
	    物理备份及恢复
		备份:
             cp -r 
        恢复:
             恢复需要对mysql目录进行权限的设置

2、逻辑备份

数据备份策略
	--完全备份
  		 -备份所有数据
	--增量备份
   		 -备份上次备份后,所有新产生的数据
	--差异备份
    	 -备份完全备份,所有新产生的数据
完全备份及恢复
	-完全备份
     	mysqldump   ....
    -完全恢复
    	mysql .....
    备份时库名表示方式:
        all-databases  或者  -A   所有库 
        数据库名字                单个库
        数据库名   表名           单张表
        -B  数据库1  数据库2      多个库

注意事项:
无论备份还是恢复,都要验证用户权限

12、增量备份

1、binlog日志

日志概述
	1. 也称作二进制日志
	2.MySQL服务日志文件的一种
	3.记录除了查询之外所有的SQL命令
	4.可用于数据备份和恢复
	5.配置mysql主从同步的必要条件

2、启用日志

配置文件 my.cnf
  server_id                指定id值(1-255)
  log_bin=目录名/文件名      启用binlog日志(开启后存放命令)
  max_binlog_size=数值m     指定日志文件容量,默认1G
binlog的相关文件
   1.主机名-bin.index      索引文件
   2.主机名-bin.000001    第一个二进制日志
  .................
手动生成新的日志文件:
   1.命令行:
       systemctl restart mysql
       mydump ......--flush-logs....
       mysql -uroot -p  -e   'flush logs'
   2.服务端
       flush  logs;

3、清理日志

--删除指定编号之前的binlog日志
   --在服务端: 
       purge  master  logs  to  ‘binlog文件名’;
--删除所有binlog日志,重新自动创建一个新的日志
       reset  master;

注:
binlog会记录所有的数据库、表更改操作,所有可以在必要的时候执行以前做过的一部分数据操作,但 是对于启用binlog之前的数据库、表将不适用

4、恢复数据

分析日志
	--查看日志当前记录格式
    	show vairables like '%binlog_format%';
    --修改日志记录格式
    	在配置文件/etc/my.cnf
  		添加:  binlog_format=‘记录格式名称’
	--查看日志内容
         mysqlbinlog  选项  binlog日志文件名
   选项
     	start-datetime='年-月-日  时:分:秒'     
     	stop-datetime='年-月-日  时:分:秒
    	start-positon=数字             起始偏移量
     	stop-position=数字             结束偏移量
恢复数据
	--基本思路
  	使用mysqldump  提取SQL操作
  	通过管道交给mysql命令执行
命令格式
    mysqldump  日志文件 | mysql  -uroot -p密码
13、差异备份
先进行完全备份
innobackupex  --user root --password 密码  完全备份目录 --no-timestamp
差异备份
innobackupex  --user root  --password 密码 --incremental  差异备份目录1 --incremental-basedir=完全备份目录  --no-timestamp
innobackupex --user root --password 密码 --incremental 差异备份目录2 --incremental-basedir=完全备份目录 --no-timestamp
14、percona软件介绍

1、mysql备份工具

常用的MySQL备份工具
	常用的MySQL备份工具
    物理备份缺点
         1.跨平台性差
         2.备份时间长、冗余备份、浪费存储空间
	mysqldump备份缺点
  1.效率较低、备份和还原速度慢、锁表
  2.备份过程中,数据插入和更新操作被阻塞
XtraBackup工具
在线热备份工具
  -备份过程中不锁表,适合生产环境
  -有专业组织percona提供(改进mysql分支)
组件
  -xtrabackup: C程序、支持innoDB/XtraDB
  -innobackupex:以Perl脚本封装xtrabackup,支持MylSAM

2、innobackupex命令

常用选项
--host   主机名
--user   用户名
--port   端口号
--password 密码
--databases  数据名
--no-timestamp  不用日期命名备份文件存储的子目录名
--redo-only    日志合并
--apply-log     准备恢复诗句
--copy-back    拷贝数据
--incremental=目录名     增量备份
--incremental-dir=目录名  准备恢复数据时,指定增量备份数据存储的命令名
--export        导出表信息
  import           导入表空间  
完全备份/与恢复:
	备份-innobackupex   --user 用户名 --password 密码  备份目录名  --no-timestamp
    恢复-innobackupex   --apply-log  目录名   //准备恢复数据
        -innobackupex  --copy-back 目录名  //恢复数据

增量备份/与恢复

备份
-innobackupex --user 用户名 --password 密码  完全备份目录名  --no-timestamp ///先进行完全备份
-innobackupex  --user 用户名  --password  密码  --incremental 增量目录  --incremental-basedir=完全备份目录 --no-timestamp   ///进行增量备份
恢复:
-innobackupex  --apply-log  --redo-only  完全备份目录名  --incremental-dir=目录名 //准备恢复数据
-innobackupex  --apply-log  --redo-only  完全备份目录名  --incremental-dir=目录名 //合并数据
innobackupex  --copy-back  目录名   //恢复数据到mysql
15、修复表
具体操作步骤
  -删除表空间
  -导出表信息
  -拷贝表信息文件到数据库目录下
  -修改表信息问价的所有者及组用户为mysql
  -导入表空间
  -删除数据库目录下的表信息文件
  -查看表记录
--对应操作
    alter table 库名.表名  discard  tablespace;
	innobackupex  --apply-log  --export  数据完全备份目录
	cp 数据完全备份目录/数据库目录/表名.(ibd,cfg,exp) 数据库目录/库名目录
	chown -R mysql.mysql  数据库目录/库名
	alter table 库名.表名  import  tablespace;
	select * from 库名.表名
	rm -rf  数据库目录/库名/表名.(cfg.exp)
16、备份策略
周一完全备份、周二~周日增量备份、采用热备方式、每个月实行两次数据的恢复演练
17、Mysql存储引擎

1、存储引擎
功能组件之一,访问表示希望使用MySQL的功能对表做处理,调用相应的存储引擎

MySQL体系结构
	1.连接池: 检查硬件资源 和用户访问权限
	2.管理工具: 安装mysql服务软件自带安装命令:  mysql  mysqldump  mysqladmin  mysqlbinlog
	3.sql接口:   把执行的SQL命令发送给mysql服务的进程处理
	4.分析器:  分析执行SQL命令的语法格式访问的数据是否有权限
	5.优化器:  对执行的SQL优化处理
	6.缓存空间:  查询缓存,存储曾经查找过的数据,存储空间从物理划分。
	默认MySQL服务查询缓存没有开启
    7.存储引擎:访问表数据时,会根据表使用的存储引擎对数据做不同的处理,每种存储引擎都有各自的功能和数据存储方式。建表是可以根据指定表使用的存储引擎。
    8.文件系统:  数据库服务器的硬盘
	mysql服务处理查询访问的过程
客户端访问服务器--执行命令--先访问,查询缓存,有数据直接反馈,反之从硬盘查找数据,先保存到缓存区,在回复到客户端

2、配置存储引擎

查看默认存储引擎
	show  engines
    show create table 库。表\G
修改表存储引擎
	修改已有表:
    alter  table  table  库.表  engine=新存储引擎名;	
    建表时:
    create  table  库.表(字段列表)engine=存储引擎名;
修改服务存储引擎
	 vim /etc/my.cnf	
     [mysqld]
     default-storage-engine="myisam"

3、存储引擎特点

myisam存储引擎

支持表级锁、不支持外键、事务、事务回滚
每张对应3个表文件
	.frm    表结构
	.MYI    index索引
	.MYD    数据

innodb存储引擎

支持外键 、支持事务、支持事务回滚、支持行级锁
每张对应2个表文件
	.frm:   表结构
    .ibd:   index+数据
事务日志文件:
	ibdata1
	ib_logfile0
	ib_logfile1
18、mysql锁机制

1、锁

锁:加锁的目的 是为了解决 数据并发访问的冲突问题。

2、锁粒度

锁粒度
  --表级锁:对整张表加锁
  --行级锁:仅对被访问的行分别加锁
表级锁: 只要是对表做select 或insert 访问 会把整张表锁上,锁了之后不允许其他的任何访问,只有锁被释放后才会允许其他的访问
行级锁:对表做select 或insert 访问,仅仅对被访问的行分别加锁,没有被访问的行,不会加所有,允许其他的连接访问。
锁的类型:读锁 和 写锁
	读锁:对表执行select 访问 时加读锁,又叫共享锁,如果在加读锁期间有其他客户端也对表执行select 访问,是允许的,但insert 不允许。
	写锁: 对表做insert 访问时加写锁。又叫排它锁 ,如果在加写锁期间不允许任何连接对表做select 或insert。

查看当前锁状态
show status like ‘table_lock%’

建表时,如何决定表使用哪种存储引擎
1、接受查询select访问多的表,适合使用myisam存储引擎,节省系统的硬件资源

​ 2、接受写(insert update delete)访问多的表,适合使用innodb存储引擎,并发访问量大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值