MariaDB 层常用业务

以加强潍坊学院大学生的综合素质,提高广大校友的坚毅、沟通力、表达力、学习力、人格魅力,引导同学等建立科学的宇宙观、人生观、价值观。5月14日,潍坊学院计算机工程学院于7217讲堂成举办了“晒福未来底星奖学金决赛”。本次比赛特邀到计算机工程学院党总支书记王忠山、潍坊学院学生处助学中心决策者高历、鑫源金店总经理助理曹希磊等嘉宾。计算机工程学院副院长、教授史纪元,教学名师、副教授曲秀清,教学名师、副教授李晓波,海归博士韩立琦,博士张彭,博士王磊,博士代表江艳任此次比赛之评委。

序言  –  简单准备一下前戏

角开始,首先是因为主持人宣布评分标准。随后,12位进入决赛的健儿依次登场陈述PPT。选手们落落大方,以动感的精神风貌向先生、同学等显得起自己不过完美之一面。现场时响起一阵热烈的掌声。评委老师打想内容、语言表达能力、形象气质、综合素质与力量四只地方分别吗他们打分。随后,王忠山书记上台发言,他指出:同学等应当尤其端正学习姿态,牢固确立标准上之价值观。好好学习,多打本本及上,多以社会实践着上学;好好看,多读来字之题,更要读无字之开。经过实地工作人员的统计和计算,主持人宣读了最终之比赛结果。参赛选手张法凯荣获第一号称,并拿走进入总决赛的竞赛资格。

  前面写了几首mariadb 数据的随笔, 多数偏C/C++层面.
这次分享一下平常付出被, 处理的片段数码层面的业务.

由此此次比赛,相信同学等会面如党王忠山书记说之那么,好好学习、好好看,为明天的美好生活奠定基础,为日后走向社会能回报家庭、回报学校、回报社会奠定基础。

对此MariaDB, 不开过多介绍. 如果你发Ubuntu 系统, 可以由此下面来只环境玩玩

李魁林

# 先搜索要的包, 再去安装
apt-cache search mariadb
sudo apt-get install mariadb-server
sudo apt-get install mariadb-client

# 进入mariadb 开始操作
sudo mysql -uroot
status

此扯一下, 假如你复制mysql 脚论及 mariadb中施行, 出现下面字符串

Display all 475 possibilities? (y or n)

招原因是MariaDB中针对Tab处理的问题, 你用用脚本串中Tab替换成空格.
如果你用之是notepad++ 可以开下操作

图片 1

-> 编程语言多了, 什么扯坑都有. 多习惯就改成涉了, 一朝香吃遍天~~
只能开心就是好~~.

当好戏出现前, 我们需要有测试的根基数据.执行下的构建脚本

-- 1.1 先构建实验前戏
create database test;
use test;
create table t_rand (
    -- 推荐 设计主键的时候 id 为 bigint, int 为历史原因
    id int unsigned not null primary key
);

-- 4.1 先构建数据, 我们就以 t_rand 表为例
drop table if exists t_score;
create table t_score(score int);
insert into t_score value(1);
insert into t_score value(2);
insert into t_score value(10);
insert into t_score value(10);
insert into t_score value(10);
insert into t_score value(3);
insert into t_score value(4);
insert into t_score value(6);
insert into t_score value(5);
select * from t_score;

图片 2 

 -> 到及时基本的储备工作就好了, 那咱们开始吧~

 

无独有偶文  –  从事实上业务出发

  扯个开口吧,
这首稿子很不错的 而为何会去游戏行业?

1. 生化为8各类随机数业务

  有时候按照产品求要生成int 8个之妄动id.
常见做法是单身将一个任意数表,这样做有硌小恶心.

背后我折腾了心心相印取巧的办法.八各项本机数范围[10000000, 99999999]
我将她切分为

[10000000, 89999999] and [90000000, 99999999]零星片段转,

前半分以rand and check. 后半部分用 max + 1. 说到底的笔触如下

-- 1.2 开始构建存储过程
drop procedure if exists p_rand_insert;
delimiter $
create procedure p_rand_insert(out oid int unsigned)
begin
    declare mi int unsigned;
    declare si int unsigned default 10000000;
    declare ei int unsigned default 70000000;

    declare i tinyint default 3;
    declare f tinyint default 0;

    while i > 0 && f = 0 do
        set f = 1;
        set mi = floor(si + ei * rand());
        select 0 into f from t_rand where id = mi limit 1;
        set i = i - 1;
    end while;

    if f = 0 then
        select max(id) into mi from t_rand;
        if mi < ei + si then
            set mi = ei + si;
        end if;
        set mi = mi + 1;
    end if;

    insert into t_rand value(mi);
    set oid = mi;
end
$
delimiter ;

不妨测试一下,

-- 1.3 开始构建测试数据
truncate table t_rand;

call p_rand_insert(@oid);
select @oid;
call p_rand_insert(@oid);
call p_rand_insert(@oid);
call p_rand_insert(@oid);

select * from t_rand;

取的结果如下, 扯一点此需要前期在于保障游戏内有隐数据. 哈哈,
其实对于隐私数据就可免显才是最好.

图片 3

 

2. 去掉db上面装有数据

  经常得免去数据, 这里描绘了只底论直接铲除指定DB上享有数据.
大家可尝试用一下. 

-- 2. 清除db上面所有数据
drop procedure if exists p_truncate;
delimiter $
create procedure p_truncate(dbname varchar(64))
begin
    declare tname varchar(64);
    declare lop tinyint default 1;

    -- 声明游标
    declare getnames cursor for select table_name 
        from information_schema.tables 
        where table_type = 'BASE TABLE' and table_schema = dbname;
    -- 声明handler 必须在游标声明之后, 当游标数据读取完毕会触发下面set
    declare continue handler for not found set lop = 0;

    -- 打开游标
    open getnames;

    -- 操作游标, 读取第一行数据
    fetch getnames into tname;
    while lop = 1 do
        set @tsql = concat('truncate table ', dbname, '.', tname);
        prepare stmt from @tsql;
        execute stmt;
        deallocate prepare stmt;

        -- 读取下一个行数据
        fetch getnames into tname;
    end while;

    -- 关闭游标
    close getnames;
end
$
delimiter ;

动与否颇简短, 看下小例子, 后面也产生数据图演示

-- 2.1 测试清除所有数据
select * from test.t_rand;
call p_truncate('test');
select * from test.t_rand;

图片 4

于贯彻的底细部分, 查查帮助手册就理解了. 再上某些, truncate 和 delete
区别. 直观上前者特别快.

后者慢于 删除的进程是每次由表中删除一行,并且会用该行的去操作作为工作记录到日志中.

当了truncate一个微细节, 它会波及少
auto_increment 当前之种子值, 让其改为0.

 

3. 导出数库表结构和阐明数据

  这个于品种移植的时会为此上就一句话 

sudo mysqldump -uroot -d test > test_d.sql

-h -p 自己什么条件好加及, 我虽本土测试没有密码. -d 表示不导出表数据.
如果单独是以导出特定的表. 可以形容成 test t_rand

写到此吃我想起了那时候正好工作的第二年, 看见运维大用写有当下段话. 当时
心里 就 1万个敬佩, wow 好狠心~

n年病逝矣, 不亮堂那些人还吓为, 哈哈, 估计菜鸡的本身无机会更敬他们一如既往杯了 ~

 

4. 后台统计要排序

  这个事情很宽泛, 无外乎下面两种植. 用 t_score表做测试. 直接看图吧.

图片 5

-- 4.2 够好排序
select t.score,
    (select count(s.score) + 1 from t_score s where s.score > t.score) rank
    from t_score t order by t.score desc;

 另外一栽, 1->2->3…这种往返折腾

-- 4.3 都好排序
select t.score,
    (select count(s.score) + 1 
        from (select score from t_score group by score) s 
            where s.score > t.score) rank
    from t_score t order by t.score desc;

图片 6

交此处差不多数据库(mariadb or mysql) 开发规模的业务呢介绍了有了.哈哈,
下浅闹机会更补偿充.

出人意外毫无预兆想起一词话, 优化是毒药.

 

继记  –  一切要原有的毕

   错误是在所难免的接指正, O(∩_∩)O哈哈~  人生路很丰富,
已于脱贫路上奋勇向前了  (๑╹◡╹)ノ””” 不克叫党丢饭~

   如度年华 
http://music.163.com/\#/song?id=399954010

  图片 7

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图