mysql面试题(优化、设计、SQL)等
时间:2019-01-05 23:09 来源:未知 作者:IT
MySQL 数据库的优化方法
1. 选取最适用的字段属性,应该尽量把字段设置为 NOT NULL,在执行查询的时候不用比较 NULL 值。
2. 使用连接(JOIN)来代替子查询(Sub-Queries)
3 .使用联合(UNION)来代替手动创建的临时表
4 .尽量少使用 LIKE 关键字和通配符
5 .使用事务和外键
MYSQL取得当前时间的函数和格式化日期的函数是?
now()
date_format( date, format )
数据表members有这些字段:id,username,posts,pass,email,写出发帖数最多的十个人的名字:
SELECT `username` FROM `members` ORDER BY `posts` DESC LIMIT 0,10;
请写出数据类型(int char varchar datetime text)的意思; 其中 varchar 和 char 有什么区别?
int 整数类型
char 固定长度字符串
varchar 可变长字符串
datetime 日期时间型
text 字符字符串
char 列的长度固定为创建表时声明的长度, varchar 列中的值为可变长字符串.
MySQL自增类型(通常为表ID字段)必需将其设为(?)字段
AUTO_INCREMENT
有一个用户表(User)结构如下,使用 php 查出所有姓名为“张三”的内容并打印出来:
Name
Tel
Content
Date
张三
13333663366
大专毕业
2006-10-11
张三
13612312331
本科毕业
2007-01-15
李四
02155665566
中专毕业
2008-02-16
$link = mysql_connect("localhost", "root", "") or die('Could not connect: ' . mysql_error());
mysql_select_db("db_name", $link) or die ('Can\'t use db_name : ' . mysql_error());
$result = mysql_query("SELECT * FROM `User` WHERE `Name` = '张三'; ", $link);
while ( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
echo "{$row['Name']},{$row['Tel']},{$row['Content']},{$row['Date']}\n";
}
mysql_close($link);
针对上述用户表,写出实现以下功能的SQL语句:
1、添加用户(王五 13254748547 高中毕业 2009-03-17):
INSERT INTO `User`(`Name`,`Tel`,`Content`,`Date`) VALUES ('小王','13254748547','高中毕业','2007-05-06');
2、 修改张三的时间为当前系统时间:
UPDATE `User` SET `Date` = DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE `Name` = '张三';
3、 写出删除名为李四的全部记录:
DELETE FROM `User` WHERE `Name` = '李四';
新闻发布系统相关数据库操作
1、名为 article 的表有这些字段:(id:文章id,title:文章标题,content:文章内容,category_id:文章分类id,hits:点击量 );写出建表语句:
CREATE TABLE `article`(
'id' int(11) NOT NULL AUTO_INCREMENT,
'title' varchar(200) NOT NULL DEFAULT '',
'content' TEXT(500),
'category_id' int(11) NOT NULL,
'hits' int(11) NOT NULL DEFAULT 0,
PRIMARY KEY('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、表comment记录用户评论内容,字段有:(id:评论id,article_id:文章id 关联article表中的id,content :评论内容);编写SQL语句:查询字段列表(文章 id 文章标题 点击量 回复数量), 按照回复数量排序,最高的排在最前,没有回复则显示为0。
SELECT article.id as id, article.title as title, IF(article.`hits` IS NULL,0,article.`hits`) as hits,IF(comment.`id` is NULL,0,count(*)) number FROM article
LEFT JOIN comment ON article.id=comment.article_id GROUP BY article.`id` ORDER BY number DESC;
3、表 category 保存分类信息,字段如下 id int(4) not null auto_increment; name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类,写出如何实现这个下拉菜单
$result = mysql_query("select id, name from category") or die("Invalid query: " . mysql_error());
echo '<select name="category_id">';
while ( $row = mysql_fetch_array($result) ) {
echo ("<option value=\"{$row['id']}\">{$row['name']}</option>");
}
echo '</select>';
(责任编辑:IT)
1. 选取最适用的字段属性,应该尽量把字段设置为 NOT NULL,在执行查询的时候不用比较 NULL 值。 2. 使用连接(JOIN)来代替子查询(Sub-Queries) 3 .使用联合(UNION)来代替手动创建的临时表 4 .尽量少使用 LIKE 关键字和通配符 5 .使用事务和外键
now() date_format( date, format )
SELECT `username` FROM `members` ORDER BY `posts` DESC LIMIT 0,10;
int 整数类型 char 固定长度字符串 varchar 可变长字符串 datetime 日期时间型 text 字符字符串 char 列的长度固定为创建表时声明的长度, varchar 列中的值为可变长字符串.
AUTO_INCREMENT
$link = mysql_connect("localhost", "root", "") or die('Could not connect: ' . mysql_error()); mysql_select_db("db_name", $link) or die ('Can\'t use db_name : ' . mysql_error()); $result = mysql_query("SELECT * FROM `User` WHERE `Name` = '张三'; ", $link); while ( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { echo "{$row['Name']},{$row['Tel']},{$row['Content']},{$row['Date']}\n"; } mysql_close($link);
1、添加用户(王五 13254748547 高中毕业 2009-03-17): INSERT INTO `User`(`Name`,`Tel`,`Content`,`Date`) VALUES ('小王','13254748547','高中毕业','2007-05-06'); 2、 修改张三的时间为当前系统时间: UPDATE `User` SET `Date` = DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE `Name` = '张三'; 3、 写出删除名为李四的全部记录: DELETE FROM `User` WHERE `Name` = '李四';
1、名为 article 的表有这些字段:(id:文章id,title:文章标题,content:文章内容,category_id:文章分类id,hits:点击量 );写出建表语句: CREATE TABLE `article`( 'id' int(11) NOT NULL AUTO_INCREMENT, 'title' varchar(200) NOT NULL DEFAULT '', 'content' TEXT(500), 'category_id' int(11) NOT NULL, 'hits' int(11) NOT NULL DEFAULT 0, PRIMARY KEY('id') ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2、表comment记录用户评论内容,字段有:(id:评论id,article_id:文章id 关联article表中的id,content :评论内容);编写SQL语句:查询字段列表(文章 id 文章标题 点击量 回复数量), 按照回复数量排序,最高的排在最前,没有回复则显示为0。 SELECT article.id as id, article.title as title, IF(article.`hits` IS NULL,0,article.`hits`) as hits,IF(comment.`id` is NULL,0,count(*)) number FROM article LEFT JOIN comment ON article.id=comment.article_id GROUP BY article.`id` ORDER BY number DESC; 3、表 category 保存分类信息,字段如下 id int(4) not null auto_increment; name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类,写出如何实现这个下拉菜单 $result = mysql_query("select id, name from category") or die("Invalid query: " . mysql_error()); echo '<select name="category_id">'; while ( $row = mysql_fetch_array($result) ) { echo ("<option value=\"{$row['id']}\">{$row['name']}</option>"); } echo '</select>';(责任编辑:IT) |