关系型数据库作业

MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别(至少5点)?

在这里插入图片描述

	1)InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。(磁盘表,支持事务处理,InnoDB还支持外键)
	2)MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎。MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。(MyISAM:磁盘表,不支持事务,支持表级锁,B+Tree索引)
	3) MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。(MEMORY内存表,不支持事务,表级锁,Hash索引)

在这里插入图片描述

数据库事务的四个特性及含义

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

note:隔离级别需要根据并发情况进行设置,将数据库设计成单线程,可以防止所有的线程安全问题,自然也就保证了隔离型的问题,但是如果这样,那么效率就会极其低下。如果两个线程并发修改,一定会相互捣乱,这时必须利用锁机制防止多个线程的并发修改。如果两个线程并发查询,没有线程安全问题。

在这里插入图片描述
在这里插入图片描述

数据库三范式是什么?

对于设计数据库提出了一些规范,这些规范被称为范式:
	 第一范式(1NF):列不可拆分 , 即无重复的域。 
		 指数据库表的每一列都是不可分割的基本数据项。
		 符合第一范式的特点就有:有主关键字、主键不能为空、主键不能重复,字段不可以再分。
	 第二范式(2NF):唯一标识 ,即拥有实体的唯一标识(eg: 身份证、id号等)。
		 指每个表必须有且仅有一个数据元素为主关键字(Primary key),其他数据元素与主关 键字一一对应。这种关系为函数依赖。
		 符合第二范式的特点就有:满足第一范式的前提下,消除部分函数依赖。
	第三范式(3NF):引用主键 ,即每列数据都与主键直接相关。
		 符合第三范式的特点就有:不存在非主属性对码的传递性依赖以及部分性依赖 
	note:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。(需求>性能>表结构)

数据库支持的SQL数据类型常用的有哪些?

在这里插入图片描述

SQL数据类型varchar和char的区别?

	1)char是指固定长度的变量类型,char类型在查询时比varchar更有效率
	2)varchar是长度不固定的变量类型,varchar储存数据时不会浪费空间

SQL 约束有哪几种并解释含义(eg:NOT NULL、UNIQUE等)?

在这里插入图片描述

数据库内连表、左连表、右连表有什么区别?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SQL语句查询时如何实现分页?

SELECT * FROM TABLE_NAME LIMIT START, COUNT

什么是SQL注入?

用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象
	
	如何防止SQL注入?
	SQL语句参数化(使用%s占位符来传递参数)

数据库怎么优化查询效率(参考解释)?

	1). 储存引擎选择:如果数据表需要事务处理,应该考虑使用 InnoDB,因为它完全符合 ACID 特性。如果不需要事务处理,使用默认存储引擎 MyISAM 是比较明智的
	2). 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
	3). 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
	4). 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描
	5). 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描6). Update 语句,如果只更改 1、2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志7). 对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差。

SQL语句查询操作

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更新高崎的出生日期为1996-12-12.

在这里插入图片描述

统计员工总人数

在这里插入图片描述

统计入职时间超过2年的员工姓名

在这里插入图片描述

查找最晚入职员工的所有信息

在这里插入图片描述

查询最早入职员工的所有信息

在这里插入图片描述

查询成绩在85到90分之间的学生姓名、课程名和成绩(between and /inner join)
查询高等数学成绩最高的学生名和学生分数(max)
查询李军选修的课程名称(distinct)
发布了7 篇原创文章 · 获赞 0 · 访问量 82

猜你喜欢

转载自blog.csdn.net/qq_43210924/article/details/103983410