标签:sql注入 进制 长度 合并 alt 数据类型 单列 出现 code
相当于将一个变量名和一个sql语句绑定,可通过变量名重复调用该sql语句
sql语句的结果一般为一个临时表,所以视图也被称为动态的临时表
-- create a view
create view v_name as sql_statement
-- delete a view
drop view v_name
-- alter a view
alter view v_name as sql_statement
-- use view
select * from v_name
一系列sql语句的集合
-- create a procedure
delimiter //
create procedure func_name()
BEGIN
select * from tb;
END //
delimiter ;
-- call a procedure
call func_name()
参数类型
in: 用来向存储过程传入值
out: 用来接收存储过程的返回值
inout: 既可向存储过程传入值,也可以接收返回值
delimiter \create procedure p1(
in i1 int,
in i2 int,
inout i3 int,
out r1 int,
)
BEGIN
declare temp1 int;
declare temp2 int default 0;
set temp1 = 1;
set r1 = i1 + i2 + temp1 + temp2
set i3 = i3 + 100
-- 一个存储过程,只能存在一个结果集(临时表)
select * from tb;
END \delimiter ;
-- 执行过程
set @t1 = 4;
set @t2 = 0;
call p1(1,2,@t1,@t2);
select @t1,@t2;
-- 删除存储过程
drop procedure proc_name;
BeGIN
declare i int default 0;
if i = 1 then
select 1;
elseif i = 2 then
select 2;
else
select 3;
end if;
END
BEGIN
declare num int;
set num = 0;
while num < 10 do
select num;
set num = num + 1;
end while;
END
BEGIN
declare num int;
set num = 0;
while num < 10 do
select num;
set num = num + 1;
end while;
END
BEGIN
declare i int default 0;
loop_exam : loop
select i;
set i = i+1;
if i > 5 then
leave loop_exam;
end if
end loop
END
mysql级别防止sql注入
delimiter \drop procedure if exists proc_sql \create procedure proc_sql()
BEGIN
declare num int;
set num = 11;
set @num = num;
prepare prod from "select * from tb2 where nid>?";
execute prod using @num; -- 只能用@name的参数
deallocate prepare prod;
END \delimiter ;
创建后,当mysql触发指定事件时,会自动执行触发器
before/ after (决定触发器的执行顺序)
insert/ delete/ update (决定触发器的触发条件)
NEW: 可接受传入数据的对象,例如NEW.column_name
OLD: 接受被删/改列数据的对象,列如OLD.column_name
create trigger tri_before_insert_tb1 before insert on tb1 for each row
BEGIN
statement
END
将两个或多个事件合成一个整体,这个整体称为事务
delimiter \create prodedure p1(
out p_return_code tinyint
)
BEGIN
declare exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END
declare exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END
start transaction
delete from tb1;
insert into tb2(num) values("seven");
commit
-- success
set p_return_code = 0;
END \delimiter ;
-- 有关字符串拼接的函数
char_length(str)
concat(str, str2, ...) -- 连接多个字符串
concat_ws(seperator, str1, str2, ...) -- 用特定字符连接多个字符串
-- 数字有关的函数
conv(N, from_base, to_base) -- 进制转换
format(X,D)
-- X为以3位分隔的数字,例123,321.2
-- D为小数点后保留的位数
insert(str, pos, len. newstr)
-- 具有替换功能
-- 序号从1开始
-- pos :标记插入字符串的首个位置
-- len :替换长度
-- newstr :需要替换的字符串
-- 提取指定字符有关的函数
instr(str, substr) -- 返回substr首次出现的位置
left(str, len) -- 返回从左开始的len个字符
right(str, len) -- 返回从右开始的len个字符
substring(str, start, len) -- 取字符串中的相应字符
-- 变换字母大小写有关的函数
lower(str) -- 将英文字母变大写
upper(str) -- 将英文字母变小写
-- 清洗数据有关的函数
ltrim(str) -- 移除左边的空格
rtrim(str) -- 移除右边的空格
trim(str) -- 移除两边的空格
trim(leading "x" from "xxxarnoxxx") -- 左
trim(trailing "x" from "xxxarnoxxx") -- 右
trim(both "x" from "xxxarnoxxx") -- 两边
-- other
locate(substr, str, pos) # 获取索引的位置
repeat(str, count) # 重复打印
replace(str, from_sbustr, to_substr)
reverse(str)
space(n) -- 生成由n个空格组成的字符串
delimiter \create function f1(
i1 int;
i2 int;
return int
)
BEGIN
declare num int;
set num = i1 + i2;
return(num);
END
delimiter ;
-- call
f1();
-- delete
drop function func_name;
-- create
index ix_name(列名); or create index ix_name on 表(列名);
-- drop
drop ix_name on tb1;
-- show
show index from tb1;
-- create
unique ix_name(col_name); or create unique index ix_name on tb1(col_name)
-- delete
drop unique index ix_name on tb1;
-- show
show index from tb1;
-- create
primary key(col_name); or alter table tb1 add primary key(col_name);
-- delete
alter table tb1 drop primary key;
alter table tb1 modify col_name int,drop primary key;
只查找符合条件的索引列的值,旨在索引表中就可得出相应值
对多个索引分别进行条件扫描,然后将它们各自的结果进行合并
select * from tb1 where name="arno" or email="xxx"
explain sql_Statement (可以相对准确地给出sql地运行状态)
-- type
all -- 全数据表扫描
index -- 全索引表扫描
range -- 在索引表内进行范围查找(注意不等于和大于,不走索引)
index_merge -- 合并索引
ref -- 根据索引查找一个或多个值
eq_ref -- 适用primary key or unique 列作为条件来索引
const -- 常量(覆盖索引)
system -- 系统(表中只有一行数据)
-- notice
在搜索单个数据时,可以加limit来提高效率
时,如果是主键或整数类型索引,也走索引
公司中,不要轻易重启mysql服务,最好同时修改内存和配置文件
slow_query_log = ON
log_queries_not_using_indexes = ON
long_query_time = 0.5
slow_query_log_file = path
show variables like "%query%";
set long_query_time = o.5;
标签:sql注入 进制 长度 合并 alt 数据类型 单列 出现 code
原文地址:https://www.cnblogs.com/xiaokaibiubiu/p/14772871.html