存储引擎
1、mysiam
主要特点:不支持表级锁,不支持事务、事务回滚、外键
相关的表文件:表名.frm、表名.MYI、表名.MYD
2、InnoDB存储引擎
主要特点:支持行级锁,支持事务、事务回滚、外键
相关表文件:表名.frm、表名.ibd
ibdate1、ib_logfile0、ib_logfile1
MYSQL锁机制
锁粒度
表级锁:一次直接对整张表进行加锁
行级锁:只锁定一行
页级锁:对整个页面进行加锁
锁类型
读锁:支持并发读
写锁:独占锁,上锁期间线程不能读表或写表
事务特性(ACID)
1、原子性
事务整个操作就是一个整体,不可分割,要么全部成功,要么全部失败
2、一致性
事务操作前后,表中的记录没有变化
3、隔离性
事务操作是互相隔离不受影响的
4、持久性
数据一旦提交,不可改变,永久改变表数据
数据库(DB、DataBase)
–依照某种数据模型进行组织并存放到存储器的数据集合。
数据库管理系统(DBMS,DataBase Management System)
–用来操纵和管理数据库的大型服务软件
数据库系统(DBS,DataBase System)
–即DB+DBMS,指带有数据库并整合了数据库管理软件的计算机系统
MySQL数据库特点与应用
特点:
–适用于中小规模、关系型数据库系统
–支持Linux/Unix、Windows等多种操作系统
–使用C和C++编写,可移植性强
–通过API支持Python/Java/Perl/PHP等语言
典型应用环境:
–LAMP平台,与Apache HTTP Server组合
–LNMP平台,与Nginx组合
validate_password_policy策略
0或LOW | 只验证长度 |
1或MEDIUM(默认) | 长度;数字,小写/大写,和特殊字符 |
2或STRoNG | 长度;数字,小写/大写,和特殊字符 |
mysql服务相关参数
文件 | 说明 |
---|---|
/etc/my.cnf | 主配置文件 |
、var/lib/mysql | 数据库目录 |
默认端口号 | 3306 |
进程名 | 3306 |
传输协议 | TCP |
进程所有者 | mysql |
进程所属组 | mysql |
客户端数据存储流程
1、连接数据库服务器
2、建库
3、建表
4、插入记录
5、断开连接
mysql命令
进入数据库:
mysql [-h 服务器 -u用户名 -p密码 数据库]
quit或exit退出
常用mysql管理环境命令
1、DDL数据定义语言(create、alter、drop)
2、DML数据操作语言(insert、update、delete)
3、DCL数据控制语言(grant、revoke)
4、DTL数据时无语言(commit、rollback、savepoint)
库管理命令
show databases; #显示已有的库
use 库名; #切换库
select database(); #显示当前所在的库
create database 库名; #创建新库
show tables; #显示当前库下的表
drop databases 库名; #删除表
数据库的命名:
1、可以使用数字、字母、下划线,但不能纯数字
2、区分大小写,具有唯一性
3、不可使用指令关键字、特殊字符
表管理命令:
创建表:
create table 库名.表名(
字段1 字段类型(宽度) 约束条件,
字段n 字段类型(宽度) 约束条件,
……
字段n 字段类型(宽度) 约束条件,
);
desc 表名; #查看表结构
select * from 表名; #查看表记录
drop table 表名; #删除表
insert into 表名 values(值列表);
update 表名 set 字段=值;
delete from 表名;
常见的信息种类
1、数值型:体重、身高、成绩、工资
2、字符型:姓名、工作单位、通信住址
3、枚举型:兴趣爱好、性别
4、日期时间型:出行日期、注册时间
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1字节 | ·128~127 | 0~255 | 微小整数 |
SAMLLiNT | 2字节 | ·32768~32767 | 0~65535 | 小整数 |
MEDIUMINT | 3字节 | ·2^23~ 2^23-1 | 0~2^24-1 | 中整数 |
INT | 4字节 | -2^31 ~2^31-1 | 0~2^32-1 | 大整数 |
BIGINT | 8字节 | -2^63 ~2^63-1 | 0~2^64-1 | 极大整数 |
FLOAT | 4字节 | · | 单精度浮点数 | |
DOUBLE | 8字节 | 双精度浮点数 | ||
DECIMAL |
安装MySQL
1、下载RPM包
官网:https://dev.mysql.com/downloads/mysql/
选择适用于当前系统的bundle集合包
mysql-community-client //客户端应用程序
mysql-community-common //数据库和客户端共享文件
mysql-community-devel //客户端应用程序的库和头文件
mysql-community-embedded //嵌入式函数库
mysql-community-embedded-compat //嵌入式兼容数据库
mysql-community-embedded-devel //头文件和库文件作为MySQL的嵌入式数据库文件
mysql-community-libs //MySQL数据库客户端应用程序的共享库
mysql-community-libs-compat //客户端应用程序的共享兼容库
2、准备环境
删除/etc/my,cnf有mariadb的停止mariadb服务
systemctl stop mariadb #停止mariadb服务
rm -rf /etc/my.cnf #删除文件
rm -rf /var/lib/mysql/* #删除数据
rpm -e --nodeps mariadb-server mariadb #卸载mariadb
3、安装软件包
首先安装依赖包
yum -y install perl-Data-Dumper perl-JSON perl-Time-HiRes
mysql包内容:
./mysql-community-client-5.7.17-1.el7.x86_64.rpm
./mysql-community-common-5.7.17-1.el7.x86_64.rpm
./mysql-community-devel-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
./mysql-community-libs-5.7.17-1.el7.x86_64.rpm
./mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
./mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
./mysql-community-server-5.7.17-1.el7.x86_64.rpm
./mysql-community-test-5.7.17-1.el7.x86_64.rpm
安装软件包
rpm -Uvh mysql-community-*.rpm
或者将其打包成yum源
createrepo .
4、启动服务并初始化配置
systemctl start mysqld
grep 'temporary password' /var/log/mysqld.log #初始密码在mysqld.log下
mysql -uroot -p'初始密码' #用初始密码登录
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.17
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> //登录成功后,进入SQL操作环境
mysql> show databases; #需要修改密码,不然无法使用
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密码
密码的复杂度与validate_password_policy的值有关,默认为1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。如果我们不希望密码设置的那么复杂,需要修改两个全局参数:validate_password_policy与validate_password_length、validate_password_length默认值为8,最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。
mysql>set global validate_password_policy=0; //只验证长度
Query OK, 0 rows affected (0.00 sec)
mysql>set global validate_password_length=6; //修改密码长度,默认值是8个字符
Query OK, 0 rows affected (0.00 sec)
mysql> alter user user() identified by "123456"; //修改登陆密码
Query OK, 0 rows affected (0.00 sec)
5.7版本可以用,更高的版本有些不同如
mysql>set global validate_password.policy=0; //不是_policy,而是.
Query OK, 0 rows affected (0.00 sec)
mysql>set global validate_password.length=6; //.length
Query OK, 0 rows affected (0.00 sec)
修改密码不能使用set password=password('1234');
要用alter 指令
创建授权
mysql授权库和表信息
- user表,存储授权用户的访问权限
- db表,存储授权用户对数据库的访问权限
- tables_priv表,存储授权用户对表的访问权限
- columns_priv表,存储授权用户对字段的访问权限
基本用法
grant 权限列表 on 库名.表名 to@‘客户端地址’ identified by ‘密码’ [with grant option]; 【with grant option】是否有授权权限
//*.*代表所有库所有表
//授权设置存放在mysql库的user表
权限列表
- all:匹配所有权限
- select ,update,insert……
- select,update(字段1,,,,字段n)
客户端地址
- %:匹配所有主机
- 192.168.4.%:匹配一个网段
撤销用户权限
- revoke 权限列表 on 库名.表名 from 用户名@‘客户端地址’;