【mysql笔试题】

1、mysql中唯一索引的关键字是( C )
A. fulltext index B.only index C.unique index D.index

2、下面关于索引描述中错误的一项是( C)
A.索引可以提高数据查询的速度 B.索引可以降低数据的插入速度
C.innodb存储引擎支持全文索引 D.删除索引的命令是drop index

3、支持主外键,索引及事务的存储引擎为是( B )
A.MYISAM B.INNODB C.MEMORY D.CHARACTER

4、对事务的描述中不正确的是( C )
A.事务具有原子性 B.事务具有隔离性
C.事务回滚使用commit命令 D.事务具有可靠性
5、 mysql中,备份数据库的命令是( A )
A.mysqldump B.mysql C.backup D.copy

6、 实现批量数据导入的命令是( B )
A.mysqldump B.mysql C.backup D.return

7、 创建用户的命令是( B )
A. join user B.create user C.create root D.mysql user

8、 修改自己的mysql服务器密码的命令是( C )
A.mysql B.grant C.set password D.change password

9、 找回mysql服务器root密码的很重要的一步是跳过权限表的检查启动mysql,该命令是 ( D )
A. mysql -u root –proot B. mysqladmin -uroot -proot
C. net start mysql D. mysqld-nt --skip-grant-tables

10、联合查询使用的关键字是( B )
A.UNION B.JOIN C.ALL D.FULL

11、有订单表orders,包含用户信息userid, 产品信息 productid, 以下( D )语句能够返回至少被订购过两回的productid?
A. select productid from orders where count(productid)›1
B. select productid from orders where max(productid)›1
C. select productid from orders where having count(productid)›1 group by productid
D. select productid from orders group by productid having count(productid)›1

12、子查询中可以使用运算符ANY, 它表示的意思是( B )
A. 满足所有的条件 B. 满足至少一个条件
C. 一个都不用满足 D. 满足至少5个条件

13、事务中能实现回滚的命令是( C )
A.TRANSACTION B.COMMIT C.ROLLBACK D.SAVEPOINT

14、mysql中,还原数据库的命令是( B )
A.mysqldump B.mysql C.backup D.return

15、mysql中存储用户全局权限的表是( D )
A. table_priv B.procs_priv C.columns_priv D.user

16、删除用户的命令是( A )
A. drop user B.delete user C.drop root D.truncate user

17、给名字是zhangsan的用户分配对数据库studb中的stuinfo表的查询和插入数据权限的语句是( B )
A.grant select,insert on studb.stuinfo for‘zhangsan’@’localhost’
B.grant select,insert on studb.stuinfo to‘zhangsan’@’localhost’
C.grant‘zhangsan’@’localhost’ to select,insert for studb.stuinfo
D.grant ‘zhangsan’@’localhost’ to studb.stuinfo on select,insert

18、下列选项( A )是mysql复制技术不支持的复制类型
A.基于sql语句的复制方式 B.基于行的复制方式
C.基于数据文件的复制方式 D.sql语句和行相结合的方式

19、下列的函数中不可以处理日期和时间的函数是( A
A round B WeekDay C Curdate D DayofMonth

20、mysql中的约束不包括( A )
A.检查约束 B.默认约束 C.非空约束 D.唯一约束

第二部分、简答题(共18分)
1、在mysql中常用存储引擎有哪几种(最少三种),每个引擎特点区别?(6分)
a.InnoDB
b.Myisam
(1)5点不同

	a.  InnoDB支持事务,而MyISAM不支持事务。
	b.  InnoDB支持行级锁,而MyISAM支持表级锁
	c.  InnoDB支持MVCC,而MyISAM不支持
	d.  InnoDB支持外键,而MyISAM不支持
	e.  InnoDB不支持全文索引,而MyISAM支持

(2)InnoDB引擎的3大特性
插入缓存(insert buffer)、二次写(double write)、自适应哈希索引(ahi)、预读(read ahead)
(3)二者select count(*)哪个更快,为什么?
MyISAM更快,因为MyISAM内部维护了一个计数器,可以直接调取。
c.Memory:Memory是将数据直接存在内存中的,特别适合数据量小的表。同时为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联,文件是frm

2、忘记MySQL管理员root的密码如何解决?写出步骤和指令(6分)
答:可以进行重置密码;
步骤:

1.停止数据库:systemctl stop mysqld
2.跳过权限表:这时候这个会话不能使用,我们则需要重新复制个会话进入数据库
[root@manager ~]#  mysqld --user=mysql --skip-grant-tables
3.复制完新的会话后,进入数据库:只需要输入mysql就可以无密码进入数据库
root@manager ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.13-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
4.刷新权限表:flush privileges
mysql> flush privileges;
Query OK, 0 rows affected (0.001 sec)
5.重置密码操作:
mysql> alter user root@'localhost' identified by 'Pineyang000!'
Query OK, 0 rows affected (0.003 sec)
6.验证:
首先停止mysql进程(因为之前跳过权限表时那个会话一直卡着,则就需要杀死进程):killall -9 mysqld,直到出现no process found(需要安装yum install psmisc -y)
[root@manager ~]# killall -9 mysqld
[root@manager ~]# killall -9 mysqld
mysqld: no process found
#之前卡的那个会话就会出现
.
Version: '10.4.13-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
已杀死
再开启mysql数据库服务:systemctl restart mysqld,使用重置后的密码进入数据库进行验证

3、简述mysql主从复制的原理和主、从服务器上的my.cnf文件的修改内容及注意事项(6分)
戳一戳

第三部分、编程题(共42分)
有一个关于公司员工信息的数据库empinfo。部门表和员工基本信息表是其中的两个表,表中信息如下:
部门表depts ( dept_id、dept_name、description)
说明:dept_id 部门编号 dept_name 部门名称 description 部门描述
员工表employees(id、name、gender、dept_id、join_time、salary、address、age、des)
说明:id员工号 name员工姓名gender性别 dept_id所在部门join_time加入时间salary工资 address地址 age年龄des描述

1)分析各个表之间的关系(主外键引用关系),写出建表语句(6分)

答:
部门表:主键是dept_id
员工表:主键是id;外键是dept_id,引用的是部门表的dept_id
mysql> use empinfo;
Database changed
mysql> create table depts(dept_id int primary key,
    -> dept_name varchar(20),
    -> description varchar(255));
Query OK, 0 rows affected (0.09 sec)
mysql> create table employees(id int primary key,
    -> name varchar(20),
    -> gender varchar(10),
    -> dept_id int,
    -> join_time datetime,
    -> salary double,
    -> address varchar(255),
    -> age int,
    -> des varchar(255),
    -> foreign key(dept_id) references depts(dept_id));
Query OK, 0 rows affected (0.12 sec)

2)为员工表employees添加一个字段image用于记录员工头像(2分)

mysql> alter table employees add image varchar(255);
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0

3)查询除了名字叫张三以外的员工的记录(2分)

mysql> select * from employees where name not in ('张三');
Empty set (0.00 sec)

4)查询薪水在2000-5000之间的员工记录(2分)

mysql> select * from employees where salary between 2000 and 5000;
Empty set (0.03 sec)

5)查询部门编号是1、3、5的员工的记录(2分)

mysql> select * from employees where dept_id in (1,3,5);
Empty set (0.13 sec)

6)查询名字以“张”开头的员工的记录(2分)

mysql> select * from employees where name like '张%';
Empty set (0.03 sec)

7)查询性别为“M”且在2008年1月1日入职的员工的记录(2分)

mysql> select * from employees where gender='M' and date(join_time)='2008-01-01';
Empty set (0.00 sec)

8)查询出平均月薪最高的部门编号与名字(3分)

mysql> select dept_id,dept_name from depts where dept_id=(selecct dept_id from (select dept_id,avg(salary) sal from employees group by dept_id order by sal desc limit 1)t);
Empty set (0.00 sec)

9)为employees表的name列创建索引(2分)

mysql> create index index1 on employees(name);
Query OK, 0 rows affected (0.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

10)创建视图, EMP_V_10, 包括10号部门的信息和所有职员信息(3分)

mysql> create view emp_v_10 as
    -> select employees.*,depts.dept_name,depts.description from depts,employees where depts.dept_id=employees.dept_id and employees.dept_id=10;
Query OK, 0 rows affected (0.00 sec)

11)创建一个用户test1使他只拥有查询employees表的权限(2分)

mysql> grant select on empinfo.employees to test1@'192.168.131.%' identified by 'Pineyang000!';
Query OK, 0 rows affected, 1 warning (0.15 sec)

12)授予普通DBA用户(systop)管理empinfo数据库的权限(2分)

mysql> grant all on empinfo.* to systop@'localhost' identified by 'Pineyang000!';
Query OK, 0 rows affected, 1 warning (0.00 sec)

13)授予用户test3拥有employees表name列的更改权限(3分)

mysql> grant update(name) on empinfo.employees to test3@'192.1668.131.%' identified by 'Pineyang000!';
Query OK, 0 rows affected, 1 warning (0.00 sec)

14)为employees表开启事务功能的操作步骤(4分)

Begin transaction
	执行事务体语句{...}
	if @error>0
	Begin
		Rollback transaction
	End
	Else
		Begin
		Commit transaction
	End
	End

15)写出将empinfo数据库备份到远程服务器182.21.32.129的方法和步骤(5分)

1.备份
[root@localhost ~]#mysqldump -uroot -p'Pineyang000!' -B empinfo > empinfo.sql
2.传送
[root@localhost ~]#scp empinfo.sql root@182.21.32.129:/tmp
3.还原
[root@localhost ~]#mysql -uroot -p'Pineyang000!' < /tmp/empinfo.sql
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛追汤圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值