[mysql] 基础知识

3、数据库两种引擎

MYISAM:拥有较高的执行速度,并发性能差,占用空间相对较小,对事务完整性没有要求,以
select、insert为主的应用基本上可以使用这引擎
Innodb:提供了具有提交、回滚和崩溃回复能力的事务安全,并发能力强

  1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
  2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
  3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
  6. InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

x、redo log与binlog的区别

  1. redolog是InnoDB引擎特有的;binlog是MySQL的server层实现的,不管哪种引擎,都会有binlog。。
  2. 两种日志记录的内容形式不同。MySQL的binlog是逻辑日志,其记录是对应的SQL语句。而innodb存储引擎层面的重做日志是物理日志。
  3. 两种日志与记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写入。而innodb存储引擎的重做日志在事务进行中不断地被写入,并且日志不是随事务提交的顺序进行写入的。
  4. binlog不是循环使用,在写满之后,会生成新的binlog文件,redo log是循环使用,从文件头开始写,写到末尾,然后又从开头开始写。
  5. binlog可以作为恢复数据使用,主从复制搭建,redo log作为异常宕机或者介质故障后的数据恢复使用。
  6. 写入顺序:先写入redo log,并将其置为prepared状态,此时binlog不做操作。事务提交时写入binlog,然后将redolog改为commit状态。

x、数据库的dml、ddl和dcl的概念

  • DML(Data Manipulation Lanaguage,数据操纵语言)
    DML就是我们经常用到的SELECT、INSERT、UPDATE和DELETE语句,主要是用来对数据进行CRUD操作。
  • DDL(Data Definition Language,数据定义语言)
    DDL就是我们在创建表的时候用到的一些语句,比如说CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构、数据类型、表之间的链接或约束等初始化工作上。
  • DCL(Data Control Language,数据库控制语言)
    DCL是用来设置或更改数据库用户或角色权限的语句,包括GRANT、DENY、REVOKE等语句,这个层面应该主要是DBA做的事情了,但是如果是在小公司可能你还是要干,像部署数据库的时候你不会怎么行,特别是ORACLE这种用户驱动的数据库。

x、truncate和delete的区别

  1. truncate删除数据后自增列会重新从1开始,而delete删除数据后只会从删除前的最后一行续写;所以truncate更省空间也更快
  2. delete属于DML语句,可以由操作者进行回滚和提交操作,而truncate属于DDL语句,执行后会自动commit,所以不可以回滚
  3. delete from 表名 (可用where子句进行选择性删除),truncate 表名(直接删除全表)

67、完整性约束包括哪些?

数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。 分为以下四类:

  1. 实体完整性:规定表的每一行在表中是惟一的实体。

  2. 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

  3. 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

  4. 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。与表有关的约束:包括列约束(NOT NULL(非空约束))和表约束(PRIMARY KEY、foreign key、check、UNIQUE) 。

70、什么是存储过程?用什么来调用?

答:存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。可以用一个命令对象来调用存储过程。
在这里插入图片描述

73、试述视图的优点?

(1) 视图能够简化用户的操作
(2) 视图使用户能以多种角度看待同一数据;
(3) 视图为数据库提供了一定程度的逻辑独立性;
(4) 视图能够对机密数据提供安全保护

49、MySQL 里记录货币用什么字段类型好

NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。

例如:salary DECIMAL(9,2)

在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而 2(scale)代表将被用于存储小数点后的位数。因此,在这种情况下,能被存储在 salary 列中的值的范围是从-9999999.99 到9999999.99

JDBC进阶

3、Statement 和 PreparedStatement 有什么区别?哪个性能更好?

与 Statement 相比

  • PreparedStatement 接口代表预编译的语句,它主要的优势在于可以减少 SQL 的编译错误并增加 SQL 的安全性(减少 SQL 注射攻击的可能性);
  • PreparedStatement中的 SQL 语句是可以带参数的,避免了用字符串连接拼接 SQL 语句的麻烦和不安全;
  • 当批量处理 SQL 或频繁执行相同的查询时,PreparedStatement 有明显的性能上的优势,由于数据库可以将编译优化后的 SQL 语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成
    执行计划)。

4、使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?

  • 要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的 setFetchSize()方法指定每次抓取的记录数(典型的空间换时间策略);
  • 要提升更新数据的性能可以使用PreparedStatement 语句构建批处理,将若干 SQL 语句置于一个批处理中执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值