第9周作业

本文介绍了MySQL的事件调度器,用于定时执行任务,替代操作系统计划任务。通过示例展示了创建和使用事件的步骤,并提供了查询学生表的SQL语句,包括筛选条件查询和按ClassID分组求平均年龄。此外,还讨论了事件调度器的优缺点,如高精度定时和减少对外部系统的依赖,以及可能存在的资源消耗问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 写一个一键安装 mariadb 数据库脚本。

    #!/bin/bash
    
    #Description: Install mariadb
    #Package: mariadb-10.2.18.tar.gz, 下载好后放在/usr/loca/src下
    #Date: 2020-09-23
    
    function pre_install() {
    	useradd -r -s /sbin/nologin -d /data/mysql mysql
    	yum -y install gcc gcc-c++ cmake bison zlib-devel libcurl-devel boost-devel ncurses-devel gnutls libxml2-devel openssl-devel libevent-devel libaio-devel
    	if [ -d '/data/mysql' ] ||  [ -d '/app/mysql' ]; then
    		echo 'Directory: /data/mysql or /app/mysql is exists'
    		exit 1
    	else
    		mkdir /data/mysql  # 数据存放目录
    		mkdir /app/mysql   # 应用程序安装目录
    	fi
    }
    
    function init() {                                                                                                            
        cd /usr/local/mysql
        # 以下空行不可删除,这是多行重定向输入
        ./bin/mysql_secure_installation <<EOF
                                                                                                                                 
    y
    123456
    123456
    y
    n
    y
    y
    EOF                                                                                                                          
    }
    
    function install() {
    	cd /usr/local/
    	tar -xvf src/mariadb-10.2.18.tar.gz -C .
    	ln -s src/mariadb-10.2.18 mariadb
    	cd mariadb
    	cmake . \\
    	-DCMAKE_INSTALL_PREFIX=/app/mysql \\
    	-DMYSQL_DATADIR=/data/mysql/ \\
    	-DSYSCONFDIR=/etc/  \\
    	-DMYSQL_USER=mysql \\
    	-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
    	-DWITH_ARCHIVE_STORAGE_ENGINE=1 \\
    	-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
    	-DWITH_PARTITION_STORAGE_ENGINE=1  \\
    	-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \\
    	-DWITH_DEBUG=0 \\
    	-DWITH_READLINE=1 \\
    	-DWITH_SSL=system \\
    	-DWITH_ZLIB=system \\
    	-DWITH_LIBWRAP=0 \\
    	-DENABLED_LOCAL_INFILE=1  \\
    	-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \\
    	-DDEFAULT_CHARSET=utf8 \\
    	-DDEFAULT_COLLATION=utf8_general_ci
    	cpu_cores=$(sed -rn 's/cpu cores.*([[:digit:]]+$)/\\1/p' /proc/cpuinfo | head -n 1)
    	make -j $cpu_cores 
    	make install
    
    	/app/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql --basedir=/app/mysql
    	chown -R mysql.mysql /data/mysql
    	cp -b /app/mysql/support-files/my-huge.cnf /etc/my.cnf
    	version=$(sed -rn '/VERSION=/s/.*([[:digit:]]+).*/\\1/p' /etc/os-release | head -n 1)
    	if [ "$version" -ge 8 ]; then
    		cat > /etc/systemd/system/mariadb.service <<EOF
    [Unit]
    Description=The Mariadb Server daemon
    After=multi-user.target
    
    [Service]
    Type=simple
    User=mysql
    Group=mysql
    
    ExecStart=/app/mysql/bin/mysqld_safe --basedir=/app/mysql/ --datadir=/data/mysql
    
    [Install]
    WantedBy=multi-user.target
    EOF
    		systemctl start mariadb
    	else
    		cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
    		service mysqld start
    	fi
    }
    
    function rmove() {
    	userdel -r mysql
    	rm -rf /data/mysql
    	rm -rf /app/mysql
    }
    
    function main() {
    	pre_install
    	init
    	install
    }
    
    main
    
  2. 简述Event 事件介绍以及它的优缺点

    事件(event)是MySQL在相应的时刻调用的过程式。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理,也就是所谓的"事件调度器"。

    事件和触发器类型,都是在某些事情发生的时候。当数据库上启动一条语句的时候,触发器就启动了。而事件是根据调度事件来启动的。

    事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒中执行一个任务,而操作系统的计划任务只能精确到每分钟执行一次

    优缺点:

    • 优点:一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能,可以实现每秒钟执行一个任务,这在一些实时要求较高的环境下就非常实用
    • 缺点:定时触发,不可直接调用
  3. 在 students 表中,查询年龄大于25岁,且为男性的同学的名字和年龄:

    MariaDB [hellodb]> select name,age from students where age > 25;
    +--------------+-----+
    | name         | age |
    +--------------+-----+
    | Xie Yanke    |  53 |
    | Ding Dian    |  32 |
    | Yu Yutong    |  26 |
    | Shi Qing     |  46 |
    | Tian Boguang |  33 |
    | Xu Xian      |  27 |
    | Sun Dasheng  | 100 |
    +--------------+-----+
    7 rows in set (0.01 sec)
    
  4. 在 students 表中,以 ClassID 为分组依据,查询显示每组的平均年龄

    MariaDB [hellodb]> select classid, avg(age) from students group by classid;
    +---------+----------+
    | classid | avg(age) |
    +---------+----------+
    |    NULL |  63.5000 |
    |       1 |  20.5000 |
    |       2 |  36.0000 |
    |       3 |  20.2500 |
    |       4 |  24.7500 |
    |       5 |  46.0000 |
    |       6 |  20.7500 |
    |       7 |  19.6667 |
    +---------+----------+
    
  5. 显示第2题中平均年龄大于30的分组及平均年龄

    MariaDB [hellodb]> select classid, avg(age) as 平均年龄 from students group by classid having 平均年龄 > 30;
    +---------+--------------+
    | classid | 平均年龄     |
    +---------+--------------+
    |    NULL |      63.5000 |
    |       2 |      36.0000 |
    |       5 |      46.0000 |
    +---------+--------------+
    3 rows in set (0.00 sec)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值