命令记不住

登陆

MySQL 基础介绍

MySQL基础介绍

1.关系型数据库和非关系型数据库

1.RDBMS : MySQL Oracle PostgreSQL MSSQL

(1) 二维表的方式存储数据,比较严格的列结构和列约束(结构化)
(2) 可以实现多表之间的复杂关系
(3) 更加注重数据的一致性和完整性(安全)

2.NoSQL : MongoDB Redis ES

(1) 无结构化(K-V),或半结构化(JSON),对于存储是比较灵活
(2) 性能很好,扩展性非常好
(3) 对于分布式架构支持良好

2.Mysql的物理结构

  • 对于Linux操作系统来讲,他的物理层是同柱面的扇区.
  • 对于MySQL来讲,他是Linux系统之上的应用软件,他的物理层就是文件系统上的 特定 格式的文件
  • 什么的格式是由MySQL<存储引擎>决定的

1.存储引擎:

Myisam(ext2):
user.frm :表的列结构
user.MYD :数据行记录
user.MYI :表的索引

Innodb(ext3): 
t1.frm   :表列的结构
t1.ibd   :数据行记录和索引

2.innodb 引擎的段\区\页

页是Innodb引擎使用磁盘的最小物理单元

Innodb:
	  t1.frm   :表列的结构
	  t1.ibd   :数据行记录和索引

3.存储引擎层

  • 多种存储引擎,以插件形式支持.
  • 不同存储引擎就像,不同的文件系统一样,提供不同数据存取模式.
  • InnoDB: 一张表就是一个文件,IBD,一个段,区,数据页(16K)

1.Myisam(ext2)存储引擎:
一个表,分成三个文件存储

user.frm :表的列结构
user.MYD :数据行记录
user.MYI :表的索引

2.Innodb(ext3)存储引擎:

-rw-r----- 1 mysql mysql    8636 Mar 10 12:16 time_zone.frm
-rw-r----- 1 mysql mysql   98304 Mar 10 12:16 time_zone.ibd

time_zone.frm   :表列的结构
time_zone.ibd   :数据行记录和索引

3.MySQL基础管理

1.MySQL用户定义

USERNAME : PASSWORD
x86cloud@'白名单'  :  123

白名单: 允许白名单中的IP,可以通过x86cloud用户及123密码登录和管理MySQL
白名单支持定义的方式:

10.0.0.52 
10.0.0.%     #10.0.0.1~10.0.0.254/24
10.0.0.5%    #10.0.0.50 ~10.0.0.59
www.x86cloud.com
%        放开所有的IP都可以
10.0.0.0/255.255.254.0 

2.用户管理命令
1.创建用户:

create user x86@'10.0.0.%'   identified  by  '123';
select user ,host  from mysql.user;

2 删除用户:

drop user x86@'10.0.0.%';

3 修改用户密码

alter user x86@'10.0.0.%' identified by '456';

3.权限管理

1.语法:

grant       all     on    *.*      to  wordpress@'%'        identified by '123';

2.权限部分:

INSERT,
SELECT, 
UPDATE, 
DELETE, 
CREATE,
DROP, 
RELOAD,
SHUTDOWN, 
PROCESS, 
FILE, 
REFERENCES, 
INDEX, 
ALTER, 
SHOW DATABASES, 
SUPER, 
CREATE TEMPORARY TABLES, 
LOCK TABLES, 
EXECUTE, 
REPLICATION SLAVE, 
REPLICATION CLIENT, 
CREATE VIEW, 
SHOW VIEW, 
CREATE ROUTINE, 
ALTER 	ROUTINE, 
CREATE USER, 
EVENT, 
TRIGGER, 
CREATE TABLESPACE

all    #一般是给管理型的用户用的

all中不包含:
with grant option

3.作用对象

MySQL: 库和表

*.*   : 表示的是,对整个数据库下的所有的表都授权.
x86.* :表示的是,对x86下所有的表都授权
x86.t1 :只对 x86下的t1表进行授权

例子:需求,允许wordpress用户能从,10.0.0.0网段连接并管理wordpress库下的所有表,具备所有权限,并设置密码为123

公式:
grant       权限      on   作用对象    to  用户       identified by '密码';

8.0版本以前: 创建用户和授权都合到一起了,其实是不符合SQL92标准的

grant  all   on wordpress.* to wordpress@'10.0.0.%' identified by '123';

4. 标准的SQL92标准:

(1) 用户必须提前存在
(2) grant  all   on wordpress.* to wordpress@'10.0.0.%'

8.0以后授权:

create user wordpress@'10.0.0.%' identified by '123';
grant all on wordpress.* to wordpress@'10.0.0.%';

5. 生产授权案例:
生产库:

	管理员用户 : root身份
	授权管理员用户x86cloud,实现从10网段登录管理
	[(none)]>grant all on *.* to x86cloud@'10.0.0.%' identified by '123';

6. 查看用户具备的操作权限

show grants for x86cloud@'10.0.0.%';
show grants for root@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

7. 回收权限

revoke select on *.* from 'x86cloud'@'10.0.0.%';

4.MySQL启动流程

现在环境:5.7基于centos7的启动流程

systemd  -----> mysqld

1. /app/mysql/bin/mysqld ------
2. systemd  ----->  mysqld
3. /etc/init.d/mysqld -----> mysql.server  -----> mysqld_safe  ----->mysqld

mysqld_safe : /app/mysql/bin/mysqld_safe 
专用做调试使用

尽量使用正常方式关闭数据库,避免数据丢失

5.报错日志查看

  • 日志在什么位置:
  • 默认位置:数据路径下,叫db01.err
  • 可以添加参数,设置日志位置
  • log_error=/var/log/mysql.log
  • 分析带有 [ERROR] 行

6.开发规范

1.库定义

  • 库名字必须小写,不能有数字开头,不要超过16个字符 *****
  • 库名必须和业务有关
  • 建库时必须添加 字符集??
  • 生产中禁止DROP命令
  • 做变更类操作,需要提前备份

2.表定义

  • 表名不能大写,数字开头,16个字符串
  • 表名和业务有关
  • drop 语句禁止
  • 选择合适的数据类型
  • 必须要有主键
  • 列尽量非空约束
  • 减少外键约束
  • 必须设置存储引擎和字符集
  • 列必须要有注释
  • 对于非负数设置数据类型约束--无符号

3.数据类型作用为约束将来录入数据的规范

data_type:

  • 数字类
  • 字符串类
  • 时间类型
  • 二进制类

常用数据类型介绍:

数字类:
TINYINT   -128~127   ,1-256
INT       -2^31~2^31-1     2^32 正数

字符类型:
char(长度)  
varchar(长度)
enum('',''.....)

时间类型
datatime 
timestamp
datetime类型取值范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59
timestamp类型取值范围:1970-01-01 00:00:00 到 2037-12-31 23:59:59(经过测试得出范围为1970-01-01 08:00:01 到2038-01-19 11:14:07)

完整示例:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }


create table t1(col_name data_type ,.....);


USE x86;

CREATE TABLE stu(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '学号',
sname VARCHAR(20) NOT NULL COMMENT '学生姓名',
sage  TINYINT  UNSIGNED COMMENT '学生年龄',
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
telnum CHAR(11) NOT NULL COMMENT '手机号',
intime DATETIME NOT NULL DEFAULT NOW()
)ENGINE INNODB CHARSET utf8;
推荐阅读