mysql update语句

mysql锁场景及排查

限于喜欢 提交于 2020-01-21 15:15:46
1、查询长时间不返回: 在表 t 执行下面的 SQL 语句: mysql> select * from t where id=1; 查询结果长时间不返回。 一般碰到这种情况的话,大概率是表 t 被锁住了。接下来分析原因的时候,一般都是首先执行一下 show processlist 命令,看看当前语句处于什么状态。然后我们再针对每种状态,去分析它们产生的原因、如何复现,以及如何处理。等 MDL 锁如下图所示,就是使用 show processlist 命令查看 Waiting for table metadata lock 的示意图。 出现这个状态表示的是,现在有一个线程正在表 t 上请求或者持有 MDL 写锁,把 select 语句堵住了。 不过,在 MySQL 5.7 版本下复现这个场景,也很容易。如图 3 所示,我给出了简单的复现步骤。 session A 通过 lock table 命令持有表 t 的 MDL 写锁,而 session B 的查询需要获取 MDL 读锁。所以,session B 进入等待状态。这类问题的处理方式,就是找到谁持有 MDL 写锁,然后把它 kill 掉。但是,由于在 show processlist 的结果里面,session A 的 Command 列是“Sleep”,导致查找起来很不方便。不过有了 performance_schema 和

MySql数据库优化

…衆ロ難τιáo~ 提交于 2020-01-21 14:05:44
数据库优化,是一种综合性的技术,不是通过某一种方式让数据库效率提高很多,而是通过各个方面的优化,来是数据库效率明显的稳步的提高。 主要包括以下: 1、库表的设计优化(三种范式) 2、 库表添加合适的索引(普通索引+主键索引+唯一索引+全文索引) 3、 分表技术-水平分割与垂直分割 4、 读写分离(add/delete/update与select分开) 5、 多用存储过程和触发器(模块化编程) 6、 优化MqSql配置(配置最大并发数,调整缓存大小,my.ini) 7、SQL优化与慢查询 8、 定时清楚垃圾数据,定时进行碎片整理( MyISAM ) 除此之外,还有 MqSql服务器硬件升级 以下进行详细描述 题外话: 存储引擎: MyISAM : 查询速度快,插入速度快,但不支持 事务 ,碎片多; InnoDB :5.5版本后Mysql的默认数据库,支持事务,支持ACID事务,支持行级锁定; Memory :所有数据置于内存中,拥有极高的插入,适合频繁的数据更新,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失,不需要保存滴; 数据库三种模式结构/三级模式 外模式(用户):用户所能看到的数据视图,可通过数据库操纵语言对数据进行操作; 模式(概念):用户视图的最小并集,所有数据的逻辑结构和概念的描述; 内模式(物理):实际存储组合,内部视图

Oracle与Mysql的简单比较

给你一囗甜甜゛ 提交于 2020-01-21 13:04:31
Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。 Oracle支持大并发,大访问量,是OLTP最好的工具。 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。 4.Oracle也Mysql操作上的一些区别 ①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。 ②单引号的处理 MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。 ③翻页的SQL语句的处理 MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80 ④ 长字符串的处理

【Mysql】Linux RPM 方式安装 MySQL

 ̄綄美尐妖づ 提交于 2020-01-21 04:35:20
文章目录 Linux RPM 方式安装 MySQL 1 检查以前是否有安装Mysql,卸载 2 下载安装包 3 开始安装 4 重置数据库密码 5 修改mysql密码过期问题(无则跳过) 6 解决Your password does not satisfy the current policy requirements 7 增加远程登陆权限 Linux RPM 方式安装 MySQL (记得使用 root 账户进行操作,若使用普通用户,那么请修改相应文件夹权限) 1 检查以前是否有安装Mysql,卸载 检查以前是否装过 MySQL rpm -qa | grep -i mysql centos7默认会安装mariadb,也要卸载,避免冲突 [ root@hdp01 ~ ] # rpm -qa |grep -i mariadb mariadb-libs-5.5.60-1.el7_5.x86_64 [ root@hdp01 ~ ] # rpm -e --nodeps mariadb-libs 发现有的话就都卸载 删除老版本 mysql 的开发头文件和库 rm -fr /usr/lib/mysql #数据库目录 rm -fr /usr/include/mysql rm -f /etc/my.cnf rm -fr /var/lib/mysql 注意:卸载后/var/lib/mysql 中的数据及

本地远程连接腾讯云服务器Ubuntu的MySQL

做~自己de王妃 提交于 2020-01-21 01:49:45
1.安装MySQL 1.1、安装MySQL(若已安装直接跳到步骤2) sudo apt-get install mysql-server 1.2、安装完成后登陆mysql mysql -u root -p 1.3、登陆后查看版本 select version(); image 1.4、到此一切正常。 2.配置MySQL 2.1、用Navicat登陆MySQL。 (腾讯云Ubuntu 16.04为例) 2.2、修改/etc/mysql/mysql.conf.d/mysqld.cnf vim /etc/mysql/mysql.conf.d/mysqld.cnf 2.3、将bind-address = 127.0.0.1更改为bind-address = 0.0.0.0 2.4、保存退出 2.5、登陆MySQL //先输入密码登陆 mysql -root -p //然后选择数据库 mysql>use mysql; //选择root的账户host改为%,上面2.3中已改地址,这一步不确定是否必要 mysql> update user set host='%' where user='root'; //授权 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '填写root的密码' WITH GRANT OPTION; //更新权限

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

我是研究僧i 提交于 2020-01-21 00:16:47
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却 有一个缺点:不支持事务处理(transaction) 。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。 InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 MyISAM和InnoDB两者之间有着明显区别,简单梳理如下: 1) 事务支持 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交

小题大做之MySQL 5.0存储过程编程入门

独自空忆成欢 提交于 2020-01-21 00:15:10
MySQL 版本: 5.0.45 p hpMyAdmin 版本: 2.11.3 首先看 MySQL 5.0 参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([ proc_parameter [,...]]) [ characteristic ...] routine_body proc_parameter : [ IN | OUT | INOUT ] param_name type type : Any valid MySQL data type characteristic : LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT ' string ' routine_body : Valid SQL procedure statement 如果你对 MySQL 还不太熟悉的话,单单看这个语法结构当然不足以进行 MySQL 存储过程编程。我之前基本都是使用 MS SQL SERVER ,所以以下记录我熟悉 MySQL

MYSQL之视图、触发器、事务

北城余情 提交于 2020-01-20 22:18:51
一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+ | 1 | 张磊老师 | | 2 | 李平老师 | |

一 视图

情到浓时终转凉″ 提交于 2020-01-20 22:17:00
一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ 4 rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----------------+ | 1 | 张磊老师 | | 2 | 李平老师 |

MySQL之auto-increment相关处理

泪湿孤枕 提交于 2020-01-20 20:53:51
说明 本文主要用于阅读后记录,参考翻译MySQL 5.7说明文档章节,后续讨论中所使用的的数据库存储引擎为InnoDB。 目录 1.概述 2.术语 3.锁模式 4.AUTO_INCREMENT的使用说明 5.AUTO_INCREMENT 计数器初始化 6.参数查询与设置 1.概述 在数据库表的列中存在AUTO_INCREMENT的列时,配合锁机制可以极大地改进数据库的并发性和SQL的执行性能。 2.术语 “INSERT-like”语句 :任何在数据库表中产生了一行新数据的SQL语句都称为 “类插入” 语句。例如:INSERT, INSERT ... SELECT, REPLACE,REPLACE ... SELECT, and LOAD DATA等。它们可以分为以下三大类: a、Simple inserts:简单插入语句,它描述的是数据进行插入之前就 可以 判断出会有多少条记录插入到表中的情况。 b、Bulk inserts:批量插入语句,它描述的是数据进行插入之前 不可以 判断出会有多少条记录插入到表中的情况。这些批量插入的数据应该是都可以插进入表中的(自己添加)。 c、Mixed-mode inserts:混合模式插入语句,它描述的有两种情况: 情况1:在“Simple inserts”情况下时,如果待插入的行中存在部分行没有指定该auto-increment的值,或者为空