![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
文章平均质量分 53
记录本人MySQL学习知识
刘远山
日积月累
展开
-
MySQL触发器
触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。原创 2022-11-11 11:07:27 · 424 阅读 · 0 评论 -
MySQL锁问题
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的挣用外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。行锁特点:偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定颗粒度最小,发生锁冲突的概率最低,并发度也最高。InnoDB与MyISAM的最大不同有两点:一是支持事物;原创 2022-11-09 21:03:40 · 2262 阅读 · 0 评论 -
MySQL主从复制
复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。原创 2022-11-09 14:51:18 · 273 阅读 · 0 评论 -
MySQL日志
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制,就是通过该binlog实现的。二进制日志,默认情况下是没有开启的,需要到MySQL的配置文件中开启,并配置MySQL日志的格式。日志存放位置:配置时,给定了文件名但是没有指定路径,日志默认写入MySQL的数据目录。#编辑配置文件。原创 2022-11-08 21:15:51 · 450 阅读 · 2 评论 -
Mysql分布式之缓存(Memcache)的应用 09
思路1、查询单条数据详情时,根据key从缓存中读取,读取不到的查库并缓存一份2、在更新数据时,根据key从缓存中清除该条数据缓存实现查询单挑数据详情find.php查询单条数据详情时,根据key从缓存中读取,读取不到的查库并缓存一份<?phprequire "./RunDbPdo.php";require "./MmCache.php";$model = new RunDbPdo();$cache = new MmCache();$model->configFile =原创 2022-03-20 11:45:22 · 806 阅读 · 0 评论 -
Mysql分布式之原生分库(查、删)08
实例查找:根据取模查询分库数据删除:根据取模删除分库数据,异步执行消息队列后删除总数据库数据查询代码:find.php<?phprequire "./RunDbPdo.php";$model = new RunDbPdo();$model->configFile = './config/user.config.php';$user_id = 2;$d = $user_id % 2;$model->configFile = "./config/user{$d}.conf原创 2021-03-06 17:23:58 · 162 阅读 · 1 评论 -
Mysql分布式之原生分库(改)07
实例1、根据id取模后更新分表数据2、根据不同的取模选择不同的数据库3、关闭分库,切换总库4、插入redis消息队列,通过异步定时任务更新总表数据编辑edit.php<?phprequire './RunDbPdo.php';require './RedisQ.php';$model = new RunDbPdo();$model->configFile = './config/user.config.php';$redis = new RedisQ();if (is原创 2021-03-06 17:02:13 · 109 阅读 · 0 评论 -
Mysql分布式之原生分库(增)06
分库:1、在一台服务器上的数据库进行分表并不是最优的选择,因为操作的数据库还是在一台上,优化的效果并不是很明显2、分库在对多服务器上的数据库能有效的分担压力实现代码1、总库操作完毕,close()关闭总库切换分库前的必要准备操作2、取模形式将选择需要落入的分数据库与表<?php if(isset($_POST) && !empty($_POST)){ require './RunDbPdo.php'; extract($_POST); $user原创 2021-03-06 16:34:43 · 117 阅读 · 0 评论 -
Mysql分布式之原生分表(查、删)05
思路:查询:根据user_id取模查询数据所在分表数据,局限性在于只能根据id查询删除:先删除分表数据,后压入消息队列删除总表数据实现代码1、查询数据代码find.php<?phprequire "./RunDbPdo.php";$model = new RunDbPdo();$model->configFile = './config/user.config.php';$user_id = 3;$d = $user_id % 2;$sql = "select * fro原创 2021-03-06 15:26:01 · 239 阅读 · 0 评论 -
Mysql分布式之原生Redis队列保持主表、分表数据一致04
思路:1、根据id取模后更新分表数据2、这一步应该插入redis消息队列,通过异步定时任务更新总表数据3、压入队列4、循环出队列 当sql为空时break结束前循环,sql执行失败的写入文件日志,后期重新执行5、crontab定时执行消息队列实例crontab执行消息出队queque.php,写入总表<?php$file_dir = dirname(__FILE__);chdir($file_dir);require "./RedisQ.php";require './Run原创 2021-03-06 15:03:22 · 174 阅读 · 0 评论 -
Mysql分布式之原生分表(改)03
思路:1、根据id查询总表,将总表id对应的数据修改的同时,根据取模找出分表id对应的数据修改实现代码<?phprequire './RunDbPdo.php';$model = new RunDbPdo();$model->configFile = './config/user.config.php';if (isset($_GET) && !empty($_GET)) { extract($_GET); $user_id = isset($use原创 2021-03-06 14:27:15 · 134 阅读 · 0 评论 -
Mysql分布式之原生Redis消息队列使用02
“消息队列”是在消息的传输过程中保存消息的容器先进先出实例使用queque.php<?phprequire "./RedisQ.php";$redis_boj = new RedisQ();//消息入列list类型的使用//入列//$ret = $redis_boj->lpush('q_sql','insert');//$ret = $redis_boj->lpush('q_sql','update');//$ret = $redis_boj->lpush('原创 2021-03-06 13:36:23 · 158 阅读 · 0 评论 -
Mysql分布式之原生分表(增)01
分表思路1、根据具体业务来处理分表,具体是哪块业务影响了系统运行的效率2、不要盲目分表3、分表分为横向分表与纵向分表,这里只采用横向分表实现4、根据表id唯一性来取模进行分表实现代码逻辑代码index.php<?phprequire "./RunDbPdo.php";if (isset($_POST) && !empty($_POST)) { extract($_POST); //初始化变量 $username = isset($usernam原创 2021-03-06 12:23:46 · 189 阅读 · 0 评论 -
常用SQL技巧sql执行顺序、正则&内置函数
正则表达式(Regular Expression)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。原创 2021-01-02 22:11:49 · 128 阅读 · 0 评论 -
MySQL多种优化手段
开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。原创 2021-01-02 18:48:35 · 466 阅读 · 0 评论 -
MySQL索引原理与使用
构建二叉树的规则是,从根节点开始如34,往后的索引值比根节点大的放在右边77,比根节点小的放在左边5,依次类推下去形成一颗完成的二叉树。当查找3索引时,会从根节点34开始查找,发现比34小则从左边开始找,又发现比5小,则又从左边开始查找最终找到该索引。mysql官方对索引的定义为:索引(index)是帮助mysql高效获取数据的数据结构(有序)。原创 2021-01-02 12:26:22 · 507 阅读 · 0 评论 -
MySQL常用工具
此选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本,这种方式尤其方便。如在shell脚本中执行。由于服务器生成的二进制日志文件以二进制格式保存,所以如果想要检查这些文本的文本格式,就会使用到mysqlbinlog 日志管理工具。备份内容包含创建表,及插入表的SQL语句。mysqlshow 客户端对象查找工具,用来很快地查找存在哪些数据库、数据库中的表、表中的列或者索引。该mysql不是指mysql服务,而是指mysql的客户端工具。原创 2020-09-21 19:16:23 · 1530 阅读 · 0 评论 -
MySQL体系结构与存储引擎
和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应引擎,或者编写存储引擎。原创 2020-08-23 10:30:58 · 131 阅读 · 0 评论 -
连表查询同时统计子表的对应主表id的个数
SELECT rht_goods.id, ( SELECT count(rht_quality_test.id) FROM rht_quality_test WHERE rht_goods.id = rht_quality_test.pid ) numFROM rht_goods表结构CREATE TABLE `rht_goods` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `pid` int(10)原创 2020-06-17 15:44:36 · 620 阅读 · 0 评论 -
Linux上安装MySQL
掌握mysql安装、启动、登录mysql、开启mysql远程连接。原创 2020-01-24 12:06:30 · 2717 阅读 · 0 评论 -
用户和权限管理
1.创建用户并授予权限创建用户:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:CREATE USER '用户名' @ '登录是否允许远程登录' IDENTIFED BY ...原创 2019-12-19 23:34:42 · 166 阅读 · 0 评论 -
数据库的命名规范
数据库、数据表、视图、字段的命名全部使用小写,单词之间以下划线连接,参照《通则》索引、触发器、存储过程普通索引,使用前缀 idx_ ;唯一索引,使用前缀 uq_ ;外键,使用前缀 fk_示例:idx_driver_versionuq_driver_idfk_devic_idSQL语句的使用关键字全部使用大写,方便区分关键字和字段名使用sql进行操作 等号两边记得空格–查询数据SE...原创 2019-11-26 18:19:44 · 190 阅读 · 0 评论 -
MYSQL常用命令
MYSQL常用命令mysql表复制:mysql索引:索引:1.主键2.唯一3.普通表字段类型:mysql表复制:1.复制表结构create table student like user;2.复制表内容insert into student select * from user;mysql索引:1.查看索引show index from user\G2.普通索引1)创建cre...原创 2019-11-19 23:34:22 · 422 阅读 · 0 评论