MySQL的体系结构
数据库安装完毕后,应该先对数据库进行配置,在对其进行数据的操作
innodb 行级锁,互不影响别的数据操作,解决数据并发更改数据的冲突
使用yum进行安装,但是yum源地址所依赖的库文件需要在挂载的光盘repo中
MairaDB的特性:
单进程,多线程
多种存储引擎可选
高版本不同的名字
MyISAM==>Aria
InnoDB==>XtraDB
#~~~~~~~~~~~~~~~~~~~~~~~~~
centos7启动mariadb服务命令:
systemctl enable mariadb
进入mariadb命令: mysql
显示数据库中的表:show databases
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
maria数据库装完毕后只允许本机访问
匿名账号不需要设置,随便输入,权限不大,访问数据不全
用户设置账户密码命令:mysql_secure_installation
mysql加帐号密码后的访问代码为: mysql -u??? -p????(明文显示,可以敲击回车不显示的输入密码)
maria数据库的用户名为 user+host组成一个用户名
linux下数据库默认的存储路径为:datadir=/var/lib/mysql(可以更改)
在数据中创建一个新的库命令为:create database ***;
构建数据表时,应考虑其属性之间的关系,按照第三范式的要求来进行创建
mysql的数据类型分为可变和固定两种类型:固定的字节若达不到则会在末尾补零(建议使用固定,因为整体规整,方便查看和索引)
使用可变字节:数据可长可短,但不规整,节省磁盘空间
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常见数据单位:
char(n):固定长度,最多255个字符
varchar(n):可变长度,最多65535个字符
tinytext :可变长度,最多255个字符
text:可变长度,最多65535个字符
BINARY(M)固定长度,可存二进制或字符,允许长度为0-M字节
内建类型:enum枚举,set集合
使用enum后,限定了数据可选的类型
#~~~~~~~~~~~~~~~~~~~~
数据库常用命令:
show databases; 查看数据库
use ***; 使用某个数据库,或者切换到某个数据库
show tables;显示当前所在的数据库中的表信息
desc ****;观看tables中某个表的结构
在mysql数据库中插入属性:
(1)insert 表名 (表中的属性,例如sid,name,sex) value(顺序对应个数的属性的值); 插入一条记录,并指定其属性对应的值(value)
(2)insert 指定表 value(02,'yang','f'); 若属性本身就是按照顺序来的,可以省略前面的属性值
(3)insert 指定表(sid,name) value(02,'yang') 若某些属性不赋值,则可以根据其定义是否可以为NULL,来进行操作,若允许,则可以为空,否则必须要有
update 表名 set 表内属性1='value',表内属性2='value' where name='指定对谁操作'
delete from 指定表名 where 属性名='value' 删除某个指定表中,指定的某一列
truncate table 指定表名 无法还原,清空指定表名的所有数据
select *(这个*代表所有数据) from students; 查看students中的所有数据
show table status like '指定表名'G 查看指定表名的状态
create table 表名 (参数1,可变或不可变长度,参数2,可变或不可变长度,参数3,可变或不可变长度) 在当前库中新建一个表,并指定其应有的属性和对应的参数条件
select 属性1,属性2 from 表名 where 属性 = '指定属性'; 显示表内指定属性为*的信息,(一个表中通常有很多信息,但是我们根据需求之查询某一些属性,但是他们得符合某些属
性要求,所以就是这种写法)
根据分组来进行数据统计:
GROUP:根据指定的条件把查询结果进行‘分组’以用于做”聚合“运算
select 指定属性,avg(要求平均值的属性) from 表名 group by 指定属性; 查看来自指定表名的指定属性的avg(平均值)
select * from 指定表 order by 指定属性; 将指定表的指定属性排序后显示(默认升序) (若属性指定为空,则默认排在升序最前)
select * from 指定表 order by 指定属性 desc; 将指定表的指定属性倒序排序后显示 (若属性为空,倒序排序后在最末尾)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL语句规范:
不区分大小写(建议大写);
字符串常量区分大小写;
SQL语句可单行或多行书写,以";"结尾
关键词不能跨多行或简写;
用空格和缩进来提高语句的可读性
子句通常位于独立行,便于编辑,提高可读性
注释:
/*注释内容*/ 多行注释
-- 注释内容 单行注释,之一空格
MYSQL注释:
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在数据库中输入help,可以查询可用的非sql语句的命令
#~~~~~~~~~~~~~~~~~~~~~~~~~~
数据库对象的命名规则:
同一database下,不能同名
首字母必须英文
可选三个特殊字符(#_$)
不要使用MYSQL的保留字
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
索引的设置:
create index 索引名 on 指定表 (指定索引作用的属性)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~
笛卡尔乘积:
交叉连接:
用一张表中的某一个属性,去和另一张表中的属性进行匹配,匹配后生成一个新的表,表中记录着匹配项与被匹配的属性,m(可以为多):n(可以为多),但是m有几个,n匹配的就有几个
笛卡尔乘积的代码为: select * from 匹配项 cross join 被匹配项;
内连接:取交集
代码 1: select 属性1,属性2 from 指定表名x , 指定表名y where 指定表名x.指定属性m=指定表名y.指定属性n; 显示出自己想要的属性,但是他的某一个属性必须和其他表中的某一个属性一致
代码 2:select 属性1 ,属性2 from 指定表名x inner join 指定表名y on 指定表名x.指定属性m = 指定表名y.指定属性n ; 教新的写法,也是mysql推荐的写法
求左外连接:
select 属性1 ,属性2 from 指定表名x left outer join 指定表名y on 指定表名x.指定属性m = 指定表名y.指定属性n;
求右外连接:
select 属性1 ,属性2 from 指定表名x right outer join 指定表名y on 指定表名x.指定属性m = 指定表名y.指定属性n;
多表联合:
select 属性1 ,属性2 from 指定表名x union select 属性1 ,属性2 from 指定表名y;
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
设置同一网段的主机访问某个指定数据库:
grant 权限 on 指定表 to 目标帐号@'目标ip地址,可用%代替网段' identified by '密码' ;
权限为: select ,delete ,update , all(所有权限)
目标主机访问代码为:
mysql -u服务器端分配的帐号 -p服务器端设置的密码 -h指定连接的mysql数据库ip地址
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Maria日志:
慢查询日志:slow query log
记录 某些进程访问数据库的时间,若超过了设置的值,则记录
二进制日志:利用二进制日志对数据进行还原,将其重定向到需要还原的mysql数据库中即可
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mysql复制:
实现读写分离:
读取数据 访问一个数据库
写入数据 访问另一个数据库
程序的主从分离需要设置:
设置流程为:
主库写,更新,删除 -->生成binary log(二进制日志) -->利用I/O thread 将此二进制日志写入一个relay log中,再由relay log启用SQL thread导出到从库中
根据日志来写入从库,主库的数据发生变化,从库的数据也跟着发生变化
start slave
启动I/O thread,SQL thread线程;