Q1:主键,外键,超键,候选键;

主键 对表中数据进行唯一标识的数据列的组合;不能缺失;不能空值;

外键 该列为另一表的主键;

超键 关系中能唯一标识数据的属性;

候选键 不含多余属性的超键;

Q2:数据库事务的四个特征及含义;

原子性 要么全部完成,要么不完成,若发生错误会进行回滚操作;

一致性 开始到结束后,数据库完整性约束没收到破坏;(实体完整性,参照完整性,用户定义的完整性)

隔离性 事务与事务之间相隔离,串行化执行;

持久性 事务完成对数据的影响是永久的;

Q3:视图的作用,可以更改吗;

视图是虚拟的表;只包含动态检索数据的查询,不包含数据;简化操作,隐藏细节,保护数据;对视图的更新会作用于基表,一般不更新;

Q4:drop,delete和truncate ;

drop 表级的删除;不能回滚;

truncate 清空表;不记录单行删除日志;无法恢复;只能对于TABLE操作;不能在带FOREIGN KEY约束的表(被引用的表)中使用;计数从头开始;

delete 配合where删除数据;会记录日志用于回归;会触发触发器;不减少索引和表的空间;

Q5:索引的工作原理和其种类;

索引的实现通常采用B树或B+树,加快查询速度也消耗更多空间;

唯一索引 不允许任何两行具相同值

主键索引 唯一索引的一种

聚集索引 行的物理顺序和键值的索引顺序相同

普通索引 无限制

全文索引 针对较大的数据生成全文索引很耗时间空间

组合索引 最左前缀原则:若对多列建立组合索引,若第二列未使用索引,则第三列也不会使用

InnoDB 主索引:InnoDB的数据文件本身;辅助索引:相应记录主键的值

MyISAM 索引与数据分离;辅助索引:与主索引无区别;

Q6:连接的种类

内部联接(等值联接) INNER JOIN

外部联接(包含在相关表中没有关联行的行) LEFT OUTER JOIN

RIGHT OUTER JOIN

Q7:数据库范式

1NF 每一列都是不可分割的基本数据项,同一列无二值;无重复的域;

2NF 实例依赖于主键部分;

3NF 属性不依赖于其他非主属性;

Q8:存储过程与触发器的区别

存储过程和触发器都是SQL语句集;触发器不可用CALL调用,而是在用户执行某些语句后自动调用;

Q9:分表与分区

分表 真正的分表,每张表对应三个文件;提高MYSQL的并发能力;

分区 表中的数据分成多个区块;突破磁盘的读写能力;

Q10:数据库隔离级别

脏读 一个事务读取了另一个事务未提交的数据

不可重复读 在一次事务范围内,读取同一数据产生了不同的值

虚读 读取整体的数据后,因其他事务对数据的更新,再次查询时结果不同

串行化 3种均可避免

可重复读(默认) 避免1,2

读已提交 1

读未提交 无

Q11:MYSQL的两种存储引擎

MYISAM 不支持事务,不支持外键,表锁;插入数据时锁定整个表,查行数时无需整表扫描

INNODB 支持事务,外键,行锁,查表总行数时,全表扫描;

Q12:MYSQL索引算法

HASH 适合等值查找,不适合范围,不能排序

BTREE 适合范围查找,无hash冲突

Q13:聚集索引和非聚集索引

聚集索引 数据按索引顺序存储,节点存储的是真实数据

非聚集索引 节点存储的是指向真正数据的指针

Q14:索引的优缺点

优点 提高查询效率

缺点 降低了更新效率

Q15:两种存储引擎索引的区别

Innodb 主索引的数据文件本身就是索引文件;辅助索引记录主键的值;

MyISAM 主索引数据文件和索引文件分离;与主索引无区别;

Q16:数据库的主从复制

一个服务器作为主服务器,一个或多个服务器作为从服务器,主服务器将更新写到二进制日志,当一个从服务器连接到主服务器时,通知主服务器读取日志,接收从那时起发生的所有更新。解决:数据分布,负载平衡,备份,高可用性和容错性

基于语句 在主服务器上执行的语句,在从服务器上也执行

基于行 将改变的内容复制过去

混合类型 语句复制失败时采用行的形式

Q17:数据库连接池

为数据库连接建立一个缓冲池,防止过于大量的连接的建立与管理;

Q18:存储过程

存储过程是一些预编译的SQL语句,执行效率较高

Q19:乐观锁和悲观锁

乐观锁 假定不会发生并发冲突,只在提交时检查,若有其他数据更新了数据,则回滚;使用数据版本标示数据(时间戳,版本号)

悲观锁 假定会发生并发冲突,屏蔽一切破坏数据库一致性的操作,主要用于数据争用激烈的环境,以及锁成本低于回滚成本时;排他锁;

25、 对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:

a)、索引的目的是什么?

快速访问数据表中的特定信息,提高检索速度

创建唯一性索引,保证数据库表中每一行数据的唯一性。

加速表和表之间的连接

使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

b)、索引对数据库系统的负面影响是什么?

负面影响:

创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

c)、为数据表建立索引的原则有哪些?

在最频繁使用的、用以缩小查询范围的字段上建立索引。

在频繁使用的、需要排序的字段上建立索引

d)、 什么情况下不宜建立索引?

对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。

对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等

26、 简述在MySQL数据库中MyISAM和InnoDB的区别

区别于其他数据库的最重要的特点就是其插件式的表存储引擎。切记:存储引擎是基于表的,而不是数据库。

InnoDB与MyISAM的区别:

InnoDB存储引擎:主要面向OLTP(Online Transaction Processing,在线事务处理)方面的应用,是第一个完整支持ACID事务的存储引擎(BDB第一个支持事务的存储引擎,已经停止开发)。

特点:

· 行锁设计、支持外键,支持事务,支持并发,锁粒度是支持mvcc得行级锁;

MyISAM存储引擎:是MySQL官方提供的存储引擎,主要面向OLAP(Online Analytical Processing,在线分析处理)方面的应用。

特点:

不支持事务,锁粒度是支持并发插入得表级锁,支持表所和全文索引。操作速度快,不能读写操作太频繁;

SQL常用的一些关键字

1、distinct关键字

显示没有重复记录的商品名称,商品价格和商品类别列表

select distinct ware_name,price from t_ware;

2、使用计算列

查询所有商品价格提高20%后的价格

select ware_id,ware_name,price*1.2 from t_ware'

3、列的别名

a) 不使用as

select ware_id,ware_name,price*1.2 price_raise from t_ware;

b)使用as

select ware_id,ware_name,price*1.2 price_raise from t_ware;

4、使用逻辑表达式

a)not 显示商品价格不大于100的商品

select ware_id,ware_name,price,category_id from t_ware where not price>100;

b)or 显示商品类别编号为5或6或7的商品

select ware_id,ware_name,price,category_id from t_ware where category_id or category_id=6 or category_id=7;

c)and 显示商品价格大于100且商品类别编号为5的商品

select ware_id,ware_name,price,category_id from t_ware where not price>100 and category_id = 5;

5、使用between关键字

显示商品价格在200元至1000元之间的商品(留心一下,是半开区间还是封闭区间?)

select ware_id,ware_name,price,category_id from t_ware where price between 200 and 1000;

6、使用in关键字

显示商品类别为5,6,7且价格不小于200元的商品

select ware_id,ware_name,price,category_id from t_ware where category_id in (5,6,7) and price>=200;

7、使用like子句进行模糊查询

a)%(百分号)表示0到n个任意字符

select ware_id,ware_name,price,category_id from t_ware where ware_name like '%纯棉%';

b)_(下划线)表示单个的任意字符

select ware_id,ware_name,price,category_id from t_ware where ware_name like  '%长袖_恤%';

8、转义字符escape的使用

select ware_id,ware_name,price,category_id from t_ware where ware_name like '%\%%' escape '\';

9、使用order by给数据排序

select * from t_ware_category where parent_id = 0 order by ware_id ;

select * from t_ware_category where parent_id = 0 order by ware_id asc;

select * from t_ware_category where parent_id = 0 order by ware_id desc ;

rownum

a)查询前20条商品记录

select ware_id,ware_name,price from t_ware where rownum <= 20;

b)查询第11条至第20条记录

select ware_id,ware_name,price from t_ware where rownum<=10 and ware_id not in(select ware_id from t_ware where rownum<=10);

10、常用统计函数

a)sum()返回一个数字列或计算列的总和 select sum(price) from t_ware;

b)avg()对一个数字列或计算列球平均值

c)min()返回一个数字列或一个数字表达式的最小值

d)max()返回一个数字列或一个数字表达式的最大值

e)count()返回满足select语句中指定的条件的记录值

11、多表查询和笛卡尔乘积

查询商品编号,商品名称,商品价格和商品类别名称

select t_ware.ware_id, t_ware.ware_name, t_ware.price ,t_ware_category_name from t_ware, t_ware_category  where t_ware.category_id=t_ware_category.category_id;

使用join

a)左连接

select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware left join t_ware_category on t_ware.category_id=t_ware_category.category_id;

select w.ware_id,w.ware_name,w.price,wc.category_name from t_ware w left join t_ware_category wc on w.category_id=wc.category_id;

b) 右连接

select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware left join t_ware_category on t_ware.category_id=t_ware_category.category_id;

12、使用union

select ware_id,ware_name from t_ware where ware_name like '%T恤%' union select ware_id,ware_name from t_ware where ware_name like '%手提包%'

13、使用group by

a)统计每个二级类别下有多少商品,以及商品总价值

select w.category_id,wc.category_name,count(w.ware_id),sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id group by w.category_id,wc.category_name;

b) 统计每个一级类别下有多少商品,以及商品总价值

select wc2.category_id,wc2.category_name,sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id left join t_ware_category wc2 on wc.parent_id=wc2.category_id group by wc2.category_id,wc2.category_name;

14、使用having对结果进行筛选

–举例子说明:查询table表查询每一个班级中年龄大于20,性别为男的人数

select COUNT(*)as '>20岁人数',classid  from Table1 where sex='男' group by classid,age having age>20

需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:

执行where子句查找符合条件的数据;

使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。

having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle.

having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。

having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以

mysql问题举例_MySql问题总结相关推荐

  1. mysql特性举例_MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2 ...

  2. mysql 汉编码 的选_peewee连接mysql汉语言数据编码_mysql

    peewee连接mysql中文数据编码 系统是win7 x64 python 2.7.6的site.py里面编码设定为 utf-8 py文件首行指定 #coding:utf-8 mysql 5.5.3 ...

  3. windows 新建mysql权限设置_Windows下设置MySQL安全权限_mysql

    注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改. 文中提及的权限都是在原有权限上附加的权限. [修改步骤] 1.创建用户 创建一个名 ...

  4. mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总

    前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...

  5. mysql checksum用法_MySQL checksum理解_mysql

    mysql checksum了解 在主从复制中Checksum常常需要对某些重要的表进行一致性检查. Checksum Table在逻辑备份时候前后是否可以用于验证数据一致性.扩展一下发现有一些有趣的 ...

  6. mysql ibata文件_重装系统后,怎么调用之前mysql的数据_mysql

    重装系统后,如何调用之前mysql的数据 前提是:必须保留之前的数据库数据 在介绍此方法之前,提醒各位最好的转移数据的方法为: 在原来MYSQL服务器导出SQL文件,然后再在新的MYSQL服务器导入数 ...

  7. mysql隔离级别 举例_mysql的事务隔离级别举例

    事务是怎么回事,之前已经聊过(参见Oracle事务的隔离),无关哪个数据库,只要提到事务,都是这四种隔离级别.mysql的默认隔离级别是3--可重复读.更重要的是,是否支持事务,跟mysql的存储引擎 ...

  8. mysql 举例_MySQL 语句举例(一)

    举例:有10个用户,输出在订单表中下单数最多的5个人的名字. my_user 表数据 my_order,uid对应my_user表的id 测试数据生成 写一个存储过程,随机插入10000条数据: CR ...

  9. MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)

    目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...

最新文章

  1. Java字符串那些事儿
  2. Netty入门之Netty的基本介绍和IO模型
  3. Reference 字段的详情弹窗icon显示或者隐藏
  4. Python练习-从小就背不下来的99乘法表
  5. React开发(225):render中返回的值可以定义为一个方法
  6. 消息队列_消息队列:kafka
  7. Android开发笔记(一百零六)支付缴费SDK
  8. Python Tricks(八)—— 斐波那契数列的另类实现
  9. IT技术中的言情小说
  10. 【组合数学】递推方程 ( 有重根下递推方程通解结构 | 线性无关解 | 有重根下的通解 | 有重根下的递推方程求解示例 | 递推方程公式解法总结 ) ★
  11. 定时任务cron表达式
  12. 原生小程序 引入vant-weapp 组件库 和 WeUI组件库
  13. 推荐给大家一个网络工程标书模版(仅供参考)
  14. 【CSDN】博文导入微信公众号
  15. python--单例模式
  16. 数据挖掘 文本分类(四)批处理分词
  17. javaweb——jsp动作标签
  18. 攻防世界——web高手进阶区题解
  19. 【统计理论】关于置信度、置信区间的理解
  20. 如何学习数据分析(总结自网易及B站up主)

热门文章

  1. access在sql中横向求和_access在sql中横向求和_求和还用Sum函数就out了,快捷键Alt+=一秒搞定,操作简单更高效......
  2. 服务器操作系统锁定设置,服务器操作系统锁定设置
  3. python手把手入门_新手必看:手把手教你入门 Python
  4. hanlp是开源的吗_自然语言处理之:搭建基于HanLP的开发环境(转)
  5. python属性访问顺序_Python 对象属性的访问
  6. dw_mysql】apache_怎么将dreamweaver与apache服务器连接
  7. python提取每个单词首字母_Python 2:str.title()(使字符串每个单词首字母大写)...
  8. 接受许可协议 将禁用_知识产权小知识|知识产权许可
  9. 中国移动雄安研究院 2020校园招聘笔试JAVA方向(一)
  10. 百练OJ:2943:小白鼠排队