mysql问题举例_MySql问题总结
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问题总结相关推荐
- mysql特性举例_MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.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 ...
- windows 新建mysql权限设置_Windows下设置MySQL安全权限_mysql
注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改. 文中提及的权限都是在原有权限上附加的权限. [修改步骤] 1.创建用户 创建一个名 ...
- mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...
- mysql checksum用法_MySQL checksum理解_mysql
mysql checksum了解 在主从复制中Checksum常常需要对某些重要的表进行一致性检查. Checksum Table在逻辑备份时候前后是否可以用于验证数据一致性.扩展一下发现有一些有趣的 ...
- mysql ibata文件_重装系统后,怎么调用之前mysql的数据_mysql
重装系统后,如何调用之前mysql的数据 前提是:必须保留之前的数据库数据 在介绍此方法之前,提醒各位最好的转移数据的方法为: 在原来MYSQL服务器导出SQL文件,然后再在新的MYSQL服务器导入数 ...
- mysql隔离级别 举例_mysql的事务隔离级别举例
事务是怎么回事,之前已经聊过(参见Oracle事务的隔离),无关哪个数据库,只要提到事务,都是这四种隔离级别.mysql的默认隔离级别是3--可重复读.更重要的是,是否支持事务,跟mysql的存储引擎 ...
- mysql 举例_MySQL 语句举例(一)
举例:有10个用户,输出在订单表中下单数最多的5个人的名字. my_user 表数据 my_order,uid对应my_user表的id 测试数据生成 写一个存储过程,随机插入10000条数据: CR ...
- MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)
目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...
最新文章
- Java字符串那些事儿
- Netty入门之Netty的基本介绍和IO模型
- Reference 字段的详情弹窗icon显示或者隐藏
- Python练习-从小就背不下来的99乘法表
- React开发(225):render中返回的值可以定义为一个方法
- 消息队列_消息队列:kafka
- Android开发笔记(一百零六)支付缴费SDK
- Python Tricks(八)—— 斐波那契数列的另类实现
- IT技术中的言情小说
- 【组合数学】递推方程 ( 有重根下递推方程通解结构 | 线性无关解 | 有重根下的通解 | 有重根下的递推方程求解示例 | 递推方程公式解法总结 ) ★
- 定时任务cron表达式
- 原生小程序 引入vant-weapp 组件库 和 WeUI组件库
- 推荐给大家一个网络工程标书模版(仅供参考)
- 【CSDN】博文导入微信公众号
- python--单例模式
- 数据挖掘 文本分类(四)批处理分词
- javaweb——jsp动作标签
- 攻防世界——web高手进阶区题解
- 【统计理论】关于置信度、置信区间的理解
- 如何学习数据分析(总结自网易及B站up主)
热门文章
- access在sql中横向求和_access在sql中横向求和_求和还用Sum函数就out了,快捷键Alt+=一秒搞定,操作简单更高效......
- 服务器操作系统锁定设置,服务器操作系统锁定设置
- python手把手入门_新手必看:手把手教你入门 Python
- hanlp是开源的吗_自然语言处理之:搭建基于HanLP的开发环境(转)
- python属性访问顺序_Python 对象属性的访问
- dw_mysql】apache_怎么将dreamweaver与apache服务器连接
- python提取每个单词首字母_Python 2:str.title()(使字符串每个单词首字母大写)...
- 接受许可协议 将禁用_知识产权小知识|知识产权许可
- 中国移动雄安研究院 2020校园招聘笔试JAVA方向(一)
- 百练OJ:2943:小白鼠排队