表中容许适当冗余,譬如,主题帖的回复数量和最后回复时间等4. UNION ALL 要比UNION 快不少,因此,若是能够确认合并的两个结果集中不包含重复数据且不须要排序时的话,那么就使用 UNIONALL。>>UNION 和 UNION ALL 关键字都是将两个结果集合并为一个,但这二者从使用和效率上来讲都有所不一样。>1. 对重复结果的处理:UNION 在进行表连接后会筛选掉重复的记录,Union All 不会去除重复记录。>2. 对排序的处理:Union 将会按照字段的顺序进行排序;UNION ALL 只是简单的将两个结果合并后就返回。
3.请简述经常使用的索引有哪些种类?
普通索引: 即针对数据库表建立索引
惟一索引: 与普通索引相似,不一样的就是:MySQL 数据库索引列的值必须惟一,但容许有空值
主键索引: 它是一种特殊的惟一索引,不容许有空值。通常是在建表的时候同时建立主键索引
组合索引: 为了进一步榨取 MySQL 的效率,就要考虑创建组合索引。即将数据库表中的多个字段联合起来做为一个组合索引。
4.以及在 mysql 数据库中索引的工做机制是什么?
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现一般使用 B 树及其变种 B+树
5.MySQL 的基础操做命令:
MySQL 是否处于运行状态:Debian 上运行命令 service mysqlstatus,在 RedHat上运行命令 service mysqld status
开启或中止 MySQL 服务 :运行命令 service mysqld start 开启服务;运行命令service mysqld stop 中止服务
Shell 登入 MySQL: 运行命令 mysql -u root -p
列出全部数据库:运行命令 show databases;
切换到某个数据库并在上面工做:运行命令 use databasename; 进入名为databasename 的数据库
列出某个数据库内全部表: show tables;
获取表内全部 Field 对象的名称和类型 :describe table_name;
6.mysql 的复制原理以及流程。
Mysql 内建的复制功能是构建大型,高性能应用程序的基础。将 Mysql 的数据分布到多个系统上去,这种分布的机制,是经过将 Mysql 的某一台主机的数据复制到其它主机(slaves)上,并从新执行一遍来实现的。* 复制过程当中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。php
readbuffersize >是 MySQL 读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL 会为它分配一段内存缓冲区。readbuffersize 变量控制这一缓冲区的大小。若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行得太慢,能够经过增长该变量值以及内存缓冲区大小提升其性能。
14.若一张表中只有一个字段 VARCHAR(N)类型,utf8 编码,则 N 最大值为多少(精确到数量级便可)?
因为 utf8 的每一个字符最多占用 3 个字节。而 MySQL 定义行的长度不能超过65535,所以 N 的最大值计算方法为:(65535-1-2)/3。减去 1 的缘由是实际存储从第二个字节开始,减去 2 的缘由是由于要在列表长度存储实际的字符长度,除以 3 是由于utf8 限制:每一个字符最多占用 3 个字节。服务器
15. [SELECT *] 和[SELECT 所有字段]的 2 种写法有何优缺点?
前者要解析数据字典,后者不须要
结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
表字段更名,前者不须要修改,后者须要改
后者能够创建索引进行优化,前者没法优化
后者的可读性比前者要高
16.HAVNG 子句 和 WHERE 的异同点?
语法上:where 用表中列名,having 用 select 结果别名
影响结果范围:where 从表读出数据的行数,having 返回客户端的行数
索引:where 可使用索引,having 不能使用索引,只能在临时结果集操做
where 后面不能使用汇集函数,having 是专门使用汇集函数的。
17.MySQL 当记录不存在时 insert,当记录存在时 update,语句怎么写?
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEYUPDATE c=c+1;微信
18.MySQL 的 insert 和 update 的 select 语句语法
SQL insert into student (stuid,stuname,deptid) select 10,'xzm',3from student where stuid > 8;
update student a inner join student b on b.stuID=10 seta.
stuname=concat(b.stuname, b.stuID) where a.stuID=10 ;
复制代码