mysql函数

MySQL 查询优化器(四)

别等时光非礼了梦想. 提交于 2019-12-03 04:02:08
2.5 LEFT JOIN查询 该测试主要用于测试LEFT JOIN与JOIN的处理逻辑上的差异,具体查询处理逻辑如下所示: JOIN:prepare阶段 setup_tables():同2.1测试。 setup_fields():同2.1测试。 setup_conds():同2.4测试。 JOIN:optimize阶段 simplify_joins():类似2.4测试。不同之处在于由于LEFT JOIN 使用的数据表不能为 NULL表,这是由是否有where条件过滤决定的。所以该过程会将LEFT JOIN外链接查询转化为多表联合查询操作,从而忽略LEFT JOIN的链接操作。 optimize_cond():同2.1测试。 make_join_statistics():同2.4测试。 choose_plan():同2.1测试。 greedy_search():同2.1测试。 best_extension_by_limited_search():同2.4测试。 get_best_combination():同2.4测试。 JOIN:exec阶段 以下同2.4测试。 Left join 嵌套( join )查询 , 执行SQL: SELECT student.std_id, std_name, std_spec, std_***, std_age, cur_name, cur

MySQL 查询优化器(三)

我的梦境 提交于 2019-12-03 04:01:51
2、复合查询 在进行复合查询时,为了体现外连接(left join、right join)和一般联合查询的区别,对student表增加了几条记录,而这几条记录在std_cur和course中都没有对应的记录。 2.1 多表联合查询 多表联合查询的逻辑处理过程如下所示: JOIN:prepare阶段 setup_tables():对查询涉及的表,逐个查看是否存在,设置变量相应的值,为查询准备。 setup_fields():对查询的字段进行检查,不同于之前1.1的检查,该过程中如果不指定具体数据表的字段的话,将会对所有查询的数据表进行检查。 setup_conds():检查查询的where条件中字段是否存在,同样如果不指定具体数据表的字段,将会对所有查询的数据表进行检查。(sql_base.cc:8379) JOIN:optimize阶段 simplify_joins():如果可以将外连接简化为内连接处理,那么简化为内连接处理。此外,如果查询为内连接或者外连接查询使用的表拒绝 NULL值,那么将ON条件添加到where条件中,将表的连接操作转化为联合查询处理。在该测试中,由于没有显示的JOIN ON操作,因此不做以上处理。 optimize_cond():优化查询的where条件,对等值条件调用build_equal_items()(sql\sql_select.cc:8273

mysql保存微信昵称

百般思念 提交于 2019-12-03 03:51:00
最近做得都是微信公众号的项目,第一次做,所以有些问题都记录一下 最初在保存用户微信昵称的时候都是直接保存的,后来朋友某些不规则昵称的时候才发现问题 用的是tp5.1,所以在表model里面设置了 1 public function setNicknameAttr($value){ 2 return base64_encode($value); 3 } 4 public function getNicknameAttr($value){ 5 return base64_decode($value); 6 } View Code 这样在保存和获取的时候都能直接转换了 有几个问题,一个是如果后台要按照昵称来搜索,会出现问题 mysql有一个from_base64()函数,来把php通过base64_encode()加密的字段解密,不过没找到tp5.1中有配合mysql的from_base64()的功能,只能用原生了 1 SELECT 2 * 3 FROM 4 table 5 WHERE 6 ( 7 from_base64 (nickname) LIKE "%find%" 8 AND `subscribe` = 1 9 ) 10 ORDER BY 11 `create_time` ASC View Code 第二个问题其实跟第一个类似,就是如果要用到加密过的字段来进行某些判断或搜索

一些 bypass WAF 技巧

∥☆過路亽.° 提交于 2019-12-03 02:56:33
也是之前讲课写的,现在搬运过来 --- WAF所处的位置 * 云WAF * 硬件WAF * 软件WAF * 代码级WAF WAF的绕过 1 架构层 1 对于云WAF,寻找真实ip 1 在子域名的ip段中找 2 信息泄漏 3 穷举ip 2 对于云WAF,利用同网段 3 WAF可能会进行两次URL解码 对输入进行两次url编码 4 编码问题 mysql默认的字符集是latin,因此在php代码里面设置的字符集为 utf-8,这只是客户端的字符集,因此存在字符集装换的问题utf-8—>latin,若传进来的字符集不是完整的字符,则会导致不完整的字符自动会忽略的问题,比如username=admin%c2 , 由于%c2不是一个完整的utf-8字符 因此传到Mysql 里面 自动忽略了,导致查出的是admin用户的数据,可以利用这个特性绕过。 为了便利性 牺牲安全性。(select * from admin where user=“Admin” 可以执行, mysql为了 使用的便利性 会允许一些 ‘错误’,比如 select * from admin where user=“Àdmin” 依然可移执行 2 资源限制角度 1 http请求body太大,WAF可能只检测前几k字节 3 协议层 1 协议未覆盖绕过 1 WAF没有实现对某种http协议的解析 2 文件包含,绝对路径绕过

mysql面试题

旧街凉风 提交于 2019-12-03 02:48:48
一、建表语句 1、使用数据库——USE 数据库名; 2、建表语句——以一个学生成绩表为例 CREATE TABLE test( id int not null, name char(20), score int, primary key(id), check(score between 0 and 100) )engine = Innodb; 约束语句: 设置默认值——DEFAULT '默认值' 设置非空——NOT NULL 设置唯一——UNIQUE(字段名) 设置主键——PRIMARY KEY(字段名) 设置外键——FOREIGN KEY(字段名) REFERENCES 表名(字段名) 设置CHECK约束——CHECK(字段名 BETWEEN xx AND xx) 或 CHECK(字段名=xx or ……) 或CHECK(字段名>xx AND ……) 约束类型。 具体语法分为:列级___约束、表级__约束 主键约束 :是用来唯一标识表中一个列的,一个表中主键约束只能有一个,但是一个主键约束中可以包含多个列,也称联合主键。 外键约束:用来建立两个表中列之间关系的,它可以由1列或多列组成。一个表可以有一个或多个外键。 唯一约束:也是用来唯一标识表中列的,与主键约束不同的是在一张数据表中可以有多个唯一约束。 检查约束:(该约束在表中是不起作用的,即仍然可以插入不符合条件的数据

mysql数据库的concat(),group_concat(),concat_ws()函数,三者之间的比较

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 01:46:40
今天在写项目的时候,看到同事使用group_concat()函数 和concat_ws()函数,这两个函数和普通的concat()函数之间到底有什么不同。 我使用的 数据库是mysql数据库。 GROUP_CONCAT函数: SELECT GROUP_CONCAT(MappPolicyNo, '') FROM lcmapPolicyNo WHERE PolicyNo ='MGU201909003'; 显示结果:1111111111,111111111112,112121212,123456789,2222222222,22222222222,2222222223,25345345,3333333333111,3453322222222,3453453453,44556666,45555555555555534,6666666666666 由此可见:这个函数是将这个保单下的多个分单号以逗号的方式进行拼接显示 SELECT GROUP_CONCAT(1,2,3,'') from dual; 显示结果:123 由此可见,这和concat函数的运行结果是相同的。 CONCAT 函数 SELECT concat(1,2,3,'') from dual; 显示结果:123 CONCAT_WS 函数 SELECT CONCAT_WS( '', ClientCFirstName,

Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句

不打扰是莪最后的温柔 提交于 2019-12-03 01:35:32
1.ROWNUM的使用——TOP-N分析 使用SELECT语句返回的结果集,若希望按特定条件查询前N条记录,可以使用伪列ROWNUM。 ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说ROWNUM是符合条件结果的序列号。它总是从1开始排起的。 使用ROWNUM时,只能使用<、<=、!=符号。 举例: student(学生)表,表结构为: ID char(6) --学号 name VARCHAR2(10) --姓名 --建表 create table student (ID char(6), name VARCHAR2(10)); --添加测试记录 insert into student values('200001','张一'); insert into student values('200002','王二'); insert into student values('200003','李三'); insert into student values('200004','赵四'); commit; --测试 SQL> select * from student; ID NAME ------ ------------------------ 200001 张一 200002 王二 200003 李三 200004 赵四 ⑴

20道shell编程面试题-中

匿名 (未验证) 提交于 2019-12-02 23:34:01
#!/bin/bash # chkconfig: 2345 64 36 # description: A very fast and reliable SQL database engine basedir='/usr/local/mysql' bindir='/usr/local/mysql/bin' pidfile='/data/mysql/data/mysql.pid' [ -f /etc/init.d/functions ] && . /etc/init.d/functions judge(){ RETVAL=$? if [ $RETVAL -eq 0 ];then action "$1 mysql" /bin/true else action "$1 mysql" /bin/false fi return $RETVAL } # start函数中注意:输出到空以及后台运行 start(){ if [ ! -f $pidfile ];then $bindir/mysqld_safe --defaults-file=$basedir/my.cnf &>/dev/null & judge start else action "MySQL is running" /bin/true fi } stop(){ if [ -f $pidfile ];then $bindir

varchar类型的数字比较大小

匿名 (未验证) 提交于 2019-12-02 23:34:01
varchar类型的数字在mysql中比较大小,或者用order by 排序的话,有时候会失效 最好的方法是转成float类型再进行比较 用cast(字段名 as 类型)函数做转换 order by cast(price as decimal) asc 注:在mysql中decimal即为float类型 文章来源: https://blog.csdn.net/myme95/article/details/90400090

Day 35 MySQL基础(三)

懵懂的女人 提交于 2019-12-02 23:32:36
目录 MySQL基础(二) 分组数据 创建分组 过滤分组 排序 limit 外键 表连接 MySQL基础(二) 分组数据 创建分组 分组是在select语句的group by子句中建立的. select vend_id, count(*) as num_prods from products group by vend_id 上面的select指定了两个列,vend_id包含产品供应商的id,num_prods为计算字段(用count(*)函数建立).group by子句指示MySQL按vend_id排序并分组数据.这导致对每个vend_id而不是整个表计算num_prods一次. 再具体使用group by子句之前,需要知道一些重要的规定: group by子句可以包含任意数目的列.这使得能对分组进行嵌套,为数据分组提供更细致的控制 如果在group by中嵌套了分组,数据将在最后规定的分组上进行汇总.换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据) group by子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数).如果在select中使用表达式,则必须在group by子句中指定相同的表达式 除聚集计算语句外,select语句中的每个列都必须在group by子句中给出 如果分组列中有null值,则null将作为一个分组返回