mysql update语句

mysql批量提交的优化

∥☆過路亽.° 提交于 2019-12-06 14:43:21
. 背景 用户修改布局时,需要批量更新mysql的xxxx_layout_xxxx表。批量操作的数据量是2-30条/次。批量操作是这次项目在技术上比 较关键的一个点,之前批量操作做过性能上的测试,mysql端问题不大,7000+tps,Java端的效率有些差,有优化空间。 对批量的性能进行了测试,优化。过程如下 。 经测试,批量更新30条记录的时间是35ms。由于数据在mysql服务端中会有内存缓存,批量更新30条的时间用了35ms,感觉有些长,试图找出原因。 使用截包工具(这里用的ethereal),抓取mysql的数据包,下面是一次批量更新的数据包: 可以看出,批量更新时,每条update语句都去mysql请求了一次。并没有打包发给mysql。这种批量的效率肯定不会高。同样方法试了下oracle数据库,oracle驱动做的就很好,一次批量是打包在同一个请求中,是真正的批量提交,效率自然比mysql高。 找了些资料,发现mysql默认情况确实是不支持batch。为了解决上面的问题,需要给JDBC连接加上参数rewriteBatchedStatements=true,并且jdbc driver需要升级到5.1.8以上才支持这个参数。 增加参数rewriteBatchedStatements=true,driver版本升到5.1.17后,再次测试

ProxySQL--灵活强大的MySQL代理层

你。 提交于 2019-12-06 14:40:19
本文是我在学习和验证ProxySQL的过程中,从初识(对其机制猜想或凭几次命令的结果臆断其原理),到逐渐深入(模拟各种场景测试、抓包分析、与作者交流)过程中的 思路 和 方法 和 结论 的记录。 笔者初识proxysql的时候是1.2.1版本,现在几经演进,已经到了1.4.1版本,本文也几经修改,力求跟得上软件的最新进度。 ProxySQL项目网址 一、亮点 几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql 基于正则和client_addr的强大和灵活的路由规则 详细的状态统计,统计结果和pt-query-digest对慢日志的分析结果类似,相当于有了统一的查看sql性能和sql语句统计的入口(Designed by a DBA for DBAs) 自动重连和重新执行机制(auto-reconnect and automatic re-execution of queries using it's Connections Pool ):若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作 query cache功能:比mysql自带QC更灵活,可在 mysql_query_rules 表中依据 digest , match_pattern , client_addr 等维度控制哪类语句可以缓存 支持连接池

初识数据库

一世执手 提交于 2019-12-06 14:35:32
一.初识数据库 1.为什么要使用数据库? 将文件和程序存在一台机器上是很不合理的 操作文件是一件很麻烦的事情 2.所以出现了一个新的概念------数据库 数据库是一个可以独立在一台机器上工作的,并且可以给我们提供高效,便捷的方式对数据进行增删改查的一种工具. 3.数据库的优势 程序稳定性: 任意一台服务所在的机器奔溃了都不会影响数据和另外的服务 数据一致性 :所有的数据都是储存在一起,所有程序操作的数据都是统一的,这样就不会出现数据不一致的情况 并发:数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发网络的操作,不需要我们自己写socket 效率: 使用数据库对数据进行增删改查的效率高出我们自己处理文件很多 二,认识数据库 1. 什么是 数据(data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字,图片,图像,声音,语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 2.什么是 数据库(DataBase------DB) 数据库是存放数据的仓库,只不过这个仓库在计算机储存设备上,而且数据是按照一定格式存放的 数据库是长期存放在计算机内,有组织,可共享的数据结合 数据库中的数据按照一定的数据模型组织,描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享 3.什么是数据管理系统Data Base

关于mysql中的锁总结

谁说我不能喝 提交于 2019-12-06 14:00:56
一、锁的基本信息: 共享锁(s):又称读锁。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 排他锁(X):又称写锁。允许获取排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读锁和排他写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。 大家通常以为排他锁锁住一行数据后,其他事务就不能读取和修改该行数据,其实不是这样的。排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。mysql InnoDB引擎默认的修改数据语句:update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。 意向共享锁(IS)

MySQL学习笔记--1

♀尐吖头ヾ 提交于 2019-12-06 12:58:34
1:SQL语言的组成 DDL-主要用于定义数据库,表,视图,索引,触发器等,如DROP,CREATE,ALTER等语句 DML-主要包括对数据库增删改,INSERT,UPDATE,DELETE DQL-主要用于数据的检索,SELECT, DCL-主要用于用户访问权限的控制,如GRANT,REVOKE,COMMIT,ROLLBACK。 2:操作日志的文档输出 \T 日志文件的目录; 例如: \T /media/aaron/备份/MySQL_log.txt 3:char类型不保存空格,varchar类型保存空格 --显示当前服务器的版本 select version(); --显示当前的日期时间 select NOW(); select current_date(); select curremt_time(); --显示当前的用户 select user(); --数据库的创建 花括号表示必须的,方括号表示可选项,竖线表示选择 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] DB_NAME [DEFAULT] CHARACTER SET charset_name; --举例 create database if not exists imooc default character set utf8; --查看当前服务器下的数据库列表 SHOW

MySQL数据库~~~~ 完整性约束

北城以北 提交于 2019-12-06 12:54:07
1. not null 与 default not null : 不可空 default : 默认值 例: create table t1(id int not null default 2); 2. unique unique : 唯一属性 例: create table t1(name varchar(20) unique); ​ create table t1(name varchar(20), constraint uk_name unique(name)); 联合唯一: create table t1(name varchar(20),host varchar(15), unique(name,host)); 3. primary key primary key : 主键,字段不为空切唯一 主键 primary key是 innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键。 create table t1(id int primary key); 4. auto_increment auto_increment: 自增属性,默认起始位置为1,步长也为1. create table t1(id int primary key auto_increment); 5. foreign key foreign key : 外键

1000行MySQL学习笔记,不怕你不会,就怕你不学!

旧时模样 提交于 2019-12-06 12:47:49
🔸Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 🔸连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 🔸数据库操作 -- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version()-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE PATTERN ]-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 🔸表的操作 *请左右滑动阅览 -- 创建表 CREATE [

mysql的外键探讨

こ雲淡風輕ζ 提交于 2019-12-06 11:12:56
在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强。关于完整性,关连性我举个例子,大家就会明白了。 有二张表,一张是用户表,一张是订单表: 1,如果我删除了用户表里的用户,那么订单表里面根这个用户有关的数据,就成了无头数据了,不完整了。 2,如果我在订单表里面,随便插入了一条数据,这个订单在用户表里面,没有与之对应的用户。这样数据也不完整了。 如果有外键的话,就方便多了,可以不让用户删除数据,或者删除用户的话,通过外键同样删除订单表里面的数据,这样也能让数据完整 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作; 二,使用foreign key,遵守以下几点规则 1,有外键约束的表,必须是innodb型 2,外键约束的二个表,本来就相关系的表,并且要有索引关系,如果没有,创建外键时也可以创建索引。 3,不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度。 4,mysql外键的名子在数据库内要是唯一的 三,创建foreign key的语法规则 外键的定义语法: [CONSTRAINT

MySQL外键关联(创世纪新篇)

耗尽温柔 提交于 2019-12-06 11:11:17
数据库外键 01.mysql> show create table country\G 02.*************************** 1. row *************************** 03. Table: country 04.Create Table: CREATE TABLE `country` ( 05. `country_id` smallint(5) unsigned NOT NULL auto_increment, 06. `country` varchar(50) NOT NULL, 07. `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 08. PRIMARY KEY (`country_id`) 09.) ENGINE=InnoDB DEFAULT CHARSET=utf8 10.1 row in set (0.01 sec) 11. 12.mysql> show create table city\G 13.*************************** 1. row *************************** 14. Table: city 15.Create Table:

MySQL死锁及解决方案

强颜欢笑 提交于 2019-12-06 10:31:35
一、MySQL 锁类型 1. MySQL 常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 2. 各种锁特点 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 3. 各种锁的适用场景 表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用 行级锁则更适合于有大量按索引条件并发更新数据,同时又有并发查询的应用,如一些在线事务处理系统。 二、 MySQL 死锁产生原因 所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。