首页
关于
Search
1
在投射和录制时显示敏感信息写给TeamViewer,anydesk,向日葵
8,614 阅读
2
sublime 3155-3175 LICENSE
7,910 阅读
3
mysql存储过程&时间累加插入
7,754 阅读
4
永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
4,486 阅读
5
mysql-workbench中duration fetch的含义
4,460 阅读
ubuntu
linux
sublime
php
mysql
JS
CSS
其他
chrome
redis
登录
Search
标签搜索
mysql
curl
grep
journalctl
rename
You can't specify target table
only_full_group_by
Sub-process
警示
dropbox
mtr
curl抓取重定向
floor
intval
ceil
round
pixmap
adwaita
date.utc
gmmktime
五好的Book
累计撰写
194
篇文章
累计收到
31
条评论
首页
栏目
ubuntu
linux
sublime
php
mysql
JS
CSS
其他
chrome
redis
页面
关于
搜索到
48
篇与
的结果
2018-03-28
mysql全文索引
今天看了下 mysql 的文档, 突然发现以前停留的mysql不支持中文的全文索引的'经验'直到看到:从MySQL 5.7.6开始,MySQL提供了支持中文,日文和韩文(CJK)的内置全文ngram解析器才发现原来已经可以用mysql做中文的 全文索引了.而且经过测试相比与 like 效率要高很多全文索引的查询方法:在where关键词 后面 MATCH title AGAINST('漂亮的女人') 这样的语法结构例如这样的查询语句select * from arc where MATCH `title` AGAINST('漂亮的女人') 查询结果会把 包含 漂亮 漂亮的 ,的女人,女人 的结果都列出来, 当然匹配度最高的优先在前面.当然前提是已经做好了索引,才能用上面的方法创建索引的方法如下 :ALTER TABLE arc ADD FULLTEXT INDEX ft_title (title) WITH PARSER ngram; 下面是具体用法fulltext-search
2018年03月28日
1,167 阅读
0 评论
0 点赞
2018-03-26
mysql 常用的内置函数
Function and Operator Reference1 数学函数abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1间的浮点数,使用不同的seed N可以获得不同的随机数 round(x, D):四舍五入保留D位小数,D默认为0, 可以为负数, 如round(19, -1)返回20 truncate(x, D):截断至保留D位小数,D可以为负数, 如trancate(19,-1)返回10 sign(x): 返回x的符号,正负零分别返回1, -1, 0 pow(x,y)或者power(x,y) exp(x):e^x log(x):自然对数 log10(x):以10为底的对数 radians(x):角度换弧度 degrees(x):弧度换角度 sin(x)和asin(x): cos(x)和acos(x): tan(x)和atan(x): cot(x): 2 字符串函数char_length(str):返回str所包含的字符数,一个多字节字符算一个字符 length(str): 返回字符串的字节长度,如utf8中,一个汉字3字节,数字和字母算一个字节 concat(s1, s1, ...): 返回连接参数产生的字符串 concat_ws(x, s1, s2, ...): 使用连接符x连接其他参数产生的字符串 INSERT(str,pos,len,newstr):返回str,其起始于pos,长度为len的子串被newstr取代。 1. 若pos不在str范围内,则返回原字符串str 2. 若str中从pos开始的子串不足len,则将从pos开始的剩余字符用newstr取代 3. 计算pos时从1开始,若pos=3,则从第3个字符开始替换 lower(str)或者lcase(str): upper(str)或者ucase(str): left(s,n):返回字符串s最左边n个字符 right(s,n): 返回字符串最右边n个字符 lpad(s1, len, s2): 用s2在s1左边填充至长度为len, 若s1的长度大于len,则截断字符串s1至长度len返回 rpad(s1, len, s2): ltrim(s):删除s左侧空格字符 rtrim(s): TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)或TRIM([remstr FROM] str):从str中删除remstr, remstr默认为空白字符 REPEAT(str,count):返回str重复count次得到的新字符串 REPLACE(str,from_str,to_str): 将str中的from_str全部替换成to_str SPACE(N):返回长度为N的空白字符串 STRCMP(str1,str2):若str1和str2相同,返回0, 若str1小于str2, 返回-1, 否则返回1. SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len),MID(str,pos,len): 获取特定位置,特定长度的子字符串 LOCATE(substr,str), LOCATE(substr,str,pos),INSTR(str,substr),POSITION(substr IN str): 返回字符串中特定子串的位置,注意这里INSTR与其他函数的参数位置是相反的 REVERSE(str) ELT(N,str1,str2,str3,...):返回参数strN, 若N大于str参数个数,则返回NULL FIELD(str,str1,str2,str3,...): 返回str在后面的str列表中第一次出现的位置,若找不到str或者str为NULL, 则返回0 FIND_IN_SET(str,strlist):strlist是由','分隔的字符串,若str不在strlist或者strlist为空字符串,则返回0;若任意一个参数为NULL则返回NULL MAKE_SET(bits,str1,str2,...): 由bits的作为位图来选取strN参数,选中的参数用','连接后返回 3 日期和时间函数CURDATE(), CURRENT_DATE, CURRENT_DATE():用于获取当前日期,格式为'YYYY-MM-DD'; 若+0则返回YYYYMMDD UTC_DATE, UTC_DATE():返回当前世界标准时间 CURTIME([fsp]), CURRENT_TIME, CURRENT_TIME([fsp]): 用于获取当前时间, 格式为'HH:MM:SS' 若+0则返回 HHMMSS UTC_TIME, UTC_TIME([fsp]) CURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp]), LOCALTIME, LOCALTIME([fsp]), SYSDATE([fsp]), NOW([fsp]): 用于获取当前的时间日期,格式为'YYYY-MM-DD HH:MM:SS',若+0则返回YYYYMMDDHHMMSS UTC_TIMESTAMP, UTC_TIMESTAMP([fsp]) UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date):返回一个unix时间戳('1970-01-01 00:00:00' UTC至今或者date的秒数),这实际上是从字符串到整数的一个转化过程 FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format):从时间戳返回'YYYY-MM-DD HH:MM:SS' 或者YYYYMMDDHHMMSS,加入format后根据所需的format显示。 MONTH(date) MONTHNAME(date) DAYNAME(date) DAY(date),DAYOFMONTH(date):1-31或者0 DAYOFWEEK(date):1-7==>星期天-星期六 DAYOFYEAR(date): 1-365(366) WEEK(date[,mode]):判断是一年的第几周,如果1-1所在周在新的一年多于4天,则将其定为第一周;否则将其定为上一年的最后一周。mode是用来人为定义一周从星期几开始。 WEEKOFYEAR(date):类似week(date,3),从周一开始计算一周。 QUARTER(date):返回1-4 HOUR(time):返回时间中的小时数,可以大于24 MINUTE(time): SECOND(time): EXTRACT(unit FROM date):提取日期时间中的要素 SELECT EXTRACT(YEAR FROM '2009-07-02'); ##2009 SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');##200907 SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');##20102 SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.000123');##123 TIME_TO_SEC(time) SEC_TO_TIME(seconds) TO_DAYS(date): 从第0年开始的天数 TO_SECNDS(expr):从第0年开始的秒数 ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days),DATE_ADD(date,INTERVAL expr unit) DATE_SUB(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit) ADDTIME(expr1,expr2) SUBTIME(expr1,expr2) SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');##'2008-01-02 01:01:01.000001' SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');##'03:00:01.999997' 注意:时间日期的加减也可以直接用+/-来进行 date + INTERVAL expr unit date - INTERVAL expr unit 如: SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;##'2009-01-01 00:00:00' SELECT INTERVAL 1 DAY + '2008-12-31';##'2009-01-01' SELECT '2005-01-01' - INTERVAL 1 SECOND;##'2004-12-31 23:59:59' DATE_FORMAT(date,format): DATEDIFF(expr1,expr2):返回相差的天数 TIMEDIFF(expr1,expr2):返回相隔的时间 4 条件判断函数IF(expr1,expr2,expr3):如果expr1不为0或者NULL,则返回expr2的值,否则返回expr3的值 IFNULL(expr1,expr2):如果expr1不为NULL,返回expr1,否则返回expr2 NULLIF(expr1,expr2): 如果expr1=expr2则返回NULL, 否则返回expr2 CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END 当compare_value=value时返回result CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 当condition为TRUE时返回result SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;##'one' SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;##'true' SELECT CASE BINARY 'B' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;##NULL 5 系统信息函数 VERSION():返回mysql服务器的版本,是utf8编码的字符串 CONNECTION_ID():显示连接号(连接的线程号) DATABASE(),SCHEMA():显示当前使用的数据库 SESSION_USER(), SYSTEM_USER(), USER(), CURRENT_USER, CURRENT_USER():返回当前的用户名@主机,utf8编码字符串 CHARSET(str) COLLATION(str) LAST_INSERT_ID():自动返回最后一个insert或者update查询, 为auto_increment列设置的第一个发生的值 6 加密和压缩函数PASSWORD(str):这个函数的输出与变量old_password有关。old_password 在mysql5.6中默认为0。 不同取值的效果如下表 865265-20160224150201724-1500361171.png old_password=1时, password(str)的效果与old_password(str)相同,由于其不够安全已经弃用(5.6.5以后)。 old_password=2时,在生成哈希密码时会随机加盐。 MD5(str):计算MD5 128位校验和,返回32位16进制数构成的字符串,当str为NULL时返回NULL。可以用作哈希密码 SHA1(str), SHA(str):计算160位校验和,返回40位16进制数构成的字符串,当str为NULL时返回NULL。 SHA2(str, hash_length):计算SHA-2系列的哈希方法(SHA-224, SHA-256, SHA-384, and SHA-512). 第一个参数为待校验字符串,第二个参数为结果的位数(224, 256, 384, 512) ENCRYPT(str[,salt]): 用unix crypt()来加密str. salt至少要有两位字符,否则会返回NULL。若未指定salt参数,则会随机添加salt。 ECODE(crypt_str,pass_str):解密crypt_str, pass_str用作密码 ENCODE(str,pass_str):用pass_str作为密码加密str DES_ENCRYPT(str[,{key_num|key_str}]):用Triple-DES算法编码str, 这个函数只有在mysql配置成支持ssl时才可用。 DES_DECRYPT(crypt_str[,key_str]) AES_ENCRYPT(str,key_str[,init_vector]) AES_DECRYPT(crypt_str,key_str[,init_vector]) COMPRESS(string_to_compress):返回二进制码 UNCOMPRESS(string_to_uncompress) 7 聚合函数若在没使用group by时使用聚合函数,相当于把所有的行都归于一组来进行处理。除非特殊说明,一般聚合函数会忽略掉NULL. AVG([DISTINCT] expr): 返回expr的平均值,distinct选项用于忽略重复值 COUNT([DISTINCT] expr):返回select中expr的非0值个数,返回值为bigint类型 group_concat:连接组内的非空值,若无非空值,则返回NULL GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val]) MAX([DISTINCT] expr) MIN([DISTINCT] expr) SUM([DISTINCT] expr) VAR_POP(expr) VARIANCE(expr):同VAR_POP(expr),但是这是标准sql的一个扩展函数 VAR_SAMP(expr) STD(expr): 这是标准sql的一个扩展函数 STDDEV(expr):这个函数是为了跟oracle兼容而设置的 STDDEV_POP(expr):这个是sql标准函数 STDDEV_SAMP(expr):样本标准差 8 格式或类型转化函数FORMAT(X,D[,locale]):将数字X转化成'#,###,###.##'格式,D为保留的小数位数 CONV(N,from_base,to_base):改变数字N的进制,返回值为该进制下的数字构成的字符串 INET_ATON(expr):ip字符串转数字 INET_NTOA(expr):数字转ip字符串 CAST(expr AS type):转换数据类型 CONVERT(expr,type), CONVERT(expr USING transcoding_name): type可以为BINARY[(N)],CHAR[(N)],DATE,DATETIME, DECIMAL[(M[,D])],DECIMAL[(M[,D])],TIME,UNSIGNED [INTEGER]等等。transcoding_name如utf8等等
2018年03月26日
1,158 阅读
0 评论
0 点赞
2018-03-13
一个多重查询的SQL语句
好吧直接上sqlSELECT e.*, d.num FROM ( SELECT am.bid, money, cost, uid, cooperation , buyout, base, `into` FROM ( SELECT a.bid, money, uid, cooperation, buyout , base, `into` FROM ( SELECT bid, SUM(m.money) AS money, b.uid, cooperation , buyout, base, `into` FROM money_out m LEFT JOIN book b ON m.bid = b.id WHERE m.ctime >= 1518105600 AND m.ctime < 1518192000 AND m.money > 0 GROUP BY bid UNION SELECT bid, SUM(m.money) AS money, b.uid, cooperation , buyout, base, `into` FROM money_out_book m LEFT JOIN book b ON m.bid = b.id WHERE m.ctime >= 1518105600 AND m.ctime < 1518192000 AND m.money > 0 GROUP BY bid ) a GROUP BY bid ) am LEFT JOIN ( SELECT bid, SUM(cost) AS cost FROM wx_link m WHERE m.ctime >= 1518105600 AND m.ctime < 1518192000 GROUP BY bid ) c ON c.bid = am.bid ) e LEFT JOIN ( SELECT bid, SUM(num) AS num FROM arc m WHERE m.ctime >= 1518105600 AND m.ctime < 1518192000 AND status = 1 GROUP BY bid ) d ON e.bid = d.bid现在来解释下上面这段sql 的作用:首先他查询了 money_out(按章节消费记录), book(书), money_out_book(按本消费记录), wx_link(广告费用), arc(文章) 5张表每本书每天的消费记录总和,广告费用总和,更新书每天的字数
2018年03月13日
1,329 阅读
0 评论
0 点赞
2018-01-10
mysql 表结构同步
实例:线上数据库 mysql(RDS)本地数据 mysql本地功能更新,更改了表结构此时线上与本地的数据库的表结构就不一样了, 有没有同步的工具呢?这正是本文的重点下面重点结束同步的工具 Navicat for mysql这是一个收费软件, 可以免费使用14天.Linux mac windows 都有对应的客户端Linux的客户端其实也是wine版的,这里主要已此版做样例操作从官网下载后解压 进入目录如果没有安装wine需要运行 start_navicat 初始化安装包自带的wine,如果已经安装了wine就直接进入Navicat(我已经安装过了,直接进入该文件夹)然后如上图(在终端中)运行 wine Navicat.exe点击试用后进入主界面 然后把源库 和需要同步的库添加好输入相关数据库链接信息例如样例添加一个 root 和 rds 2个链接现在开始做数据结构同步的操作选择结构同步后设置好源与目标后 ,选择比对,该工具会进行对比分析对比后会出现下面的界面ddl对比 显示的 源与目标的create语句 部署 则是对比后需要同步的语句
2018年01月10日
2,323 阅读
1 评论
0 点赞
2017-10-14
mysql批量更新/插入时遇到有唯一值约束的情况
比如: update a set tab=replace(tab,'a','b') where a>0 当出现 tab字段有唯一值约束时,很可能该遇见会出错,那么正确的处理是 加一个关键字忽略重复值的更新 update ignore a set tab=replace(tab,'a','b') where a>0 insert ignore a select * from b
2017年10月14日
1,020 阅读
0 评论
0 点赞
1
...
7
8
9
10