1.设有一个数据库mydb中有一个表tb1,表中有六个字段,主键为ID,有是条记录,ID从0到9,以下代码输出结果是?(D)
A.6 B.5 C.4 D.3
2.一个数据名称: user;一个表名称:t_user; 三个列:id(主键),name(姓名),age(年纪);索引id为主键索引,name唯一索引,age普通索引,写出创建数据库,创建一个表,在表中插入一条数据三个sql语句
3.数据库设计经验,为什么进行分表? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
当数据表的数据量很大时,查询速度就会降低,为了提高查询速度,需要对表格进行分表。分为水平拆分和垂直拆分。
水平拆分,按照行来对表格进行拆分。可以降低在查询时需要读的数据和索引的页数。比如可以按照常用的数据和不常用的数据进行水平拆分。
水平拆分的缺点,给应用增加了复杂度,通常查询时需要多个表名,查询所有数据都需要union操作。
垂直分表,按照列来对表格进行拆分。比如一个表中某些列常用,某些列不常用。可以使数据行变小,一个数据页能存储更多数据,查询时减少I/O次数
垂直分表缺点:
管理冗余列,查询所有数据需要JOIN操作
有些分表的策略基于应用层的逻辑算法,一旦逻辑算法改变,整个分表逻辑都会改变,扩展性较差
4.一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?
18
5.mysql_fetch_row()和mysql_fetch_array()的区别
mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
6.MySQL中myisam与innodb的区别,至少5点
1.innodb表引擎,是默认事务型引擎。5.1版本前,myisam是默认存储引擎。
2.Innodb数据存储在共享表空间,myisam表存储在两个文件.MYD,MYI
3.Innodb对主键查询的性能高
4.Innodb支持行级锁,myisam只支持表级锁
5.Innodb支持外键,myisam不支持外键
6.Innodb支持热备份,支持崩溃后的安全恢复,myisam不支持崩溃后的安全恢复
7.innodb引擎的4大特性
支持事务
支持行级锁
支持外键
支持热备份和崩溃后的安全恢复
8.myisam和innode2者select count(*)哪个更快,为什么
Myisam的效率高。Myisam会保存表的总行数,只需要读出保存好的行数即可。Innode表不像myisam有个内置计数器,不会保存表的具体行数,需要扫描整个表来计算有多少行。
9.简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
10.MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
Select now();
select date_format(now(), ‘%Y%m%d%H%i%s’);
11.现有2张数据表(1.5分)
表1:tbl_user记录了学生的姓名(name)和学号(id)
字段名 | 类型 | 说明 | 示例 |
id | int | 学号 | 73 |
name | varchar | 姓名 | 张三 |
表2:tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(id)和考试成绩(score)以及考试科目(subject),
字段名 | 类型 | 说明 | 示例 |
id | int | 自增主键 | 1 |
student_id | int | 学号id | 73 |
score | int | 分数 | 23 |
subject | varchar | 考试科目 | 书写 |
1)要想打印出各个学生姓名及对应的总成绩,写出查询的结果的SQL语句
select a.name ,sum(s.score) from tbl_user as a join tbl_score as s on a.id = s.stu_id group by a.name;
12.现有一mysql表各列如下:
成绩表t_score
字段名 | 类型 | 说明 | 示例 |
id | int | 自增主键 | 73 |
student_id | int | 学生id | 468 |
class_id | int | 班级id | 23 |
student_name | varchar | 学生姓名 | 张三 |
score | float | 分数 | 72.5 |
course_id | int | 课程id | 46 |
course_name | varchar | 课程名 | 数据库原理 |
试写出以下SQL语句:
1)查询course_id=20不及格(小于60分)人数(0.5分)
Select * from t_score where course_id = 20 and score < 60;
2)查出全校均分高于80的学生(1.5分)
Select student_name ,avg(score) as avg from t_score group by student_name having avg(score) > 80
3)查出每个班总分最高的学生和总分数(3分)
select t.class_id,t.stu_id,max(t.score) from (select class_id,stu_id,sum(score)as score from t_score group by class_id ,stu_id order by score desc ) as t group by class_id ;
13.我们拥有下面这个“Orders”表:
O_Id | OrderDate | OrderPrice | Customer |
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
查找客户“Carter”或“Adams”拥有超过1000的订单总金额
select stu_name,sum(score) from t_score where stu_name in (‘张三’ ,‘李四’) and score > 70 group by stu_name;
14.为什么要释放MySQL连接?pdo方式连接MySQL为什么会比mysql、mysqli更安全?
如果不释放链接,链接数就会越来越多,最终就会超过mysql的最大连接数。
Pdo采用预处理机制,可以防止sql注入
15.MySQL和NoSQL的区别是什么?MySQL和Redis怎样结合使用可以指数级提升数据库查询效率?
Mysql是关系型服务器,NoSQL是非关系型数据库。
将redis作为缓存,每次获取需要的查询数据时,先从Redis里看一下是否存在,如果存在就直接返回,如果不存在就从mysql中查询,将查询结果保存在redis中一份,下次在取值时,就直接从redis中获取。
16.你常用的mysql命令?
create database <数据库名>
show databases;
drop database <数据库名>
select database();
create table <表名> ( <字段名1> <类型1> [,…<字段名n> <类型n>]);
drop table <表名>
insert into <表名> [( <字段名1>[,…<字段名n > ])] values ( 值1 )[, ( 值n )]
select <字段1,字段2,…> from < 表名 > where < 表达式 >
delete from 表名 where 表达式
update MyClass set name=‘Mary’ where id=1;
alter table 表名 add字段 类型 其他;
mysqldump -u user_name -p123456 database_name > outfile_name.sql
mysqldump -u user_name -p database_name table_name > outfile_name.sql
17.进入mysql管理命令行的命令?
Mysql -u root -p 123 -h xxx -P
18.Show databases;这个命令的作用?
查看数据库列表
19.Show create database mysql; 这个命令的作用?
查看建库语句
20.Show create table user;这个命令的作用?
查看建表语句
21.Desc user;这个命令的作用?
查看表结构
22.explain select * from user;这个命令的作用?
检测SQL语句select * from user的执行性能
注:explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句
23.Show processlist;这个命令的作用?
SHOW PROCESSLIST显示哪些线程正在运行
24.SHOW VARIABLES;这个命令的作用?
查看系统变量及其值
25.有以下两个表:
表1:user
|userid| username| password| truename|
|—|---|—|
|1 |duihao |111111| 对号|
|2 |xiaoming| 222222| 小明|
表2:User_per:
|userid| mobile |address| email|
|—|---|—|
|1| 135123456789| 北京市朝阳路| 对号|
|2| xiayang |222222 |夏阳|
两表数据记录集合【根据表1、表2的记录请查出“对号”的两表数据记录集合】
Select * from user,user_per where user.userid = user_per.userid and user.truename = ‘对号’;
Select * from user join user_per on user.userid = user_per.userid where user.truename = ‘对号’;
26.用一条SQL语句,查询出每门课都大于80分的学生姓名
Name | kecheng | fenshu |
张三 | 语文 | 81 |
张三 | 数学 | 75 |
李四 | 语文 | 76 |
李四 | 数学 | 90 |
王五 | 语文 | 81 |
王五 | 数学 | 100 |
王五 | 英语 | 90 |
select name from stu
group by name
having name not in (
select name from stu
where score <80)
27.SHOW VARIABLES like ‘%conn%’;这个命令的作用?
查看mysql服务器跟连接相关的配置信息
28.怎样找到数据库的配置文件路径?
- which mysql 找到mysql的安装位置,如/usr/bin/mysql
2.针对此位置的MySQL查看配置文件路径
/usr/bin/mysql --verbose --help | grep -A 1 'Default options
29.编写PHP与mysql或oracle数据库建立连接的代码(数据库服务器:192.168.1.2,端口:3308,用户:link,密码:pwdto)
30.Mysql中数据字段的索引有几类?如果要对表“mtb”中的字段“name”设置索引(主键除外),一般会有哪几种情况需要考虑
1.普通索引
2.唯一索引
3.主键索引
4.组合索引
5.全文索引
CREATE UNIQUE INDEX indexName ON table(column)
Alert table tablename add unique indexname(column)
31.请设计一个用来存储用户信息的表,要求将用户的姓名、性别、年级、身份证号、手机、邮箱、备注信息保存起来
32.某内容管理系统中, 表message 有如下字段
id 文章 id
title 文章标题
content 文章内容
category_id 文章分类 id
hits 点击量
创建上表,写出MYSQL语句
Create table message(
Id int auto_increment,
Title varchar(50) not null,
Content text not null,
Category_id int not null,
Hits int not null,
Primary key (id)
)engine=innodb default charset=utf8;
33.同样上述内容管理系统:若comment记录用户回复内容,字段如下
comment_id 回复为 id
id 文章id,关联message表中的id
comment_content 回复内容
Create table comment(
comment_id int auto_increment
Id int not null,
comment_content varchar(50) not null,
Primary key (comment_id
)
)engine=innodb default charset=utf8;
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个 SQL 语句完成上述查询, 如果文章没有回复则回复数量显示为0.
SELECT message.id AS id, title, hits, IF(comment.id is NULL,0,count(*)) AS number
FROM message
LEFT JOIN comment
ON message.id = comment.id
GROUP BY message.id
34.现有一mysql表t_score,每行为某位学生的单科成绩
字段名 类型 说明 示例
|id |int| 自增主键| 73|
|—|---|—|
|student_id| int |学生id| 468|
|class_id |int |班级id |23|
|student_name| varchar |学生姓名| 张三|
|score| float| 分数| 72.5|
|course_id| int |课程id| 46|
|course_name | varchar| 课程名 |数据库原理|
试写出以下SQL语句:
1)查询course_id=20不及格(小于60分)人数
2)SELECT count(*) from t_score where course_id = 2 and score >60
35 MYSQL 取得当前时间的函数是?,格式化日期的函数是?
current_time()用于取得当前时间
date_format(datetime, format)用于格式化日期,如:select date_format(now(),’%Y%m%d’);
36 MySQL 自增类型(通常为表 ID 字段)必需将其设为( )字段
整型,并设置为 AUTO_INCREMENT
37 数据库中的事务是什么?
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作
都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事
务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事
务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。
38 表中有 A B C 三列,用 SQL 语句实现:当 A 列大于 B 列时选择 A 列,否则选择 B 列,当
B 列大于 C 列时选择 B 列否则选择 C 列。
使用case语句,如下:
SELECT CASE WHEN A > B THEN A ELSE B END,
CASE WHEN B > C THEN B ELSE C END
FROM table
39 写出三种以上 MySQL 数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、
Archive、CSV、Blackhole、MaxDB 等等十几个引擎。
40 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
区别主要有以下几个:
构成上,MyISAM 的表在磁盘中有三个文件组成,分别是表定义文件(.frm)、数据文
件(.MYD)、索引文件(.MYI),而 InnoDB 的表由表定义文件(.frm)、表空间数据和日志文
件组成。
安全方面,MyISAM 强调的是性能,其查询效率较高,但不支持事务和外键等安全性
方面的功能,而 InnoDB 支持事务和外键等高级功能,查询效率稍低。
对锁的支持,MyISAM
41 现在有下面一个查询语句 select * from tabname where id=2 and password='abc’如何判断它是现在是最优的.
可以使用 explain select * from tabname where id=2 and password='abc’来分析其执行情
况。