mysql基本原理及数据库语句

一、数据库相关介绍

1)文件存储缺点

2)数据库优点

层次模型

缺点:存储资源利用率低

网状模型

缺点:后期维护复杂,各个数据之间关系较为复杂

关系型模型 RDBMS Oracle MySQL 达梦

1)关系型数据库RDBMS

2)非关系型数据库NoSQL

2)时序数据库:PrometheusTSDB

二、MySQL相关

I/O thread:I/O线程,用于监听客户端连接

binlog:二进制日志,记录主服务器上的操作记录

I/O thread:I/O线程,用于读写操作,即监听并读取主服务上的二进制日志、并写到从服务器的中继日志上

sql thread:sql线程,用于将中继日志装换为sql语句、并运行

relay log:中继日志,连接master和slave,是同步的核心

参数名称

rpm

源码包

软件包

C7:mariadb、mariadb-server

C6:mysql、mysql-server

mysql、ncurses

服务名

C7:mariadb

C6:mysqld

 

进程名

mysqld

 

端口

TCP  3306

TCP  3306

配置文件

/etc/my.cnf

/etc/my.cnf

数据位置

/var/lib/mysql

安装目录下/data

启停管理

systemctl

安装目录下/bin

连接命令

mysql -uroot -p

安装目录下/bin/mysql  -uroot -p

上层:文件

中层:文件系统

下层:以二进制方式存储的数据块

数据库系统

上:表结构的数据体

中:存储引擎

下:文件

查看存储引擎,连接数据库后,输入:‘show engines;’,每种数据库都支持多种存储引擎,比如:

 守护线程:MySQL 不需要跟用户进行交互

 应用线程:MySQL 需要跟用户进行交互

注:创建主键或唯一键后自动生成对应索引

常用来作为查询条件的自段可以设置为索引

索引类型/约束

允许插入重复值

允许插入空值

普通索引(辅助索引)

允许

允许

唯一索引(辅助索引)

不允许

允许

主键索引(聚簇索引)

不允许

不允许

含义:把存储引擎存储的文件以二维表的形式展现出来

注:开始是美国国家标准局(ANSI)制定,现在是国际化标准组织(ISO)制定,一般都是由标准语句和各厂商的方言组成

问题描述:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解决方法:使用find命令在根下查找mysql.sock文件,将其软链接至/tmp下

#记录操作时间过长,超时的命令,帮助开发人员或运维人员,了解数据库的性能问题,来调整优化数据库

#对数据库的操作行为做记录,只要对数据库数据数据和结构造成变化的过程的都记录

 mysqlbinlog  --start-datetime  'yyyy-mm-dd  hh:mm:ss'  --stop-datetime 'yyyy-mm-dd  hh:mm:ss'  二进制日志  | mysql -uroot -p

列:mysqlbinlog  --start-datetime '2023-10-15 15:02:00' --stop-datetime '2023-10-15 15:09:00' mariadb-bin.000001 |mysql -uroot -p123456

10.数据库备份

二进制日志备份:                   #数据库备份逻辑工具

将产生这些数据的命令按照时间和大小记录在日志文件中

mysqldump命令备份:       #数据库备份命令

将现有数据库中的数据内容,逆向化为产生这些数据的命令

备份格式:mysqldump  --database   库名 > 备份文件名

恢复格式:mysql  <  备份文件名

--databases  #同时备份多个数据库

--all-databases      #备份服务器所有数据库

mysqlhotcopy(热复制):   相当于cp -a /var/lib/mysql/hongfu/   /tmp/

直接复制数据库文件进行备份

三、语言语法tmp

select  指定列名  from  表名

#指定列名

select  指定列名 from 表名 where 字段名1=值 and 字段名2=值;

语法:create view 视图名 as 查询语句;     #创建视图

          select * from 视图名;    #使用视图

语法:desc   表名     #查询表结构,包含表头、数据类型、非空约束、默认值约束以及其他

子类型

大小

用途

tinyint

1 byte

小整数

smallint

2 bytes

大整数

int

4 bytes

大整数

bigint

8 bytes

极大整数

float

4 bytes

浮点型

double

8 bytes

浮点型

decimal

可指定

小数值

子类型

大小

用途

char

0-255 bytes

定长字符串

varchar

0-65535 bytes

变长字符串

text

0-65535 bytes

长文本数据

blob

0-65535 bytes

二进制形式的长文本

注:定长字符串和变长字符串区别

char(10):长了截取前10个;短了补空格,适用于固定长度需求,比如学号

varchar(10):长了截取前10个;短了不补,此种方式比较节省空间,查询时无空格方式查询

子类型

大小

格式

用途

date

3 bytes

YYYY-MM-DD

日期值

time

3 bytes

HH:MM:SS

时间值

year

1 byte

YYYY

年份值

datetime

8 bytes

YYYY-MM-DD  HH:MM:DD

混合日期和时间

timestamp

4 bytes

YYYYMMDD HHMMSS

时间戳

语法:

insert into 表名  values(值1,值2….);    #默认表名后方有所有列名

insert into 表名 values(值1,值2…),(值1,值2…);

insert into 表名(字段名1,字段名2…)  values(值1,值2…)    #指定列和值需一一对应

 

语法:

update 表名 set  字段名=数值;    #此种方式设置该列参数值全部相同

update 表名 set  字段名=数值  where  字段名1=值1;

例如:update domain_manager set active=1 where username='jimmy';

语法:

delete from 表名;

delete from 表名 where 字段名=值;

     create   table  表名(

字段1   数据类型   非空约束   默认值约束,

 字段2   数据类型  非空约束   默认值约束,

 …

         字段n   数据类型  非空约束   默认值约束

      );

drop table 表名;

#注:如果不加first或者after 字段名,默认加在最后

 drop index 外键索引名 on  副表名;  #删除外键索引

create index 索引名 on 表名(字段名);   #创建普通索引MUL

create unique index 索引名 on 表名(字段名);     #创建唯一键索引

create index 索引名 on 表名(字段名1,字段名2);

drop  index  索引名  on  表名;

show  index  from  表名; 

select * from 主表名  inner join 副表名 on 主表.字段名=副表.字段名;   #查询两表相同部分

select * from 主表名  left join 副表名 on 主表.字段名=副表.字段名;     #查询以主表为主的联表信息

select * from 主表名  right join 副表名 on 主表.字段名=副表.字段名;   #查询以副表为主的联表信息

select 主表名.字段名1,主表名.字段名2,副表名.字段名1 from 主表名  right join 副表名 on 主表.字段名=副表.字段名;      #查询指定字段的联表查询

 

注:本机访问时可省略-P、-h

mysql> create user '用户名'@'登录地址' identified by '用户密码';

注:登录地址可以以%代替,表示在任何IP地址上登录,不包括本机;新用户登录、默认只拥有test数据库权限

mysql> drop user '用户名'@'登录地址';

$ mysql -h 服务器IP  -P端口 -u用户名 -p密码

 

mysql> grant all (privileges) on 数据库名.数据库表 to '用户名'@'登录地址';

 grant all on *.* to 'root'@'localhost';

注:数据库名和数据表名可以使用*代替,表示所有

mysql> show grants for '用户名'@'登录地址';

 show grants for 'root'@'localhost';

mysql> grant all on 数据库名.数据库表 to '用户名'@'登录地址' identified by '用户密码';

mysql> revoke all on 数据库名.数据库表 from '用户名'@'登录地址';

 revoke select on hf2306.* from 'root'@'localhost'

注:同时赋予多个权限时,以逗号相隔,替代all

三个真实的服务器标签,和两个读写分离和负载均衡的虚拟标签。

Mysql>create table a2 (

                ->id int unsigned not null auto_increment,        #字段要求为正数、且自增长、主键

                ->name char(30) not null default ‘’,                #字符型长度30字节,默认值为空格

                ->age int not null default 0,                                #字段默认值为0

                ->primary key (id));                                                #设置id为主键

  • 权限分类
    • all (privileges):所有权限。
    • select:读取权限。
    • delete:删除权限。
    • update:更新权限。
    • create:创建权限。
    • alter:修改权限。
    • drop:删除权限。
  • 取消授权
    • 语法
  • 创建新用户的同时直接授权
    • 语法
  • 查看用户的授权情况
    • 语法
  • 用户授权
    • 语法
  • 远程登录MySQL
    • 语法
  • 删除用户
    • 语法
  • 创建远程连接用户
    • 语法
  • 数据库连接
    • 可登录数据库用户控制:在mysql数据库下的user表中创建或删除用户以及对应的登录地址
    • 语法1:mysql -u 用户名  -p密码 -P 端口  -h 主机   #主机为用户登录IP地址
    • 语法2:mysql -u 用户名  -p密码 -S 套接字ps:套接字是一个文件、指定了登录地址和端口)
  • DCL语言
  • 联表查询(无外键)
  • 查看索引
  • 删除索引
  • 组合索引
  • 索引
    • 创建索引
      • 单列索引
  • 查看数据表相关信息
    • 查看数据库中所有表:show tables;
    • 查看表中所有数据:select * from 表名;
    • 查看表结构:desc 表名;
    • 查询表中键的情况:show index from 表名;
    • 查询创建表信息:show create table 表名;
  • 删除列:alter  table 表名 drop 字段名;
  • 修改列名:alter table 表名 change  原字段名  新字段名  数据类型 [约束 默认值];
  • 修改列的类型:alter table 表名 modify 字段名 数据类型 行约束;
  • 添加主键:alter table 表名  add primary key(字段1,字段2…);
  • 删除主键:alter table 表名 drop primary key;
  • 添加唯一键:alter table 表名  add unique key(字段1,字段2);
  • 删除唯一键:
    • show index from 表名;#显示约束键索引
    • drop index 约束字段名 on 表名;
  • 添加自增主键:alter table 表名  modify 字段名 数值类型 约束值 auto_increment;
  • 删除自增主键:alter table 表名  modify 字段名 数值类型 约束值;
  • 添加外键:alter table 副表名 add constraint  外键索引名 foreign key(字段名) references 主表名(字段名)    注:两个字段名必须相同,且主表字段值必须唯一
  • 删除外键:alter table 副表名 drop foreign key 外键索引名;
  • 修改数据表
    • 修改表名:alter table 原表名 rename 新表名;
    • 增加列:alter  table  表名  add  字段名  数据类型  约束值 first | after 字段名;
  • 删除数据表
  • 数据表级别的增删改查
    • 创建数据表
  • 数据库级别的增删改查
    • 查看所有数据库: show databases;
    • 创建数据库:create database 名字;
    • 删除数据库:drop database 名字;
    • 切换数据库:use 名字;
    • 更改数据库名:更改对应的目录名
      • /var/lib/mysql/目录名
      • /usr/local/data/目录名
  • DDL语言
  • 删除where后指定字段所在行
  • 删除表中所有数据
  • 删除数据记录
  • 修改指定行记录
  • 修改所有记录
  • 修改数据记录
  • 添加指定列
  • 同时添加多行数据
  • 添加所有列
  • 添加数据记录
  • 非空约束NULL(列约束之一)
    • NO:表示不能为空,如果添加数据记录时某列或者某字段未设定参数,有默认值约束时,以默认值约束参数为准;未设置默认值约束时,系统会自动填写当前类型的默认值
      • 字符串 :默认值是空字符串
      • 日期 :默认值是0000-00-00
      • 数值:默认值是0
    • YES:表示可以为空,如果添加数据记录时某列或者某字段未设定参数,系统自动填写当前参数为NULL,不受默认值约束影响
  • 默认值约束DEFAULT(列约束之一)
    • 非空约束为NO时,可以通过设置DEFAULT来更改对应数据类型的默认值,比如:数值类型原有默认值为0,可根据需求将某列或某字段的DEFAULT设为1,来更改参数的默认值
  • 日期和时间类型
  • 字符串类型
  • 数据类型用于语句中时,除数值类型外,都要用一对单引号包裹
    • 数值类型
  • 查询表结构
  • DML语言
  • 存储过程(stored procedure):是将一组SQL语句作为一个整体来执行的数据库对象,通过被调用来运行;和函数一样,是一条或多条SQL语句的集合,区别函数是已经定义好的、存储过程是用户自己定义的;
  • 视图:将查询结果集的sql语句封装成一张可视化的表,动态SQL语句、根据数据表的数据而更新
  • 查询指定列指定行数据
  • 单列:列名
  • 多列:列名1,列名2,…
  • 所有:*
  • 查询表中所有列数据
  • DQL(查询)语言
  • 中继日志:relay_log,主从结构中的同步的二进制日志(从服务器)
  • 二进制日志:log_bin,记录改变数据结构的语句(主服务器)
  • 错误日志:log-error,记录服务器启动,关闭,运行过程中错误的信息。
  • 查询日志:general_log,记录所有查询语句(不启用)
  • 慢查询日志:log-slow-queries,显示时间较慢的查询,数据库调优时可以使用此日志
  • 数据库日志分类
  • 问题解决
  • SQL名称大小写规则
    • 对语句关键字忽略大小写;
    • 对数据库名和表名严格区分大小写;
    • 对列名、列名别名忽略大小写;
    • 对变量名严格区分大小写;
    • 每句语句后面需有;结尾
  • DDL(数据定义语言):数据库(database)的增删改查、数据表(table)的增删改查
  • DML(数据操作语言):数据记录的增删改
  • DQL(数据查询语言):数据记录的查
  • DCL(数据控制语言):数据用户的权限,包含用户的创建、授权等
  • SQL语句(结构化查询语言)分类
  • 数据库文件
    • 表结构文件:*.frm
    • 数据文件:*.MYD
    • 数据表索引文件:*.MYI
  • 索引文件存储的key-value
    1. 主键索引的key是主键的值、value是改行的数据记录,主键索引文件中存储了索引值和该行所有数据
    2. 辅助索引的key是索引列的值、value是改行主键的值,辅助索引文件中只存储了索引值和id
  • 组合索引:在表中多个字段组合上创建索引
  • 作用:加快sql查询
  • 分类:
    1. 单列索引:在表中某个字段上创建索引
  • 索引
  •  MySQL存在缺陷:单用户请求无法分担至多核心调用
  • 垂直扩展:更换服务器硬件
  • 水平扩展:增加服务器节点,比如 amoeba
  • 缓存:利用 redis 集群添加缓存,减轻压力
  • 线程重用:默认开启
  • 分区(不同服务器中跑不同的数据库)、分表(将同一服务器中一个库分为两个不同的DBMS中,但是需要理清数据类型之间的关联)、读写分离
  •  MySQL优化方案
  •  MySQL:单进程多线程的工作模式,每个线程维持一个连接
  • MyISAM是mysql最开始时的默认存储引擎
    • 优:插入和查询数据较快
    • 缺:不支持事务、行级锁及外键约束等功能
  • InnoDB是5.5版本之后的默认存储引擎,对比MyISAM具有一些新特性:
    • 行级锁:对比之前的锁表,行级锁表示使用者编辑当前行时,对其锁定,除使用者外其余人不得查看和修改当前行内容;
    • 事务:一起执行多条sql语句,是一个整体,要成功则都成功;若失败都失败;
    • 外键:是表和表之间的关联
    • 缺点:插入数据和查询数据不如MyISAM快
  • Memory是内存式数据库
    • 优:数据存取速度非常快
    • 缺:数据不能持久化
  • 作用:
    • 存储数据
    • 建立索引
    • 展示数据
    • 更新数据
  •  存储引擎
  •  文件系统
  • 相关参数
  • 从服务器:
  • 主服务器:
  • 主从服务过程
  • 主从服务器原理
  • 原理
  • 版本
    • 社区版:开源、免费版,不提供官方技术支持
    • 企业版:开源、收费版,可以适用30天
    • 集群版:开源、免费版
    • 高级集群版:收费版
  • 表间约束(外键)
    • 副表添加外键,且添加外键字段的值必须在主表中存在
    • 无外键时,主表、副表可独立的增删改查
    • 添加外键后
      • 主表可随意添加,副表必须添加主表中存在的数据;
      • 主表和副表不能更新已关联字段的数据;
      • 先删除副表中关联数据,再删除主表中关联的数据
  • 唯一键约束
    • 作用:设置唯一键后的列字段值不能重复,但可以为空(优先级低于非空约束,只校验非空参数)
    • 设置:一个数据表中可以有多个唯一键,唯一键可以设置在一列或者多列上
  • 域约束(域完整性)
    • 非空约束
    • 默认值约束
  • 行约束(实体完整性)
    • 主键约束(建议在创建表时创建主键)
      • 作用:设置主键后的列字段值不能重复,插入的数据不能为空,优先级大于非空约束;设为联合主键的列字段值不能完全重复,比如将姓名和学号两列设为联合主键,可以姓名相同,同时学号不能相同;或者学号可以相同,但是姓名不能相同
      • 设置:一个表只有一个主键,但这个主键可以设置在多列(字段)上,设在多列上时称为联合主键
    • 自增主键
      • 作用:用于字段值自动增加,数据类型必须是数值,比如学号、序号相关参数
      • 设置:自增主键基础要求字段首先是主键,方才可设为自增主键
  • 关系型 数据库约束
  • 非关系型数据库种类
    • 键值存储:Redis(内存级数据库)
      • -持久化(将内存空间中的数据存储在外部存储介质中)
      • 每个单独的项都存储为键值对
    • 面向文档:MongoDB
      • 每个键与称之为文档的复杂数据结构配对
    • 宽列存储:HBase
      • 将数据列存储、取代行
  • 优势
    • 支持存储更多的格式:key-value形式、文档形式、列存储等,更灵活
    • 善于处理海量数据的维护和处理
    • 速度快、效率高,内存式存储,可做持久化(存储在硬盘中)
    • 扩展简单、高并发、稳定、成本低
  • RDBMS是所有现代数据库系统的基础
  • 代表:MySQL、SQLServer、Oracle等
  • 数据存储在被称为表(table)的数据库对象中
  • 表是由相关的数据项的集合,由行和列组成
  • 数据结构RDBMS  –  database  –  table  -   row | column  - 字段(属于自己的数据类型)
  • 文件存储在磁盘或硬盘中
  • 数据库分类(基于存储数据格式)
  •  数据库系统模型(数据库中存储的是元数据)
  • 支持加密技术、提供安全性保证
  • 支持多用户环境,允许用户并行访问和操作数据
  • 支持为不同用户设置不同权限
  • 数据共享
  • 读写速度太慢
  • 文件内容明文存储
  • 不能多人同时操作
  • 数据量大时索引效率低下
  • 多文件存储时数据关联差
  • 数据库诞生原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值