mysql 提交修改_MySQL客户端、服务器端工具、sql_mode、存储引擎修改、事务的提交和回滚、隔离级别...
# ls /usr/local/mysql/bin
mysql mysqladmin mysqldump 客户端程序
mysqld mysqld_safe 服务器端程序
mysqlcheck 非客户端程序
客户端程序:
需要连接到服务器端才能运行的程序,连接方式(TCP/IP、IPC)
服务器端程序:
mysqld:
mysqld_safe :单实例环境下安全的mysql线程
mysqld_multi:一个MySQL服务器可以启动多个服务,比如一个监听3306,另一个监听3307。这只在特殊场景下才会用到。
非客户端程序:
mysqlcheck :不需要连接到服务器端执行的程序
MySQL服务器(mysqld,二进制安装方式)启动时读取配置文件的顺序:
# mysqld --verbose --help | grep -C 5 my.cnf
/etc/my.cnf => /etc/mysql/my.cnf => /usr/local/mysql/etc/my.cnf ~/.my.cnf
# mysqld --print-defaults
打印详细的配置信息,也就是my.cnf中mysqld段的配置信息。
这里凡是以“--”开头的配置,都可以在启动mysqld时手动指定,比如:
# runuser -s /bin/bash mysql -c '/usr/local/mysql/bin/mysqld --server-id=2'
剩余的不是以"--"开头的选项配置,有的可以在运行过程中修改,有些不可以。而且有些不能写入my.cnf配置文件,因为他们不是变量
MySQL的配置文件my.cnf属于多段配置,每段信息包含了对应程序的默认配置,比如有如下配置段:
[mysqld]
[mysqld_safe]
[mysqldump]
[client]
当我们设定表的某一个字段的长度为3,而我们却插入了10个字符进去,这时,我们也会执行成功,你知道吗?
MySQL的sql_mode(sql模型)就是用来设定服务器的工作模型的。起作用如下:
(1)可以兼容更多风格的mysql客户端,比如oracle管理员可以使用oracle操作习惯操作MySQL。
(2)可以限定MySQL的工作模式,比如严格模式、传统模式、宽松模式。Sql_mode值描述
ANSI更改语法和行为,使其更符合标准SQL。
STRICT_TRANS_TABLES如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。本节后面给出了更详细的描述。
TRADITIONALMake MySQL的行为象“传统”SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。下面以空的宽松模式演示:
mysql> SHOW VARIABLES LIKE 'sql_mode';
默认为空白,表示宽松模式
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode | |
+---------------+-------+
mysql> CREATE TABLE WOW(ID TINYINT,name CHAR(3));
mysql> INSERT INTO WOW VALUES (1,"tom"),(2,"jerry");
Query OK, 2 rows affected, 1 warning (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 1
未报错,只是给了警告
mysql> SHOW WARNINGS;
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Warning
Code: 1265
Message: Data truncated(截断) for column 'name' at row 2
mysql> SET sql_mode='strict_all_tables';
修改为严格模式
mysql> INSERT INTO WOW VALUES (5,"wangyu");
ERROR 1406 (22001): Data too long for column 'name' at row 1
直接报错
查看和修改MySQL变量:mysql> SHOW {GLOBAL|SESSION} VARIABLES LIKE 'var_name';
var_name大小写无所谓
mysql> SHOW {GLOBAL|SESSION} STATUS
静态修改变量:
datadir = /mydata/data
动态修改变量:
mysql> SET {GLOBAL|SESSION} variable_name='value';
修改全局配置,对当前会话无效,只对新的会话有效
修改会话配置,对当前会话有效,对全局配置无效。
动态修改:
GLOBAL:对当前会话无效,只对新建立的会话有效;
SESSION:仅对当前会话有效;
mysql> SHOW VARIABLES LIKE '%engine%';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| default_storage_engine | InnoDB |
| engine_condition_pushdown | ON |
| storage_engine | InnoDB |
+---------------------------+--------+
MySQL的存储引擎:
MyISAM:只支持表级锁,
InnoDB:支持到行级锁,并发性提高,但是维护成本也提高
查看存储引擎:mysql> SHOW ENGINES;
查看MySQL支持的存储引擎。
mysql> SHOW VARIABLES LIKE '%default_storage_engine%'\G
查看默认的
*************************** 1. row ***************************
Variable_name: default_storage_engine
Value: InnoDB
mysql> SHOW TABLE STATUS LIKE ‘table_name’\G
*************************** 1. row ***************************
Name: WOW
Engine: InnoDB
查看表的存储引擎
MySQL加锁方式:显示锁:
手动明确加锁,比如在备份的时候
LOCK TABLES table_name1,table_name2,... {READ|WRITE};
UNLOCK TABLES; 手动解锁
隐式锁:
在执行select等语句时自动加的锁
更改MySQL的存储引擎:mysql> use yy;
mysql> SHOW TABLE STATUS LIKE 'WOW'\G
*************************** 1. row ***************************
Name: WOW
Engine: InnoDB
# mysqldump -uroot -p --database yy > /tmp/yy.sql
mysql> DROP TABLE user;
# sed -i 's/ENGINE=InnoDB/ENGINE=MyISAM/g' /tmp/yy.sql # mysql -uroot -p
mysql> show table status\G
*************************** 1. row ***************************
Name: WOW
Engine: MyISAM
InnoDB事务演示:
MySQL的事务内置变量autocommit默认为ON,表示只要你写入的SQL语句一回车且能正确执行,这个事务就会自动提交到事务日志中。也就是MySQL会把每个SQL都当做一个事务。所以每次都会产生I/O,这就影响了性能。所以建议关闭。(对于MyISAM无效)
注意:这里指的是把每个SQL当做一个事务执行,才会影响性能。而不是每次提交事务才会影响性能。START TRANSACTION
手动启动事务
SAVEPOINT point_name
手动保存一个回滚点,使得可以rollback此状态
ROLLBACK [TO point_name]
提交之前手动回滚,如果没有跟回滚点就会回滚到最开始的状态
COMMIT
手动提交事务
下面是手动开始一个事务:记得将上面的存储引擎更改回来!
mysql> SHOW VARIABLES LIKE 'autocommit'\G
*************************** 1. row ***************************
Variable_name: autocommit
Value: ON
mysql> SET autocommit=OFF;
mysql> START TRANSACTION;
mysql> use yy;
mysql> SELECT * FROM user;
+------+------+
| ID | NAME |
+------+------+
| 1 | y1 |
| 2 | y2 |
| 3 | y3 |
+------+------+
mysql> DELETE FROM user WHERE ID=1;
mysql> SAVEPOINT del1;
mysql> SELECT * FROM user;
+------+------+
| ID | NAME |
+------+------+
| 2 | y2 |
| 3 | y3 |
+------+------+
mysql> DELETE FROM user WHERE ID=2;
mysql> SAVEPOINT del2;
mysql> SELECT * FROM user;
+------+------+
| ID | NAME |
+------+------+
| 3 | y3 |
+------+------+
mysql> ROLLBACK TO del1;
mysql> SELECT * FROM user;这样就回滚到只删除ID=1的状态了。
+------+------+
| ID | NAME |
+------+------+
| 2 | y2 |
| 3 | y3 |
+------+------+
mysql> COMMIT;
RDBMS的事务隔离级别:READ-UNCOMMITTED
读未提交
比如有A&B两个会话,同时操作同一个表yy.user,那么A会话做的所有操作,在提交前,
B会话都可以实时的看到。如果A总是需要ROOLBACK,那么就会对B会话产生严重干扰。
比如而B在已经确认tom用户是存在的,并且准备修改其ID号,但是就B回车前A删除了tom,
那么B的所有操作就是无效的。这就是幻读。
下面开启A&B会话,然后同时进行以下步骤:
mysql> SET autocommit=OFF;
mysql> SET tx_isolation='READ-UNCOMMITTED';
mysql> use yy;
mysql> select * from user;
+------+------+
| ID | NAME |
+------+------+
| 1 | tom |
| 2 | jar |
| 3 | app |
+------+------+
mysql> DELETE FROM user WHERE ID=1;
mysql> insert into user values(4,"web"); 这里未提交
B会话:
mysql> SELECT * FROM user;
这里立刻就可以看到A未提交的事务
+------+------+
| ID | NAME |
+------+------+
| 2 | jar |
| 3 | app |
| 4 | web |
+------+------+READ-COMMITED
读提交
这是SQL server等数据库的默认级别。只有A会话提交事务(commit)以后,
B会话才能看到A会话修改的内容。
依然会产生幻读,因为自己修改过的数据,可能由于其他事务的提交而导致在自己的事务内操作失败 。REPEATABLE-READ
可重读
MySQL默认的隔离级别
采用MVCC机制,使得会话在自己的事务内,看到的表永远是一样的,
不会受到其他会话的事务提交或未提交造成的影响。
但是提交的后的结果就不是此事务能解决的了,所以依然会有幻读。
MVCC机制:多版本并发控制,每个事务启动后,都会对当前数据库的数据做一个快照。
此事务只能看到快照内的东西。SERIALIZABLE
可串行化
当事务A占用一个资源时,事务B再访问时,就必须等待。这回极大的降低服务器性能。
mysql 提交修改_MySQL客户端、服务器端工具、sql_mode、存储引擎修改、事务的提交和回滚、隔离级别...相关推荐
- 怎么用mysql存储系统数据库_mysql数据库之基本操作和存储引擎
一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...
- mysql各版本的默认的存储引擎_Mysql常见的几种存储引擎
一.mysql的体系结构 整个MysqlServer有一下几部分组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服 ...
- mysql三种引擎_MySQL常见的三种存储引擎
原文连接:https://www.cnblogs.com/yuxiuyan/p/6511837.htmlhtml 简单来讲,存储引擎就是指表的类型以及表在计算机上的存储方式.数据库 存储引擎的概念是M ...
- MySQL:事务:开启、回滚与提交
这里,我们使用 set session autocommit=0,修改当前会话的事务提交方式.autocommit变量有两个可选值:ON与OFF,ON代表事务是自动提交,OFF代表不自动提交.roll ...
- 更改mysql数据库存储引擎_MySQL更改数据库表的存储引擎
mysql更改 1.查看表的原存储引擎 show create table user; 'user', 'CREATE TABLE `user` (/n `id` int(11) NOT NULL D ...
- mysql修行练级之字符集,数据类型与存储引擎选择
如何选择合适的存储引擎 几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive ...
- mysql 客户服务号_mysql客户端及服务端常用实用工具功能总结
一.MySQL服务器端实用工具程序: 1.mysqld:SQL后台程序(即MySQL服务器进程),客户端通过该服务连接服务器来访问数据库. 2.mysqld_safe:服务启动脚本.mysqld_sa ...
- mysql 查询分析器_mysql查询分析工具|mysql查询分析器(MySQL Query Browser)下载v1.1.20 官方版_ IT猫扑网...
mysql查询分析器又名为mysqlquerybrowser,是一款可以帮助用户快捷进行sql语句查询的工具,让你在编程的过程中更加方便的进行工作.有需要的朋友就来IT猫扑下载吧! MySQL Que ...
- mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
如果操作一下时报出错误:在数据库中执行 SET GLOBAL BINLOG_FORMAT = mixed; 执行后可通过SELECT * FROM information_schema.GLOBAL_ ...
最新文章
- [Silverlight] UI 测试/UI 自动化相关知识
- SpringCloud+Seata1.4+Nacos1.4+MySQL8实现分布式事务(客户端)
- ie11 不能调试 因为 ie的bug
- C#中各种数组的性能比较
- SAP License:不要让ERP沦为记账工具
- mpvue构建小程序(步骤+地址)
- JavaScript学习(五十八)—作用域链
- Qt浅谈之三十二二维码条形码解析
- 使用SpringBoot+RabbitMQ框架集成例程
- CityEngine引用别人做好的规则文件
- mysql等保测评命令_Mysql等保部分加固
- 相忘于江湖—记一位朋友
- 指针游戏1 最简单的指针游戏
- 检查xml格式是否正确
- python作用域的理解-python中对变量的作用域LEGB、闭包、装饰器基本理解
- pyltp的初始化报错:segmentor = Segmentor() # 初始化实例TypeError: __init__(): incompatible constructor argument
- 数值分析实验 实验3-1 牛顿下山法 python3实现
- 数学物理不好适合学计算机科学与技术吗,数学不好最好不要报这些专业
- ts_calibrate: Couldnt open tslib config file: No such file
- 网络数据帧中的(Jumbo Frame)巨帧、超长帧
热门文章
- centos 下安装mysql
- escape character.
- 如何从源码包安装软件?
- ubuntu下使用vi退出终端出现乱码的解决方案
- 使用 Request.QueryString 接受参数时,跟编码有关的一些问题
- 地方门户网站如何盈利?
- java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie解决方法
- 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题
- webpack 报错 No PostCSS Config found 解决方案。
- PyTorch系列入门到精通——DataLoader与Dataset