视图可以修改表数据吗_为什么数据库可以连接但是载入表速度很慢

Q:

为什么数据库可以连接但是载入表速度很慢

A:

前段时间对数据库做了一点小改动,主要是aotocommit这里

涉及事务的自动提交,如果修过,可以尝试修过回去尝试下。

查看 MySQL 客户端的事务提交方式命令:select @@autocommit;

修改 MySQL 客户端的事务提交方式为手动提交命令:set @@autocommit = 0;

(注:0 表示手动提交,即使用 MySQL 客户端执行 SQL 命令后必须使用commit命令执行事务,否则所执行的 SQL 命令无效,如果想撤销事务则使用 rollback 命令。1 表示自动提交,即在 MySQL 客户端不在需要手动执行 commit 命令。)

MySQL 在自动提交模式下,每个 SQL 语句都是一个独立的事务。

注意:

1、手动设置set @@autocommit = 0,即设定为非自动提交模式,只对当前的mysql命令行窗口有效,打开一个新的窗口后,默认还是自动提交;

2、对于非自动提交模式,比如在命令行中添加一条记录,退出命令行后在重新打开命令行,之前插入的记录是不在的。(用select * from + 表名 验证一下就可以了)

mysql的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关闭掉,通过程序来控制,只要一次commit就可以了。

1,我们可以通过set来设置autocommit

mysql> set global init_connect="set autocommit=0"; //提示你用权限更高的财户来设置 ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec)  mysql> select @@autocommit; //查看一下autocommit的设置 +--------------+ | @@autocommit | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec) 

2,我们可以修改mysql的配置文件my.cnf来关闭autocommit

[mysqld] init_connect='SET autocommit=0' //在mysqld里面加上这些内容 

用第二种方法关,有一点要注意,连接mysql用户的权限不能大于启动mysql的用户的权限,不然init_connect='SET autocommit=0'根本不会启作用,也不会报任何错误,汗一个先。看以下实例

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.  mysql> select @@autocommit; //mysql是启动用户,关闭autocommit成功 +--------------+ | @@autocommit | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec)  mysql> Ctrl-C -- exit! Aborted zhangy@ubuntu:~$ mysql -uroot Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.5.2-m2-log Source distribution  Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.  mysql> select @@autocommit; //用root财户启动,不成功。 +--------------+ | @@autocommit | +--------------+ | 1 | +--------------+ 1 row in set (0.00 sec) 

这个会不会是mysql的bug呢?我在网上找了找这方面的问题,还真有。部分内容如下:

If a user has SUPER privilege, init_connect will not execute

(otherwise if init_connect will a wrong query no one can connect to server).

Note, if init_connect is a wrong query, the connection is closing without any errors

and next command will clause 'lost connection' error.

里面有一点说的很清楚If a user has SUPER privilege, init_connect will not execute,如果用户有更高级的权限,init_connect根本不会执行。

29824a096a8ce3fc5b67cb7166a32772.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值