# MySQL测试题

MySQL测试题

SQL语言 DDL(数据定义语言)部分

  1. 下列的SQL语句中,( D)不是数据定义语句。
      A. CREATE TABLE B. DROP VIEW
      C. CREATE VIEW D. GRANT
  2. 若要撤销数据库中已经存在的表S,可用( C)。
      A. DELETE TABLE s B. DELETE s
      C. DROP TABLE s D. DROP s

DDL基本语句

-- 创建表
CREAT TABLE 表名(
    名字 属性 not null auto_increment,
    名字 属性 not null,
    名字 属性 default "男",
    名字 属性
    --主键
    primary key(sno),
    --外键
    constraint fk_stu_cno foreign key(cno) references t_class(cno)
)
-- 修改语句
-- 表名:ALTER TABLE 旧表名 RENAME [TO] 新表名
-- 字段:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新属性类型;
-- 增加字段
   ALTER TABLE 表名 ADD 新属性名新属性类型 [完整性约束] [first | after 原有字段];
-- 删除字段
:ALTER TABLE 表名 DROP 属性名
-- 删除数据表
DROP TABLE [IF EXISTS] 表名;

拓展 Mysq1删除表的几种方式?区别?

1.delete:仅删除表数据,支持条件过滤,支持回滚。记录日志。因此比较慢。
2.truncate:仅删除所有数据,不支持条件过滤,不支持回滚。不记录日志,效率高于delete。
3.drop:删除表数据同时删除表结构。将表所占的空间都释放掉。删除效率最高。

视图部分

  1. 在视图上不能完成的操作是(C ) 。
      A. 更新视图 B. 查询
      C. 在视图上定义新的表 D. 在视图上定义新的视图
  2. SQL语言中,删除一个视图的命令是( B)。
      A.DELETE
      B.DROP
      C.CLEAR
      D.REMOVE
      -----
    视图是由一个或者多个表组成的虚拟表。实际就是SELECT语句。
    视图中不能新建表,自己本身就是一张虚拟表

创建一个视图

-- 任务 创建一个视图v_emp,可以通过该视图查看所有员工的员工号,员工姓名,工资,部门号,部门名称,工资等
级。
CREATE VIEW v_emp
AS
SELECT e.empno,e.ename,e.sal,e.deptno,d.dname,sg.grade
FROM emp e,dept d,salgrade sg
WHERE e.deptno=d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--查看视图
SELECT * FROM v_emp;
--修改视图v_emp2
CREATE OR REPLACE VIEW v_emp2
AS
SELECT empno,ename,sal,job,deptno
FROM emp;
-- 删除视图v_emp2;
DROP VIEW v_emp2;

扩展资料:

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。

当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

视图的优缺点?

优点
简单化,数据所见即所得
安全性,用户只能查询或修改他们所能见到得到的数据
逻辑独立性,可以屏蔽真实表结构变化带来的影响
缺点
性能相对较差,简单的查询也会变得稍显复杂
修改不方便,特变是复杂的聚合视图基本无法修改

子查询部分

  1. 在SQL语言中,子查询是( D ) 。
      A. 返回单表中数据子集的查询语言
      B. 选取多表中字段子集的查询语句
      C. 选取单表中字段子集的查询语句
      D. 嵌入到另一个查询语句之中的查询语句
      -----
      
      子查询是指插入在其他SQL语句中的SELECT语句,也称为嵌套查询。 使用子查询主要是将结果作为外部主查询的查询条件来使用的查询。
      
      ### 什么时候使用?
      
      1. 当要显示的数据在表里并不存在,但可以通过对已有数据的加工获得,可通过子查询实现。
    2. 子查询可以出现在SELECT、WHERE子句、FROM子句、DML语句、DDL语句中。
    3. 在SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。

索引部分

1.什么是索引?

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

2.MySql有哪些索引?

■数据结构角度

  1. BTREE
  2. HASH
  3. FULLTEXT
  4. R-Tree

■物理存储角度

1、聚集索引(clustered index)
2、非聚集索引(non-clustered index)

■从逻辑角度

1.普通索引:仅加速查询
2.唯- -索引:加速查询+列值唯一( 可以有null)
3.主键索引:加速查询+列值唯一(不可以有null) +表中只有一个
4.组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
5.全文索引:对文本的内容进行分词,进行搜索

3.什么情况下会导致MySQL自增id不连续问题?

唯一键冲突
事务回滚
批量申请自增id的策略

4.什么是3NF (范式) ?

1NF指的是数据库表中的任何属性都具有原子性的,不可再分解
2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性
3NF是对字段冗余性的约束,即任何字段不能其他字段派生出来,它要求字段没有冗余

5.Null和空串如何判断

NULL值是没有值,它不是空串。如果指定"(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。
判断NULL需要用IS NULL或者IS NOT NULL。

6.like走索引吗?

xxx%走索引,%xxx不走索引。

7.什么是回表?

在普通索引查到主键索引后,再去主键索引定位记录。等于说非主键索引需要多走一个索引树。

8.如何避免回表?

索引覆盖被查询的字段。

9.索引覆盖是什么?

如果一个索引包含(或覆盖)所有需要查询的字段的值,称为’覆盖索引。


事物部分

1.什么是事务?

可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

2.事务4个特性?

事务是必须满足4个条件(ACID) :
原子性Atomicity: 一个事务中的所有操作,要么全部完成,要么全部不完成,最小的执行单位。
一致性Consistency:事务执行前后,都处于一致性状态。
隔离性Isolation:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性Durability: 事务执行完成后,对数据的修改就是永久的,即便系统故障也不会丢失。

3.事务隔离级别分别是?

READ_ UNCC OMMITTED
这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。解决第-类丟失更新的问题,但是会出现脏读、不可重复读、第二类丢失更新的问题,幻读。
READ_ COMMITTED
保证一个事务修改的数据提交后才能被另外一个事务读取,即另外一个事务不能读取该事务未提交的数据。解决第一类丢失更新和脏读的问题,但会出现不可重复读、第二类丢失更新的问题,幻读问题
REPEATABLE READ
保证一个事务相同条件下前后两次获取的数据是一致的(注意是一个事务,可以理解为事务间的数据互不影响)解决第一类丢失更新, 脏读、不可重复读、第二类丢失更新的问题,但会出幻读。
SERIALIZABLE
事务串行执行,解决了脏读、不可重复读、幻读。但效率很差,所以实际中一般不用。

4.Innodb默认的事务隔离级别是?

REPEATABLE READ


锁 部分

1.什么是锁?

数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发的情况下,访问数据库的时候,数据不会出现问题。

2.死锁?

是指两个或两个以上进程执行过程中,因竞争共享资源造成的相互等待现象。

3.如何处理死锁?

1.设置超时时间。超时后自动释放。
2.发起死锁检测,主动回滚其中一条事务,让其他事务继续执行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值