MariaDB基本知识汇总

/*

  MariaDB

  1、视图

  2、临时表

  3、自定义函数

  4、存储过程

  5、触发器

  6、游标

  7、变量声明与赋值

  8、常用函数(日期格式,Guid,判断,循环,XML格式操作)

  9、动态执行SQL 语句

  10、开启执行计划

  11、创建登录MariaDB账号赋予权限

  12、check audit 插件

  13、批量语句更新

  14、数据库版本检查

  15、虚拟列

*/

/*1、视图 (tempView 试图名,ttEvents 表名)*/

Create View tempView

as

Select * From ttEvents

/*2、临时表*/

select * from ttEvents

/*创建临时表-1 把ttEvents中数据放入到临时表tempTemporary*/

Create Temporary Table tempTemporary

as

Select * from ttEvents;

/*创建临时表-2*/

Create Temporary Table tempTemporary

(

   EventId char(36) not null,

   Dept varchar(50),

   Title varchar(50)

)TYPE = HEAP;/*内存中直接创建临时表*/

/*查询临时表*/

select * from tempTemporary

/*删除临时表*/

drop Temporary Table tempTemporary

/*3、自定义函数*/

Delimiter $$ 

Drop function If Exists FnReturnInt; $$

create function FnReturnInt()

returns int

begin

   declare state int;

   set state=0;

    return state;

end; $$ 

delimiter ;


/*调用函数*/

select FnReturnInt();

/*带参数函数*/

Delimiter $$ 

Drop function If Exists FnReturnInt; $$

create function FnReturnInt(state int)

returns varchar(20)

begin

   declare result varchar(20);

   if(state>100)

   then

      set result='true';

   elseif (state50)

   then

      set result='error';

   else 

     set result='false';

   end if;

    return result;

end; $$ 

Delimiter ;

/*带参数函数调用*/

select FnReturnInt(60);

Delimiter $$ 

Drop function If Exists FnDutyLevel; $$

create function FnDutyLevel(str varchar(100))

returns varchar(500)

begin

      DECLARE result VARCHAR(2000); 

      SET result = ''; 

SELECT GROUP_CONCAT(A.Txt,'(',C.Txt,')') into result FROM FnDictionaryVals A 

INNER JOIN FNDICTIONARYKEYS B ON A.DictKeyId=B.DictKeyId

LEFT JOIN FnDictionaryVals C ON C.LnkDictValId=A.DictValId

WHERE B.KEYCODE='JobDegree'

AND FIND_IN_SET(CONCAT_WS('|',A.Val,C.Val),str)>0

ORDER BY A.DspOrder,C.DspOrder;

return result;

end; $$ 

Delimiter ;

/*4、存储过程*/

/*创建存储过程*/

Delimiter $$

Drop Procedure If Exists usp_TempProcedure; $$

Create Procedure usp_TempProcedure(in pKey char(36))

Label_Return:begin

    select * from TtEvents where IsDeleted=1 and EventId=pKey;

end; $$

delimiter ; 

/*调用存储过程*/

call usp_TempProcedure('0da453b2-c690-4234-ad5e-bd94c3d6ce58');

/*5、触发器*/

/*创建表*/

create table t(s1 integer);

Delimiter $$

Drop Trigger If Exists trigger_Temp; $$

Create Trigger trigger_Temp 

before insert on t for each row

begin 

   set @x='hello trigger';

   set New.s1=55;

end; $$

delimiter ; 

insert into t values(1);

select @x,t.* from t;

drop table t;

drop trigger trigger_Temp;

/*6、游标(必须放在函数、存储过程等下面执行,单独不可以执行)*/

Delimiter $$

Drop Procedure If Exists usp_TempProcedure; $$

Create Procedure usp_TempProcedure()

Label_Return:begin

  -- 需要定义接收游标数据的变量 

  DECLARE a CHAR(36);

    -- 遍历数据结束标志

  DECLARE done INT DEFAULT FALSE;

  -- 游标

  DECLARE cur CURSOR FOR SELECT eventid FROM ttEvents limit 10;

  -- 将结束标志绑定到游标

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  -- 打开游标

  OPEN cur;

  -- 开始循环

  read_loop: LOOP

    -- 提取游标里的数据,这里只有一个,多个的话也一样;

    FETCH cur INTO a;

    -- 声明结束的时候

    IF done THEN

      LEAVE read_loop;

    END IF;

    -- 这里做你想做的循环的事件

select a;

#    INSERT INTO t VALUES (a);

  END LOOP;

  -- 关闭游标

  CLOSE cur;

end; $$

delimiter ;

call usp_TempProcedure();

/*7、声明变量 与赋值*/

set @num='string';

select @EventId :=eventid from ttevents;

/*8、判断表是否存在,如果存在则删除*/

Drop Table If Exists tempTemporary;

/*9、动态执行SQL 语句*/

set @ss='select * from ttevents limit 10;';

PREPARE s1 FROM @ss;

execute s1;

set @col=concat('a','.','eventid');

set @ss=concat('select ',@col,' from ttevents a limit 10;');

PREPARE s1 FROM @ss;

execute s1;

/*10、开启执行计划*/

 set global event_scheduler =1;

/*11、创建登录MariaDB账号赋予权限*/

select * from mysql.user

# mariadb create account and password

# method one

CREATE USER 'tom'@'%' IDENTIFIED BY '1';

# delete account

DROP USER 'tom'@'%';

# grant roles to account

# 授权tom用户拥有smartevent数据库的所有权限。 

grant all privileges on smartevent.* to 'tom'@'%' identified by '1'; 

# 权限回收

revoke select,drop,update on smartevent.* from tom;

grant select on smartevent.* to 'tom'@'%' identified by '1'; 

# 刷新特权

flush privileges;

/*12、check audit 插件*/

show global variables like '%plugin_dir%';

install plugin server_audit soname 'server_audit.dll';

show global variables like '%server_audit%';

set global server_audit_events='QUERY';

set global server_audit_LOGGING='ON';

/*13、批量语句更新*/

UPDATE ToSchedules as x

INNER JOIN TtEventSessions as s ON  s.TenantId = @TenantId AND s.SessionId = x.OriSessionId 

 SET 

    x.DtStart = s.DtStart,

    x.DtEnd = s.DtStart,

    x.TimeStart = s.TimeStart,

    x.TimeEnd = s.TimeEnd,

    x.Subject = s.Name,

    x.Descr = IFNULL(s.Intro,''),

    x.ModifiedOn = s.ModifiedOn,

    x.ModifiedBy = s.ModifiedBy

WHERE x.TenantId=@TenantId AND x.UserId = @UserId;

/*14、数据库版本检查*/

#检查版本

SELECT @@VERSION;

/*15、虚拟列*/

#创建测试表

create table smartx_temp.temp_user(

uid int AUTO_INCREMENT primary key,

jsondata json

);

#插入数据

insert into smartx_temp.temp_user values (NULL,'{"name":"wang","address":"shenyang"}');

insert into smartx_temp.temp_user values (NULL,'{"name":"zhao","address":"riben"}');

#虚拟列前验证效果

EXPLAIN

SELECT * FROM user WHERE user_name='zhao';

#新建虚拟列

alter table user add user_name varchar(20) generated always as (json_value(jsondata,'$.name'));

#新建虚拟列索引

alter table user add index idx_name(user_name);

#验证效果

EXPLAIN

SELECT * FROM user WHERE user_name='zhao';

#删除虚拟列

alter table user drop column user_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值