mysql update语句

MySQL Flashback 闪回功能详解

只愿长相守 提交于 2019-12-22 03:05:38
1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据。在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。 目前MySQL的flashback功能是利用binlog完成的,第一个实现该功能的是阿里云的 彭立勋 , 他在MySQL 5.5版本上就已实现,并将其提交给MariaDB。 2. 闪回原理 原理:flashback工具(-B 参数)可对rows格式的binlog可以进行逆向操作,delete反向生成insert、update生成反向的update、insert反向生成delete。 MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。 MySQL引入binlog主要有两个用途/目的:一是为了主从复制;二是用于备份恢复后需要重新应用部分binlog,从而达到全备+增备的效果。 MySQL的binlog有三种格式: statement,基于SQL语句的模式,一般来说生成的binlog尺寸较小,但是某些不确定性SQL语句或函数在复制过程可能导致数据不一致甚至出错;

mysql面试题

孤街醉人 提交于 2019-12-22 03:04:26
1、 MySQL 的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 2、 mysql 中myisam与innodb的区别,至少5点 (1)、问5点不同; (2)、innodb引擎的4大特性 (3)、2者selectcount(*)哪个更快,为什么 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 (2)、varchar(50)中50的涵义 (3)、int(20)中20的涵义 (4)、mysql为什么这么设计 4、问了innodb的事务与日志的实现方式 (1)、有多少种日志; (2)、事物的4种隔离级别 (3)、事务是如何通过日志来实现的,说得越深入越好。 5、问了MySQL binlog的几种日志录入格式以及区别 (1)、binlog的日志格式的种类和分别 (2)、适用场景; (3)、结合第一个问题,每一种日志格式在复制中的优劣。 6、问了下MySQL 数据库 cpu飙升到500%的话他怎么处理? (1)、没有经验的,可以不问; (2)、有经验的,问他们的处理思路。 7、sql优化 (1)、explain出来的各种item的意义; (2)、profile的意义以及使用场景; 8、备份计划,mysqldump以及xtranbackup的实现原理 (1)、备份计划; (2)、备份恢复时间; (3

MySQL 20个经典面试题

我是研究僧i 提交于 2019-12-22 03:04:11
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

MySQL面试题收集

走远了吗. 提交于 2019-12-22 03:03:54
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

mysql基本面试题

爱⌒轻易说出口 提交于 2019-12-22 03:03:34
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

Mysql binlog二进制日志

冷暖自知 提交于 2019-12-22 03:03:07
Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement : 每一条会修改数据的 实际原sql语句 都会被记录在binlog中 。 优点: 不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能 。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。) 缺点: 由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此 还必须记录每条语句在执行的时候的一些上下文信息 ,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题). 使用以下函数的语句也无法被复制: * LOAD_FILE() * UUID() * USER() * FOUND_ROWS() *

MySQL数据库基础与操作(2)

痞子三分冷 提交于 2019-12-21 13:39:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> MySQL的存储引擎:存储引擎有很多,这里只介绍MyISAM和InnoDB MyISAM和InnoDB的区别 MyISAM:不需要事物,空间小,以查询访问为主 InnoDB:多删除、更新操作,安全性高,事务处理及并发控制 查看当前默认存储引擎 SHOW AVRIABLES LIKE 'storage_engine%'; 设置表的搜索引擎 语法:CREATE TABLE 表名(#省略代码)ENGINE=存储引擎; 例:CREATE TABLE `myisam` (id INT(4))ENGINE=MyISAM; DML语句--插入单条数据记录 语法:INSERT INTO 表名 [(字段名列表)] VALUES (值列表); 例:INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`) VALUES('123','黄小平',1,'13956799999','1996-5-8'); 注意:字段名是可选的,如省略则依次插入所有字段 多个列表和多个值之间使用逗号分隔 值列表和字段名列表一一对应 如插入的是表中部分数据,字段名列表必填 DML语句--插入多条数据记录 语法:INSERT INTO 新表(字段名列表)VALUES

Mysql常用命令大全 sql

社会主义新天地 提交于 2019-12-21 02:43:15
1、连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1、连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql> 2、连接到远程主机上的MYSQL。 假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样) 3、退出MYSQL命令 : exit (回车) 2、修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1、给root加个密码ab12。 首先在DOS下进入目录mysql\bin,然后键入以下命令 mysqladmin -u root -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、再将root的密码改为djg345。 mysqladmin -u root -p ab12 password

MySQL事务

余生长醉 提交于 2019-12-21 02:02:49
https://www.codercto.com/a/86576.html 默认情况,MySQL执行的SQL是autocommit的,SALAlchemy 查询语句也是 autocommit的,就是说如果没有明确声明事务的begin,每个单独的SQL都是一个独立的事务。但是在做交易系统时,比如银行给用户A转账给用户B时,有两个操作,从A里面减100,然后给B加100。这两个操作必须放在一个事务里面才行,否是就会出现钱扣了,对方又没到账的情况。 通过connection.begin 方法可以获取事务对象,执行完sql后,要把事务commit提交,如果出现异常,则把事务rollback,保证数据的最终一致性。 手动开始事务的几种方式: connection = engine.connect(close_with_result=True) trans = connection.begin() try: r1 = connection.execute("update account set blance-=100 where id=1") r1 = connection.execute("update account set blance+=100 where id=2") trans.commit() except: trans.rollback() raise 当然

MySQL UPDATE 更新

我是研究僧i 提交于 2019-12-20 19:57:18
MySQL UPDATE 更新 如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table_name SET field1 = new - value1 , field2 = new - value2 [ WHERE Clause ] 你可以同时更新一个或多个字段。 你可以在 WHERE 子句中指定任何条件。 你可以在一个单独表中同时更新数据。 当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。 通过命令提示符更新数据 以下我们将在 SQL UPDATE 命令使用 WHERE 子句来更新 runoob_tbl 表中指定的数据: 实例 以下实例将更新数据表中 runoob_id 为 3 的 runoob_title 字段值: SQL UPDATE 语句: mysql > UPDATE runoob_tbl SET runoob_title = '学习 C++' WHERE runoob_id = 3 ; Query OK , 1 rows affected ( 0.01 sec ) mysql > SELECT * from runoob_tbl WHERE runoob_id = 3 ; + -- -- -- -- --