![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mysql
循序0010
这个作者很懒,什么都没留下…
展开
-
mysql锁(行锁,表锁,页面锁)
MySQL常用存储引擎的锁机制MyISAM和MEMORY : 表级锁(table-level locking)BDB采用页面锁(page-level locking)或表级锁:页面锁InnoDB:表级锁,默认为行级锁mysql有三种锁:行锁,表锁,页面锁。三种锁的对比:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死..原创 2020-06-08 10:43:20 · 2838 阅读 · 0 评论 -
MySQL 里面的锁
全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。使用场景:做全库逻辑备份(即,把库中所有表数据都select...转载 2019-04-22 10:31:33 · 199 阅读 · 0 评论 -
如何让mysql按固定的id或某字段数据排序(按实际顺序输出)
比如,一个这样的需求:按status 的状态:3,1,2,4 来排序,这时就可以考虑用到find_in_set()这个函数了:order by find_in_set(status,'3,1,2,4');当然,也可以用FIELD(status,'3,1,2,4')注意,find_in_set函数是全表扫描。 ...原创 2019-01-03 11:55:14 · 3203 阅读 · 0 评论 -
MYSQL Sql 中,如col_1字段为'',则用第二个字段col_2的查法:
#MYSQL Sql 中,如col_1字段为'',则用第二个字段col_2的查法:IF(IFNULL(col_1,”)=”,col_2,col_1)#当字段col_1为null、空字符串或空格字符串时,为false,返回null。# IF(IFNULL(col_1,'')='',col_2,col_1)SELECT IF(IFNULL(p.title,'')='',p.descripti原创 2018-01-07 16:24:38 · 1950 阅读 · 0 评论 -
Yii2 中要求按某个字段 固定值排序
Yii2 中要求按某个字段 固定值排序,比如:Productid | name1 | A2 | B3 | C4 | D I want ID 3 in first position:Productid | name3 | C1 | A2 | B4 | D这种情况,就可以用 上 orderBy field !如:$orderBy = (new \yii\原创 2018-01-22 20:10:07 · 3880 阅读 · 1 评论 -
MySQL utf8mb4 字符集,用于存储emoji表情
采用修改MySQL字符集的方案简单快捷:首先将我们数据库默认字符集由utf8 更改为utf8mb4,对应的表默认字符集也更改为utf8mb4 已经存储表情的字段默认字符集也做了相应的调整。SQL 语句如:# 修改数据库: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci转载 2017-09-22 09:25:22 · 481 阅读 · 0 评论 -
win机在局域网内搭建git服务器之实现相互访问mysql数据库
注意点:1.必须是同在局域网内的主机相互访问;2.在其中一台主机安装了mysql;3.设置mysql,授权需要被访问的局域网主机,以下是设置所有的主机:Grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;(%表示是所有的外部机器,如果指定某一台机,就将%改为相应的机器名;‘原创 2017-03-28 13:03:11 · 541 阅读 · 0 评论 -
MYSQL数据库设计规范与原则
MYSQL数据库设计规范 1、数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀; 除非是备份数据库可以加0转载 2017-02-15 14:31:15 · 2815 阅读 · 0 评论 -
mysql中tinyint、smallint、mediumint,int 和bigint 的区别
1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方即-128到127,无符号从 0 到 255 的整型数据。TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4很小的整数,存储大小为 1 字节。带符号的范围是-128到127。无符号的范围是0到255。SMALLINT[(M)] [UNSIGNED] [ZEROF原创 2017-02-15 14:20:11 · 13949 阅读 · 0 评论 -
Mysql事务隔离级别
mysql的事务级别:1)read uncommitted : 读未提交的数据(读未提交) :哪个问题都不能解决2)read committed :读取已提交的数据(读提交) :可以解决脏读 ---- oracle默认3)repeatable read :重读读取(可重复读) :可以解决脏读 和 不可重复读 ---mysql默认4)serializab...转载 2019-04-23 11:59:17 · 96 阅读 · 0 评论 -
Mysql的锁表,锁行记录
查看正在被锁定的的表show OPEN TABLES where In_use > 0;in_use:多少个线程在使用name_locked:是否被锁查询哪些线程正在运行show processlist;最关键的就是state列查看正在锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;查看等待锁的事务SELECT ...转载 2019-04-24 09:46:47 · 4193 阅读 · 0 评论 -
mysql幻读问题————间隙锁
回顾事务的基本要素(ACID);1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账...原创 2019-05-07 14:11:21 · 1511 阅读 · 0 评论 -
mysql8版本win安装
1.下载后安装2.在安装下创建 my.ini 配置文件 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\\web\\mysql-8.0.11 # 设置 mysql数据库的数据的存放目录,MySQL 8+ ...原创 2019-05-06 18:45:41 · 399 阅读 · 0 评论 -
MySQL预处理语句
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT。其用法PREPARE stmt_name FROM preparable_stmtEXECUTE stmt_name [USING @var_name [, @var_name] ...]{DEALLOCATE | DROP} PREPARE stmt_name-- ...原创 2019-04-30 11:45:51 · 1881 阅读 · 0 评论 -
MySQL数据库部分基础概念
1.MVCC 多版本的并发控制协议(Multi-Version Concurrency Control)(注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control) ;优点: 读不加锁,读写不冲突。2.快照读与当前读在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)...转载 2019-05-08 13:38:52 · 261 阅读 · 0 评论 -
再说mysql锁:mysql lock in share mode 和 select for update
select ... lock in share modeselect ... for update注意点:1.都在事务内起作用;2.所涉及的是行锁(即innodb引擎);3.保证当前session事务所锁定的行不会被其他session所修改(这里的修改指更新或者删除);4.select ... lock in share mode是共享锁,语句如:select * from t ...原创 2019-05-05 10:19:27 · 1384 阅读 · 0 评论 -
kill mysql的线程
mysql>show proccesslist ;mysql>kill progress_id; #proccess_id 即show proccesslist 查询出来的id但对于锁线程来说,其状态为sleep,所以找其id 用proccesslist看不出来,但可用sys系统库里的performance_schema (MySQL5.6开始默认启用,相比于设置为 off ...原创 2019-05-04 18:04:06 · 955 阅读 · 0 评论 -
MySQL crc32 & crc64函数 提高字符串查询效率
MySQL crc32 & crc64函数 提高字符串查询效率CRC全称为Cyclic Redundancy Check,又叫循环冗余校验。CRC32是CRC算法的一种,常用于校验网络上传输的文件。MySQL默认crc32,而crc64要求: MySQL 5.1, 5.5 and 5.6, Oracle distribution, Percona Server and MariaD...转载 2019-04-24 11:40:57 · 2713 阅读 · 0 评论 -
小实验,利用储存过程插入10w数据
小实验,利用储存过程插入10w数据create table `t` ( `id` int(11) not null, `a` int(11) default null, `b` int(11) default null, primary key (id), key `a`(`a`), key `b`(`b`))engine=Innodb;delimiter ;;cr...转载 2019-04-24 11:40:08 · 236 阅读 · 0 评论 -
The server quit without updating PID file (/usr/local/mysql[失败]localhost.localdomain.pid).
源码安装mysql-5.7.17,需要boost库依赖,下载后cmake命令执行cmake . \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_原创 2017-02-13 16:43:39 · 2571 阅读 · 0 评论 -
导出库里的所有表
【导出库里的所有表】select concat('truncate table ',table_name,';') into outfile 'd://truncatetable.sql' from information_schema.tables;原创 2016-12-02 13:09:58 · 637 阅读 · 0 评论 -
测试三张表,分别是用hash分区,现有表,和复合索引方法
用以下方法存入5000w数据 1.INSERT INTO SELECT语句SELECT INTO 和 INSERT INTO SELECT 两种表复制语句语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1注:要求目标表Table2必须存在,由于目标表Table2已原创 2016-11-19 10:15:52 · 477 阅读 · 0 评论 -
SQL group_concat()函数
语法:group_concat( [DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'] )mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||原创 2015-09-07 10:35:35 · 5990 阅读 · 0 评论 -
MySQL存储过程详解 mysql 存储过程
mysql存储过程详解1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一转载 2015-08-20 22:08:02 · 299 阅读 · 0 评论 -
shpinx-coreseek 安装和使用
shpinx-coreseek 安装和使用1.适用: a)大数据量b)对大文本字段的查询如:根据歌词搜歌曲,其中歌词属于大文本字段。新闻网站、电影等等2.Sphinx的使用流程:a)使用sphinx为数据表中字段创建索引b)启动sphinx服务器:提供索引的查询c)使用PHP连接SPHINX服务器查询关键词,然后sphinx返回查询到的记录的idd)PHP再原创 2015-09-06 11:37:16 · 673 阅读 · 0 评论 -
Mysql 获取表的comment 字段
查看获取表内字段注释:> show full columns from tablename;或是 show full fields from tablename;或是,在元数据的表里面看Select COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释from INFORMATION_SCHEMA.COLUMNSWher原创 2015-09-07 20:45:57 · 21364 阅读 · 1 评论 -
varchar和char区别
区别一,定长和变长char 表示定长,长度固定,varchar表示变长,即长度可变当所插入的字符串超出它们的长度时,视情况来处理,如果是严格模式,则会拒绝插入并提示错误信息,如果是宽松模式,则会截取然后插入。如果插入的字符串长度小于定义长度时,则会以不同的方式来处理,如char(10),表示存储的是10个字符,无论你插入的是多少,都是10个,如果少于10个,则用空格填满。而varcha原创 2015-08-18 21:01:59 · 3826 阅读 · 0 评论 -
mysql中,索引,主键,唯一索引,联合索引的区别
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保原创 2015-08-17 20:15:27 · 20708 阅读 · 2 评论 -
mysql 慢日志开启 及explain 分析sql语句
mysql 慢日志开启 在默认情况下,mysql是不会记录慢查询,需要我们指定启用慢查询日志,才会把执行速度慢的sql语句放入到日志.启动方式:{%bin%}/mysqld.exe --safe-mode --slow-query-log注:在默认情况下mysql认为慢查询的时间10s,为了看效果,我们把这个慢查询时间调整为1s 调整慢查询时间:① 先查原创 2015-08-31 16:10:05 · 1132 阅读 · 0 评论 -
优化MySQL数据库性能
优化MySQL数据库性能从以下方面做起:1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这转载 2015-08-14 09:11:48 · 290 阅读 · 0 评论 -
为什么字段尽可能用NOT NULL,而不是NULL
NULL为什么多人用?1、NULL是创建数据表时默认的,初级或不知情的或怕麻烦的程序员不会注意这点。2、很多人员都以为not null 需要更多空间,其实这不是重点。3、重点是很多程序员觉得NULL在开发不用去判断插入数据,写sql语句的时候更方便快捷。网上很多资料都有写:Mysql官网文档:“NULL columns require additional space in转载 2015-09-07 14:26:28 · 8606 阅读 · 2 评论 -
sql语句,几个容易混淆的关键词
1.count 和 sum的区别?count:求结果集中的记录数,即有多少条记录。sum: 求结果集中某个字段的值的和,即求字段值的总和。2.在LEFT JOIN 时,ON 的条件 和 WHERE 区别?ON : 关联表的时候就过滤,即结果集还没有取出来时过滤 –》 从第二张表取数据时就过滤WHERE : 关联表之后过滤,即结果集取出来后过滤 --》 联第二张表时原创 2015-11-08 22:56:11 · 591 阅读 · 0 评论 -
mysql批量update
mysql 默认没有像insert into 批量添加的函数,但可以间接的来处理数据量一大时,批量update。当然很多人会认为是通过循环执行每条update语句,但这样会使数据库性能下降,或堵塞。下面,请看一次性执行一条sql来update数据的两种方法:方法一:通过INSERT INTO .... ON DUPLICATE KEY UPDATE filed=VALUES(filed) [,f原创 2016-10-20 15:10:16 · 532 阅读 · 0 评论 -
MySQL优化-转
1.linux修改配置文件开启慢查询vim /etc/my.cnf[mysqld]slow-query-log = on # 开启慢查询功能slow_query_log_file = /usr/local/mysql/data/slow-query.log # 慢查询日志存放路径与名称long_query_time = 2 # 查询时间超过2s的查询语句### log-qu转载 2016-11-09 13:27:53 · 226 阅读 · 0 评论 -
binlog日志相关及恢复数据
/* * BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储。 * 开启binlog * 打开配置文件: * [mysqld] * log-bin=mysql-bin(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名) * 重新启动MSYQL服务。 * *///查看mysql binlog日志>sh原创 2016-10-17 08:48:52 · 1388 阅读 · 0 评论 -
mysql存储过程详解
1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希转载 2015-12-27 11:59:54 · 277 阅读 · 0 评论 -
MySQL 触发器简单实例
~~语法~~CREATE TRIGGER 触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update转载 2015-12-25 11:38:25 · 249 阅读 · 0 评论 -
获取下一个自增长id值的方法
注意:是获取下一个自动增长的id值,而不是现有表中最大的。方法一,使用show table status ,然后获取auto_increment的值,也可以获取每张表的表名。方法二,使用select max(id) + 1 from table 方法三,如果是刚插入记录,可以使用last_insert_id() + 1或last_insert_id(value+1)获得。或是mys原创 2015-09-22 16:04:21 · 1858 阅读 · 0 评论 -
mysql 数据备份出来
(1). 导出一张表mysqldump -u用户名 -p密码 库名 表名 > 文件名(如D:/a.sql)(2). 导出多张表mysqldump -u用户名 -p密码 库名 表名1 表名2 表名3 > 文件名(如D:/a.sql)(3). 导出所有表mysqldump -u用户名 -p密码 库名 > 文件名(如D:/a.sql)(4). 导出一个库 mysqldump原创 2015-09-22 14:55:52 · 386 阅读 · 0 评论 -
常用优化sql语句执行效率的方法
项目中优化sql语句执行效率的方法:1)尽量选择较小的列2)将where中用的比较频繁的字段建立索引3)select子句中避免使用‘*’4)避免在索引列上使用计算、not in 和5)当只需要一行数据的时候使用limit 16)保证单表数据不超过200W,适时分割表。针对查询较慢的语句,可以使用explain 来分析该语句具体的执行情况。原创 2015-10-24 21:40:16 · 6460 阅读 · 0 评论