一聚教程网:一个值得你收藏的教程网站

热门教程

mysql sql mode

时间:2022-07-02 09:13:58 编辑:袖梨 来源:一聚教程网

mysql sql mode
mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等!

查看默认的sql mode模式:
select @@sql_mode;
我的数据库是:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在此模式下面,如果插入的数据的长度大于定义的长度,那么就会报错!

set session sql_mode='REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI';
在这种模式下面:插入的数据的长度大于定义的时候,就会截取,并警告,但是可以插入进去
session表示只在本次中有效
global:表示在本次连接中不生效,而对于新的连接就生效

启用NO_BACKSLASH_ESCAPES模式,使反斜线成为普通字符,在导入数据时候,如果数据中有反斜线,启用这个模式是个不错的选择

启用PIPES_AS_CNCAT模式,将||看成是普通字符串

常用的sql mode:
sql mode值  说明
ANSI  'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE和ANSI组合',这种模式使语法和行为更符合标准的sql
STRICT_TRANS_TABLES  使用与事务和非事务表,严格模式
TRADITIONAL  也是严格模式,对于插入不正确的值给出错误而不是警告。用在事务时,只要发生错误就立即回滚


1、看机器配置,指三大件:cpu、内存、硬盘
2、看mysql配置参数
3、查系mysql行状态,可以用mysqlreport工具来查看
4、查看mysql的慢查询
依次解决了以上问题之后,再来查找程序方面的问题

my.cnf缓存优化
在 my.cnf 中添加/修改以下选项:

#取消文件系统的外部锁
skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题
skip-name-resolve


#索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量
key_buffer = 512M

#连接排队列表总数
back_log = 200
max_allowed_packet = 2M

#打开表缓存总数,可以避免频繁的打开数据表产生的开销
table_cache = 512

#每个线程排序所需的缓冲
sort_buffer_size = 4M

#每个线程读取索引所需的缓冲
read_buffer_size = 4M

#MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size = 64M

#缓存可重用的线程数
thread_cache = 128

#查询结果缓存
query_cache_size = 128M

#设置超时时间,能避免长连接
set-variable = wait_timeout=60

#最大并发线程数,cpu数量*2
thread_concurrency = 4

#记录慢查询,然后对慢查询一一优化
log-slow-queries = slow.log
long_query_time = 1

#关闭不需要的表类型,如果你需要,就不要加上这个
skip-innodb
skip-bdb

热门栏目