01. 列举常见的关系型数据库和非关系型都有那些?

1.关系型数据库通过外键关联来建立表与表之间的关系,---------常见的有:SQLite、Oracle、mysql

2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定 ---常见的有:MongoDb、redis

02. MySQL常见数据库引擎及比较?  

MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。

· InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。(提供行级锁)

· BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

· Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

· Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

· Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

· Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

· Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。 · Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

一般来说不使用事务的话,请使用MyISAM引擎,使用事务的话,一般使用InnoDB ------仙子啊学习现在我们用的主要是InnoDB 注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

03. 简述数据三大范式?

什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些
规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

什么是三大范式:

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要

求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.
注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

04. 什么是事务?MySQL如何支持事务?  

事务就是一段sql 语句的批处理,但是这个批处理是一个原子 ,不可分割,要么都执行,要么回滚(rollback)都不执行。

事务具体四大特性,也就是经常说的ACID :

1.原子性(所有操作要么全部成功,要么全部失败回滚)

2.一致性(事务执行之前和执行之后都必须处于一致性状态。)

3.隔离性(数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离)

4.持久性(一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使遭遇故障依然能够通过日志恢复最后一次更新)
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交

05. 简述数据库设计中一对多和多对多的应用场景?  

一对多:学生与班级---一个学生只能属于一个班级,一个班级可以有多个学生

多对多:学生与课程---一个学生可以选择多个课程,一个课程也可以被多个学生选择

06. 如何基于数据库实现商城商品计数器?

创建一个商城表---包含(id,商品名,每一个商品对应数量)

create table product

  (id primary key auto_increment,

    pname varchar(64),

     pcount int);

07. 简述触发器、函数、视图、存储过程?

触发器:触发器是一个特殊的存储过程,它是MySQL在insert、update、delete的时候自动执行的代码块。

create trigger trigger_name

   after/before insert /update/delete on 表名

   for each row

   begin

   sql语句:(触发的语句一句或多句)

   end

函数:MySQL中提供了许多内置函数,还可以自定义函数(实现程序员需要sql逻辑处理)

   自定义函数创建语法:

       创建:CREATE FUNCTION 函数名称(参数列表)
 

          RETURNS 返回值类型
 函数体

  修改: ALTER FUNCTION 函数名称 [characteristic ...]

   删除:DROP FUNCTION [IF EXISTS] 函数名称

   调用:SELECT 函数名称(参数列表)

  

  
视图:视图是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影

      create view view_name as select 语句

   存储过程:把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行sql语句效率高)

   create procedure 存储过程名(参数,参数,…)

   begin

   //代码

   end

08. MySQL索引种类

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度

MySQL索引的类型:

   1. 普通索引:这是最基本的索引,它没有任何限制

   2.唯一索引:索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一

   3.全文索引:全文索引仅可用于 MyISAM 表,可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加
(切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法)

   4. 单列索引、多列索引:多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

   5.组合索引(最左前缀):简单的理解就是只从最左面的开始组合(实在单列索引的基础上进一步压榨索引效率的一种方式)

09. 索引在什么情况下遵循最左前缀的规则?  

10. 主键和外键的区别?  

1.主键是能确定一条记录的唯一标识

2.外键用于与另一张表的关联,是能确定另一张表记录的字段,用于保持数据的一致性

11. MySQL常见的函数?  

聚合函数:

   AVG(col)返回指定列的平均值

   COUNT(col)返回指定列中非NULL值的个数

   MIN(col)返回指定列的最小值

   MAX(col)返回指定列的最大值

   SUM(col)返回指定列的所有值之和

   GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果

数学函数:

   ABS(x) 返回x的绝对值

   BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)

12. 列举 创建索引但是无法命中索引的8种情况。  

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

2.对于多列索引,不是使用的第一部分,则不会使用索引

3.like查询是以%开头

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

6 对小表查询

7 提示不使用索引

8 统计数据不真实

9.单独引用复合索引里非第一位置的索引列.

13. 如何开启慢日志查询?  

1 执行 SHOW VARIABLES LIKE “%slow%”,获知 mysql 是否开启慢查询
slow_query_log 慢查询开启状态 OFF 未开启 ON 为开启
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)

2 修改配置文件( 放在[mysqld]下),重启
long_query_time 查询超过多少秒才记录

3 测试是否成功

4 慢查询日志文件的信息格式

14. 数据库导入导出命令(结构+数据)?    

1.导出整个数据库
 

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

例如:C:\Users\jack> mysqldump -uroot -pmysql sva_rec > e:\sva_rec.sql
 

 2.导出一个表,包括表结构和数据
 

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

例如:C:\Users\jack> mysqldump -uroot -pmysql sva_rec date_rec_drv> e:\date_rec_drv.sql
 

 3.导出一个数据库结构
 

 例如:C:\Users\jack> mysqldump -uroot -pmysql -d sva_rec > e:\sva_rec.sql

4.导出一个表,只有表结构
 

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

例如:C:\Users\jack> mysqldump -uroot -pmysql -d sva_rec date_rec_drv> e:\date_rec_drv.sql
  

5.导入数据库
  

常用source 命令
  

进入mysql数据库控制台,
  

如mysql -u root -p
  mysql>use 数据库
  

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
  

mysql>source d:wcnc_db.sql

15. 数据库优化方案?

总体思路从以下几个方面:

1、选取最适用的字段属性

2、使用连接(JOIN)来代替子查询(Sub-Queries)

3、使用联合(UNION)来代替手动创建的临时表

4、事务(当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰)

5.锁定表(有些情况下我们可以通过锁定表的方法来获得更好的性能)

6、使用外键(锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键)

7、使用索引

8、优化的查询语句(绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用)

16. char和varchar的区别?

char:定长,char的存取数度相对快

varchar:不定长,存取速度相对慢

到底如何取舍可以根据一下几个方面考虑:

1、对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;

2、对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),
所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利;

3、存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。

4、固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。

5、十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。

17. 简述MySQL的执行计划?

执行计划explain命令是查看查询优化器如何决定执行查询的主要方法。

这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,通过输出结果反推执行过程

18. 在对name做了唯一索引前提下,简述以下区别:

select * from tb where name = ‘Oldboy’ -------------查找到tb表中所有name = ‘Oldboy’的数据

select * from tb where name = ‘Oldboy’ limit 1------查找到tb表中所有name = ‘Oldboy’的数据只取其中的第一条

6月11日 python复习 mysql的更多相关文章

  1. 4月11日 python学习总结 对象与类

    1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...

  2. 6月5日 python复习 模块

    """1. os和sys都是干什么的?2. 你工作中都用过哪些内置模块?3. 有没有用过functools模块?"""1. os 系统相关 ...

  3. 6月11日 python学习总结 框架理论

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...

  4. 6月7日 python 复习 collections

    collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...

  5. 6月6日 python复习 面向对象

    1.面向对象编程 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题 ...

  6. 5月11日 python学习总结 子查询、pymysql模块增删改查、防止sql注入问题

    一.子查询 子查询:把一个查询语句用括号括起来,当做另外一条查询语句的条件去用,称为子查询 select emp.name from emp inner join dep on emp.dep_id ...

  7. IT培训行业变革大会,7月11日启程!

    自上世纪八十年代PC时代起,IT行业走过了以2G移动网络和宽带网络.PC终端为主要载体,软件产品.应用软件和门户网站为特征产品的PC互联网时代. 以3/4G移动和高速宽带和移动终端为主要载体,移动支付 ...

  8. 【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示

    这篇博客是在2022年6月11日的[开源云原生]大会上的演讲中的演示部分.k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常实用. k8s集群套娃( ...

  9. Yoshua Bengio 2016年5月11日在Twitter Boston的演讲PPT

    Yoshua Bengio最新演讲:Attention 让深度学习取得巨大成功(46ppt) Yoshua Bengio,电脑科学家,毕业于麦吉尔大学,在MIT和AT&T贝尔实验室做过博士后研 ...

随机推荐

  1. gpg 使用入门

    1. 生成秘钥 gpg --full-generate-key 等价于 gpg --full-gen-key Real name: yellowconvict为该秘钥的名字,也称为 USER-ID 在 ...

  2. SonarQube之采购选型参考

    SonarQube是DevOps实践中主流的一款质量内建工具,过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyle.findbugs ...

  3. DubboSPI机制二之Dubbo中SPI初体验

    Dubbo高级之一SPI机制之JDK中的SPI - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中阐述了JDK标准的SPI,并对其应用做了相应的实践.在实际应用中,很多框架都会对其进行扩展 ...

  4. 如何删除远端已经推送的Commit记录???(Git版本回退)

    如何删除远端已经推送的Commit记录???(Git版本回退) 简单描述 突然事件:刚刚,就在刚刚,发生误了操作. 操作描述:我把修改的文件保存错分支了,已经commit了.并且还push上去了.对, ...

  5. c++隐式类型转换存在的陷阱

    目录 目标代码 构造函数定义的隐式类型转换 分析a1 分析a2 分析a3 目标代码 旨在弄懂下面的代码,明确变量a1,a2,a3在创建时编译器究竟干了那些事: #include<iostream ...

  6. k8s核心资源之:名称空间(ns)

    简介 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或者用户组. 常见的pod.service.replicaSet和deployment等都是属于某一个namespac ...

  7. linux下使用fcrackzip来暴力破解zip压缩包

    我是在kali上安装的,用命令sudo apt-get install fcrackzip 现在做一个例子,首先生成一个带有密码的zip的包 zip -P hujhh test.zip test1.t ...

  8. Tableau“出走中国”,“卖”给阿里,中国BI用户该何去何从?

    11月,Tableau在发给客户的邮件中透露将停止中国的直销业务,加入阿里的合作体系.消息来的如此突然,Tableau的同仁.合作伙伴.客户.用户.爱好者,甚至友商,无一不感到震惊和担忧. 在我们数据 ...

  9. excel制作折线图太麻烦?试试这些折线图在线生成工具

    折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图.用折线的起伏表示数据的增减变化情况,不仅可以表示数量的多少,而且可以反映数据的增减变化情况.并且折线图也是目前最方便的一种统 ...

  10. C#内联函数 特性 MethodImplOptions.AggressiveInlining)

    [MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数 ...