mysql函数

MySQL字符集问题

 ̄綄美尐妖づ 提交于 2020-02-29 05:42:22
初始化文件 首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在 数据库 实例、单个数据库、表、列等四个级别指定。对于使用者来说,一般推荐使用utf8编码来 存储 数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还和 用户 的程序 文件 的编码方式、用户程序和MySQL数据库的连接方式都有关系。 在MySQL5.5版本下,在my.cnf (my.ini)中指定数据库端字符集为UTF8,其中init_connect参数的作用是给每个普通用户的连接自动设置字符集(但是要注意的是,这个命令对具有super权限的用户是不生效的)。 [client] # 修改客户端默认字符编码格式为utf8 default-character-set = utf8 [mysqld] # 修改服务器端默认字符编码格式为utf8 character-set-server = utf8 # 在每个普通用户连接上来的时候都会触发执行 init_connect = 'SET NAMES GBK' 在客户端中查看配置生效 mysql> show variables like '%char%'; +--------------------------+---------------

MySQL binlog 格式(Mixed,Statement,Row Level)

我的未来我决定 提交于 2020-02-29 02:42:46
推荐用mixed,默认使用statement,基于上下文。 MySQL Replication复制可以是基于一条语句(Statement level),也可以是基于一条记录(Row level),可以在MySQL的配置参数中设定这个复制级别,不同复制级别的设置会影响到Master端的bin-log记录成不同的形式。 Row Level:日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。 优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以row level的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题。 缺点:row level下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update product set owner_member_id = ‘b’ where owner_member_id = ‘a’,执行之后,日志中记录的不是这条update语句所对应额事件(MySQL以事件的形式来记录bin-log日志)

mysql性能优化-慢查询分析、优化索引和配置

感情迁移 提交于 2020-02-28 23:35:29
目录 一、优化概述 二、查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三、配置优化 1) max_connections 2) back_log 3) interactive_timeout 4) key_buffer_size 5) query_cache_size 6) record_buffer_size 7) read_rnd_buffer_size 8) sort_buffer_size 9) join_buffer_size 10) table_cache 11) max_heap_table_size 12) tmp_table_size 13) thread_cache_size 14) thread_concurrency 15) wait_timeout 一、 优化概述 MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。 除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能

MySQL常用字符串函数

末鹿安然 提交于 2020-02-28 22:28:38
一、字符串截取函数 1. 返回字符串 s 的前 n 个字符 SELECT LEFT("abcd",2); ---ab 2. 返回字符串 s 的后 n 个字符 SELECT RIGHT("abcd",2); -- cd 3. 从字符串 s 的 start 位置截取长度为 length 的子字符串 SSELECT SUBSTRING("abcd", 1, 4) ; --abcd 下标从1开始 二、其他字符串函数 1. 去掉字符串 s 开始和结尾处的空格 SELECT TRIM(" abcd ") --abcd 2.将字符串转换为大写 UPPER("abc") --ABC 3. 去掉字符串 s 结尾处的空格 RTRIM("abc ") --abcd 4. 将字符串 s 的所有字母变成小写字母 LOWER("Abcd") --abcd 5. 字符串 s1,s2 等多个字符串合并为一个字符串 CONCAT("a","b","c") --abc 来源: CSDN 作者: love_Watermelon 链接: https://blog.csdn.net/qq_33036061/article/details/104559529

自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)

 ̄綄美尐妖づ 提交于 2020-02-28 03:22:28
准备知识 DBUtils模块 <<-----重点 DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口: PersistentDB :提供线程专用的数据库连接,并自动管理连接。 PooledDB :提供线程间可共享的数据库连接,并自动管理连接。 from DBUtils.PooledDB import PooledDB import pymysql POOL = PooledDB( creator=pymysql, # 使用链接数据库的模块 maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数 mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建 maxcached=5, # 链接池中最多闲置的链接,0和None不限制 maxshared=3, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。 blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错 maxusage=None, # 一个链接最多被重复使用的次数

Django回顾之_03_Model属性及后端配置

僤鯓⒐⒋嵵緔 提交于 2020-02-28 02:16:20
1. Django ORM O(objects):类和对象。 R(Relation):关系,关系数据库中的表格。 M(Mapping):映射。 Django ORM框架的功能: a) 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 b) 根据设计的模型类生成数据库中的表格。 c) 通过方便的配置就可以进行数据库的切换。 2. Django数据库配置 2.1 mysql命令回顾 登录mysql数据库: mysql –uroot –p 查看有哪些数据库:show databases 创建数据库:create database test2 charset=utf8; #切记:指定编码 使用数据库:use test2; 查看数据库中的表:show tables; 2.2 Django配置使用mysql数据库 修改settings.py中的DATABASES。 sqlite3改为mysql,以及用户名、密码 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.mysql', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'NAME': 'xxxx', # 使用的数据库的名字

存储过程/函数列表Mysql命令行

喜欢而已 提交于 2020-02-28 00:59:26
如何在mysql命令行(如 show tables; 查看存储过程或存储函数的列表 show tables; 或 show databases; 命令。 #1楼 以名称方式查看程序 select name from mysql.proc 下面的代码用于列出所有过程,下面的代码给出与显示过程状态相同的结果 select * from mysql.proc #2楼 要只显示您的: SELECT db, type, specific_name, param_list, returns FROM mysql.proc WHERE definer LIKE CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%')); #3楼 选择: SELECT * FROM INFORMATION_SCHEMA.ROUTINES #4楼 show procedure status; 使用此命令,您可以查看数据库中的所有过程 #5楼 Praveenkumar_V的帖子的一个变体: SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE'; SELECT `name` FROM mysql.proc WHERE db = 'dbname'

MYSQL查询出来的值太长,插入到数据库自动截断了

别来无恙 提交于 2020-02-27 09:48:08
如果是new 一个java对象,然后保存到数据库,如果保存的对象的字段超出数据库字段的大小限制,会报错; 如果是在java中先利用sql把数据查找出来,然后new一个java对象,再把对应的属性值放到java对象里面,利用对象保存,不会报错,只是保存的值可能不是正确的值,因为数值太长,在利用sql查找出来的时候已经自动截断,此时保存到数据库里面是截断后的数据... 只要是通过select查询出来的结果,结果集就可能被截断;如果先通过where条件判断,这个时候不会是什么值就会用什么值来做判断,然后到select显示数据的时候,如果超出长度,会被截断... 项目中有个这样的问题,搞了好久才知道是被mysql自动截断了... Mysql5.7中使用group concat函数数据被截断的问题完美解决方法: https://www.jb51.net/article/136480.htm 来源: oschina 链接: https://my.oschina.net/u/2331760/blog/3157933

MySQL-流程控制结构

北战南征 提交于 2020-02-26 11:57:48
流程控制结构 顺序结构 :程序从上往下依次执行 分支结构 :程序从两条或多条路径中选择一条去执行 循环结构 :程序在满足一定条件的基础桑,重复执行一段代码 分支结构 1、if函数 功能:实现简单的双分支 语法: if(表达式1,表达式2,表达式3) 执行顺序: 如果表达式1成立,则if函数就返回表达式2的值,否则返回表达式3的值 应用场景:任何地方 2、case结构 1 情况一、类似于Java中的switch语句,一般用于实现等值判断 2 语法: 3 case 变量|表达式|字段 4 when 要判断的值1 then 返回的值1或语句1; 5 when 要判断的值2 then 返回的值2或语句2; 6 ... 7 else 要返回的值n或语句n; 8 END case; 9 情况二、类似于Java中的多重if语句,一般用于实现区间的判断 10 语法: 11 case 12 when 要判断的条件1 then 返回值1或语句1; 13 when 要判断的条件2 then 返回值2或语句2; 14 ... 15 else 要返回的值n或语句n; 16 end case; 17 18 特点: 19 (1) 20 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end的外边 21 可以作为独立的语句去使用,只能放在begin end中 22 (2)

阿里11条mysql规范

余生颓废 提交于 2020-02-26 10:28:39
阿里11条mysql规范 转载 ~时光易逝~ 最后发布于2019-09-11 09:40:09 阅读数 101 收藏 展开 对于阿里的11条规范,虽然平时写sql的时候会注意到,但是还是要记录一下,编写sql的时候要注意,很实用,希望能帮助到想提升sql的速度的同学。 阿里开发强制要求的11条SQL编写规范 1.【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。 说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。 2.【强制】count(distinct col) 计算该列除NULL之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为NULL, 那么即使另一列有不同的值,也返回为0。 3.【强制】当某一列的值全是NULL时,count(col)的返回结果为0,但sum(col)的返回结果为NULL,因此使用sum()时需注意 NPE问题。 正例:可以使用如下方式来避免sum的NPE问题:SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table; 4.【强制】使用ISNULL()来判断是否为NULL值。 说明