mysql初级试题

1.数据库设计规划阶段的主要任务?
进行建立数据厍的必要性及可行性分析,确定数据厍系统在组织中和信息系统中的地位,以及各个数据厍之间的联系

2.mysql中与权限相关的表,每个表的含义?
存储账户权限信息表主要有:user,db,tables_priv,columns_priv,procs_priv 这五张表(5.6之前还有host表,现在已经把host内容整合进user表),其含义分别是:

user表
user表记录允许连接到服务器的账号信息,里面的权限是全局级的。例如:一个用户在user表中被授予了DELETE权限,则该用户可以删除MySQL服务器上所有数据库的任何记录。

db表
db表存储了用户对某个数据库的操作权限,决定用户能从哪个主机存储哪个数据库。User表中存储了某个主机对数据库的操作权限,配置和db权限表对给定主机上数据库级操作权限做更细致的控制。

tables_priv and columns_priv表
table_priv表示对表的操作权限包括、select、insert、update、delete、create、drop、grant、references、index和alter。
column_priv字段表示对表中的列的操作权限,包括select、insert、update和references。

procs_priv表
存储过程和存储函数相关的权限

3.索引的优缺点?
几个基本的索引类型 普通索引 唯一索引主键索引 全文索引
索引优点
· 加快检索速度(包括分组、排序)
· 唯一索引确保每行数据的唯一性
· 在使用索引的过程可以优化隐藏器,提高系统性能
索引缺点
· 插入删除 修改 维护速度下降
· 占用物理和数据空间

4.事务的特性?
acid 原子性、一致性、隔离性、持久性

5.创建约束的目的?约束的种类?如何查看约束?
-- 约束的目的 确保表中数据的完整性,定义了可输入表或表的单个列中的数据的限制条件
-- 行完整性(实体完整性):主键约束与唯一约束
-- 列完整性(域完整性) :检查约束、默认约束与非空约束
-- 参照完整性 :外键约束
查看方式主要是通过第三方工具或者是sql语句:
1:使用Navicate for mysql,打开数据库、查看数据库表、查看设计表、选择外键选项卡,就可以查看外键
2:使用sql语句
show create table 表名;这个命令可以查看表的所有信息,包括一些字段类型,字段的约束,外键,主键,索引,字符编码等等。

6.wo hang建立索引的规范?

不使用频繁更新的列作主键
不允许使用全文索引
创建索引选择唯一性强的字段
索引选择数据类型较短的字段,字段总长度不超过768字节
合理创建组合索引,其长度根据实际列数值长度定义
单表索引数不超过4个
尽量避免使用外键
重要的SQL语句必须使用索引

7.varchar(50)和 int(10)中50和10的含义。举例说明。
8.优化select * from tb where coloumn1 in (a,b,c) and coloumn2 = 3 and coloumn3 >5
建索引

9.mysql达到一亿级别的表如何优化?
分库分表
>1垂直(纵向)切分
垂直切分常见有垂直分库和垂直分表两种。
垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。
垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表

>2水平(横向)切分
当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平切分了。

水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。

几种典型的数据分片规则为:
1、根据数值范围
按照时间区间或ID区间来切分。例如:按日期将不同月甚至是日的数据分散到不同的库中;
某些系统中使用的"冷热数据分离",将一些使用较少的历史数据迁移到其他库中,业务功能上只提供热点数据的查询
2、根据数值取模
一般采用hash取模mod的切分方式,例如:将 Customer 表根据 cusno 字段切分到4个库中,余数为0的放到第一个库,余数为1的放到第二个库,以此类推。

分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。
1、事务一致性问题
2、跨节点关联查询 join 问题
3、跨节点分页、排序、函数问题
4、全局主键避重问题
5、数据迁移、扩容问题

select sum(if(score>90,score,0)) AS greatGrade, avg(if(score between 80 and 89, score,null)) AS goodGrade

复制一个表结构的实现方法有两种。
方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
create table 新表名 like 源表

拷贝数据: insert into 新表名 select * from 源表
方法二、在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。
create table 新表名 select * from 源表

create procedure productpricing()
begin
select avg(prod_price) from products;
end;

create table student(
id int primary key,
name varchar(8)
)engine=innodb default charset=utf-8 comment='xxx';

猜你喜欢

转载自www.cnblogs.com/ccdat/p/11266544.html