Java EE知识储备(四)

来源:互联网 发布:win10激活 知乎 编辑:程序博客网 时间:2024/04/26 15:11

Java EE知识储备(四)

参考文献:[1]王珊,萨师煊.数据库系统概论(第四版)[M].北京:清华大学出版社,2013;

目录:

1、MySQL导入导出数据库操作:

2、关系模型(数据库)的完整性:

3、强类型语言和弱类型语言、动态类型语言和静态类型语言:

4、一条SQL语句的执行顺序:

5、DDL、DCL、DQL、DML:

6、索引:

7、Statement和PreparedStatement的执行速度对比:

8、MySQL主从复制:

9、数据冗余:

10、SQL执行计划:


1、MySQL导入导出数据库操作:

答:mysqldump是常用的逻辑备份工具,可以做库级、表级备份,也可以备份表结构。

(1)导出整个数据库:

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -uroot -p springmvclearn > a.sql

 

图1.1 命令行语句1

 

图1.2 运行结果1

(2)导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -uroot -p springmvclearn -p springmvclearn user > user.sql

 

图1.3 命令行语句2


图1.4 运行结果2

(3)导入一个表:

进入到数据库“test”后,source 导入的文件名

source user.sql

 

图1.5 执行语句

 

2、关系模型(数据库)的完整性:

答:数据库的完整性是指数据的正确性和相容性,为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。

数据库的安全性是保护数据库防止恶意的破坏和非法的存取。

(1)实体完整性:

若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。关系模型的实体完整性在create table中用primary key定义。

①检查主码值是否唯一,如果不唯一则拒绝插入或修改。

②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。

(2)参照完整性:

关系模型的参照完整性在create table中用foreign key短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码。

参照的关系中的属性必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。

(3)用户定义的完整性:

针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。

属性值限制:

①列值非空(not Null短语)

②列值唯一(unique短语)

③检查列值是否满足一个布尔表达式(check短语)

元组级限制:

①用check短语定义元组上的约束条件

(4)域完整性:

域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。

 

3、强类型语言和弱类型语言、动态类型语言和静态类型语言:

答:(1)强类型语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。如Python、Java

(2)弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。如VBScript、JavaScript

(3)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,在用动态类型的语言编程时,不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。如Python、Ruby、VBScript

(4)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译期间检查,在写程序时要声明所有变量的数据类型。如C、C++、Java、C#

 

4、SELECT class,count(class) FROM classroom WHERE class>10 GROUP BY class HAVING count(class) > 3 ORDER BY class的执行顺序:

答:from到where到group by到having到select到order by。

 

图4.1 SQL语句执行过程

 

5、DDL、DCL、DQL、DML:

答:(1)数据库定义语言:DDL,数据库定义语言用于创建、修改和删除数据库内的数据结构。create,drop,alter

(2)数据库查询语言:DQL,数据查询语言用于从数据库中的一个或多个表中查询指定的数据。select,from,where

(3)数据操作语言:DML,用于修改数据库中的数据,包括查询、插入、更新和删除数据。select,insert,update,delete

(4)数据控制语言:DCL,用于控制对数据库的访问。grant,deny,revoke

 

6、索引:

答:在一个表中可以建立多个普通索引,多个唯一索引,多个候选索引,一个主索引。

(1)普通索引:普通索引的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDERBY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。普通索引没有任何限制,不能唯一标识一条记录,可以任意建立,数量不限。

(2)唯一索引:添加唯一性索引的数据列可以为空,但是只要存在数据值,就必须是唯一的。

(3)候选索引能唯一标识一条记录,但不一定只由一个字段组成,可以由两个或两个以上字段组成,一个表可以建立多个候选索引。

(4)主索引是候选索引的特例,能唯一标识一条记录,一般为主键设置主索引。一个表只能建立一个主索引。

 

7、Statement和PreparedStatement的执行速度对比:

答:一般而言,PreparedStatement比Statement执行效率更高,因为Preparedment会预编译SQL语句,已经绑定SQL,之后无论执行多少遍,都不会再去进行编译,而 statement 不同,如果执行多遍,则相应的就要编译多少遍SQL。

尽量使用PreparedStatement,可以提高安全性。

即使没有开启MySQL端的预编译,我们仍然要坚持使用PreparedStatement,因为JVM端对PreparedStatement的SQL语句进行了参数化,即用占位符替换参数,以后任何内容输入都是字符串或其它类型的值,而不会和原始的SQL语句拼接产生SQL注入,对字符串中的任何字符都会做检查,如果可能是SQL语句使用的标识符,会进行转义。然后发送一个合法的安全的SQL语句给数据库执行。

Statement statement = conn.createStatement();

PreparedStatement preStatement = conn.prepareStatement(sql);

执行的时候:

ResultSet rSet = statement.executeQuery(sql);

ResultSet pSet = preStatement.executeQuery();

 

8、MySQL主从复制:

答:Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,必须小心,避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

复制步骤:

①主服务器将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

②从服务器将主服务器的binary log events拷贝到它的中继日志(relay log);

③从服务器重做中继日志中的事件,将改变反映它自己的数据。

 

9、数据冗余:

答:数据库中,数据存在副本的现象,就是数据冗余。通过分类存储,可以有效减少数据冗余,但是会增加数据查找的复杂性。在数据库设计阶段,一定要尽最大可能避免数据冗余,但应该有一些必要的冗余,用来建立表之间的联系,减少表连接操作,提高查询性能。

 

10、SQL执行计划:

答:在MySQL里,使用explain关键字查看SQL的执行计划。

 

图10.1 执行结果

负责处理或计算最优的执行计划的DB Server组件叫优化器。优化器是建立在其所在的DB资源的基础上而进行工作的。

数据库在执行SQL语句之前会制定几套执行计划。谁消耗的系统资源少,就用那套计划执行。


3 0
原创粉丝点击