[sql] 同库表(结构)的备份和sql聚合&navicat使用

同库表的备份-赋值表结构和数据SQL语句

参考

有时候我们处理某个表时,需要先备份下这个表到当前这个库,然后再执行sql. 站在sql角度,就无需在mysqldump或者诸如导出sql的方式来备份了. 同库表的备份更简单

1.复制表结构及数据到新表

CREATE TABLE 新表 SELECT * FROM 旧表

2.只复制表结构到新表

CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.

方法二:(由tianshibao提供)

CREATE TABLE 新表 LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

INSERT INTO 新表 SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表

sql的autocommit

参考
执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)

mysql>  show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

使用navicat需要特别注意两点

  • 有一点特别需要注意, 我发现如果navicat登录后首句执行的不是set autocommit = 0; 则会自动autocommit,即使你第二句设置了auto,对于这个会话也不生效了.
  • 第二点是autocommit是针对会话的.

navicat快捷键

4.ctrl+r           运行查询窗口的sql语句
5.ctrl+shift+r   只运行选中的sql语句

正确使用navicat的姿势

SET autocommit = 0;

CREATE DATABASE maotai;

DROP DATABASE maotai;
ROLLBACK; #如果我后悔了即可
COMMIT;   #已确认sql没问题


一般执行sql我都用navicat来搞,一方面便于核实结果复制给对方反馈,执行起来也顺手一些,因为写sql会有自动提示. ,在一方面他执行时候有快捷键

mysql的事务

事务时怎么回事呢?

张三给李四转账500元。那么在数据库中应该是以下操作:

1,先查询张三的账户余额是否足够

2,张三的账户上减去500元

3,李四的账户上加上500元

以上三个步骤就可以放在一个事务中执行提交,要么全部执行要么全部不执行,如果一切都OK就commit提交永久性更改数据;如果出错则rollback回滚到更改前的状态。利用事务处理就不会出现张三的钱少了李四的账户却没有增加500元或者张三的钱没有减去李四的账户却加了500元。


MyISAM与InnoDB引擎的区别

InnoDB支持事务,MyISAM不支持
InnoDB支持外键,MyISAM不支持

sql聚合函数

- 用sql语句做数据汇聚,查出status 和 对应的总数, 按照状态码总数来排序
select status,sum(count) from log group by status;

posted @ 2018-02-23 17:38  mmaotai  阅读(402)  评论(0编辑  收藏  举报