1.设有一个数据库mydb中有一个表tb1,表中有六个字段,主键为ID,有是条记录,ID从0到9,以下代码输出结果是?(D)

<?php
$link = mysql_connect("localhost","mysql_user","mysql_password") or die("Could not connect:"mysql_errno());
$result = mysql_query("SELECT id,name,age FROM mydb.tb1 WHERE id <'5'");
or die("Could not connect:"mysql_errno());
echo mysql_num_fields(result);
mysql_close($link);
?>

A.6 B.5 C.4 D.3

2.一个数据名称: user;一个表名称:t_user; 三个列:id(主键),name(姓名),age(年纪);索引id为主键索引,name唯一索引,age普通索引,写出创建数据库,创建一个表,在表中插入一条数据三个sql语句

Crate database xx;
CREATE TABLE `a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into a(name,age) values('aaa',18),('bbbb',20);

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.怎样找到数据库的配置文件路径?

  1. 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)

$con = mysql_connect("192.168.1.2","link","pwdto",”3308”) or die(‘could not connect:’.mysql_error());


$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
echo "连接成功<br/>";
/*你还可以进行一次搜索操作
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
*/
$dbh = null;
}
catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}

30.Mysql中数据字段的索引有几类?如果要对表“mtb”中的字段“name”设置索引(主键除外),一般会有哪几种情况需要考虑

1.普通索引
2.唯一索引
3.主键索引
4.组合索引
5.全文索引
CREATE UNIQUE INDEX indexName ON table(column)
Alert table tablename add unique indexname(column)

31.请设计一个用来存储用户信息的表,要求将用户的姓名、性别、年级、身份证号、手机、邮箱、备注信息保存起来

CREATE TABLE IF NOT EXISTS `user`(
`user_id` INT UNSIGNED AUTO_INCREMENT,
username` VARCHAR(100) NOT NULL,
`sex` tinyint NOT NULL,
`grade` VARCHAR(50) NOT NULL,
`identify` CHAR(18),
`phone` CHAR(11),
`email` VARCHAR(40),
`remarks` VARCHAR(200),
PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

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’来分析其执行情
况。