mysqlvarchar索引_原来⼤⼚的MySQL⾯试会问这些问题!
操作 Mysql
PHP 操作
Mysql 函数的作⽤和区别(新浪⽹技术部)
函数的作⽤和区别(新浪⽹技术部)
个 PHP
工程部半年度工作总结ppt
1. 写出下⾯
1. 写出下⾯ 22 个
mysql_num_rows() mysql_affected_rows()
这两个函数都作⽤于 mysql_query($query)操作的结果,
mysql_num_rows() 返回结果集中⾏的数⽬。
mysql_affected_rows() 取得前⼀次 MySQL 操作所影响的记录⾏数。
mysql_num_rows()仅对 SELECT 语句有效,要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的⾏的数⽬,⽤
mysql_affected_rows()。
相关题⽬: 取得查询结果集总数的函数是?
取得查询结果集总数的函数是?
mysql_num_rows()
Github
2. sql 语句应该考虑哪些安全性?(新浪⽹技术部)
防⽌ Sql 注⼊,对特殊字符进⾏转义、过滤或者使⽤预编译的 sql 语句绑定变量。
最⼩权限原则,特别是不要⽤ root 账户,为不同的类型的动作或者组建使⽤不同的账户。当 sql 运⾏出错时,不要把数据库返回的错误信息全部显⽰给⽤户,以防⽌泄露服务器和数据库相关信息。
3. 简单描述 mysql 中,索引,主键,唯⼀索引,联合索引的区别,对数据库的性能有什么影响(从读写两⽅
⾯)(新浪⽹技术部)
索引是⼀种特殊的⽂件(InnoDB 数据表上的索引是表空间的⼀个组成部分),它们包含着对数据表⾥所有记录的引⽤指针。
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯⼀任务是加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该⽤关键字 UNIQUE 把它定义为⼀个唯⼀索引。也就是说,唯⼀索引可以保证数据记录的唯⼀性。
主键,是⼀种特殊的唯⼀索引,在⼀张表中只能定义⼀个主键索引,主键⽤于唯⼀标识 ⼀条记录,使⽤关键字 PRIMARY KEY 来创建。索引可以覆盖多个数据列,如像 INDEX(columnA, columnB)索引,这就是联合索引。索引可以极⼤的提⾼数据的查询速度,但是会降低插⼊、删除、更新表的速度,因为在执⾏这些操作时,还要操作索引⽂件。
4. 有⼀个留⾔板,⽤ mysql 做数据库,⽤户信息包括:⽤户名,密码,email,留⾔内容包括:留⾔ ID,标题,内容,发表时间,状态(审核,未审核)(新浪⽹技术部)
请实现下列需求:
(1). 数据库结构。⽆需写建表语句,⽤类似下⾯的表格,描述清楚即可,注意,要在索引栏 中注明是否需要创建索引,以及要创建的索引的类型
表名table_aaa
字段名字段说明字段类型索引
name姓名varchar(64)唯⼀索引gender性别enum(‘M’,‘F’)
(2). ⽤⼀个 sql 语句查询出发表留⾔数量⼤于 10 条的⽤户名及其留⾔数量,查询结果按⽂章数量降序排列参考答案:
⽤户表结构如下:
表名user
字段名字段说明字段类型索引user_id⽤户编号int unsigned主键name⽤户名varchar(30)半的组词
password密码char(32)
email邮箱varchar(50)
表名user
字段名字段说明字段类型索引user_id⽤户编号int unsigned主键name⽤户名varchar(30)
password密码char(32)
email邮箱varchar(50)
表名user
字段名字段说明字段类型索引user_id⽤户编号int unsigned主键name⽤户名varchar(30)
password密码char(32)
email邮箱varchar(50)
留⾔表结构如下:
表名message
字段名字段说明字段类型索引message_id留⾔编号int unsigned主键
title标题varchr(100)
content内容text
user_id⽤户 id int unsigned普通索引pubtime发表时间int unsigned
state状态tinyint 0 未审核 1 审核
表名message
字段名字段说明字段类型索引message_id留⾔编号int unsigned主键
title标题varchr(100)
content内容text
user_id⽤户 id int unsigned普通索引pubtime发表时间int unsigned
state状态tinyint 0 未审核 1 审核
表名message
字段名字段说明字段类型索引message_id留⾔编号int unsigned主键
title标题varchr(100)
content内容text
网页播放器没有声音user_id⽤户 id int unsigned普通索引pubtime发表时间int unsigned
state状态tinyint 0 未审核 1 审核
表名message
字段名字段说明字段类型索引message_id留⾔编号int unsigned主键
title标题varchr(100)
content内容text
user_id⽤户 id int unsigned普通索引pubtime发表时间int unsigned
state状态tinyint 0 未审核 1 审核
查询语句如下:
SELECT u.name, COUNT(*) AS total
FROM user AS u INNER JOIN message AS m ON u.user_id = m.user_id
GROUP BY u.name HAVING total > 10 ORDER BY total DESC
5. 如何⽤命令把 mysql ⾥的数据备份出来(酷讯 PHP ⼯程师笔试题)
(1). 导出⼀张表
mysqldump -u ⽤户名 -p 密码 库名 表名 > ⽂件名(如 D:/a.sql)
(2). 导出多张表
mysqldump -u ⽤户名 -p 密码 库名 表名 1 表名 2 表名 3 > ⽂件名(如D:/a.sql)
(3). 导出所有表
逗号运算符怎么算mysqldump -u ⽤户名 -p 密码 库名 > ⽂件名(如 D:/a.sql)
(4). 导出⼀个库
mysqldump -u ⽤户名 -p 密码 -B 库名 > ⽂件名(如 D:/a.sql)
6. 两张表 city 表和 province 表。分别为城市与省份的关系表。
city:
idcityprovinceid1⼴州12深圳13惠州14长沙25武汉3
province:
idprovince1⼴东2湖南3湖北
语句关系两个表,实现:显⽰城市的基本信息。显⽰字段:城市id ,城市名, 所属省份 。如:
sql 语句关系两个表,实现:显⽰城市的基本信息。
(1). 写⼀条 sql
(1). 写⼀条
id(城市 id) cityname(城市名)privence(所属省份)
……
SELECT c.id AS id,c.city AS cityname,p.province
FROM city c LEFT JOIN province p ON c.provinceid=p.id
by 查询出来。显⽰字段:省份id ,省份名,包含多少个城市。
group by 查询出来。
(2). 如果要统计每个省份有多少个城市,请⽤
(2). 如果要统计每个省份有多少个城市,请⽤ group
SELECT p.id,p.province,count(c.id) AS num
FROM province p LEFT JOIN city c ON p.id = c.provinceid GROUP BY p.id;
7. MySQL 数据库中的字段类型 varchar 和 char 的主要区别是什么?哪种字段的查效率要⾼,为什么?
区别⼀,定长和变长
char 表⽰定长,长度固定,varchar表⽰变长,即长度可变.当所插⼊的字符串超出它们的长度时,视情况来处理,如果是严格模式,则会拒绝插⼊ 并提⽰错误信息,如果是宽松模式,则会截取然后插⼊。如果插⼊的字符串长度⼩于定义长度时,则会以不同的⽅式来处理,如char(10),表⽰存储的是10个字符,⽆论你插⼊的是多少,都是10个,如果少于10个,则⽤空格填满。⽽varchar(10),⼩于10个的话,则插⼊多少个字符就存多少个。varchar怎么知道所存储字符串的长度呢?实际上,对于varchar 字段来说,需要使⽤⼀个(如果字符串长度⼩于255)或两个字节(长度⼤于255)来存储字 符串的长度。
区别之⼆,存储的容量不同
的最⼤有效长度由对 char 来说,最多能存放的字符个数 255,和编码⽆关。⽽ varchar 呢,最多能存放65532 个字符。VARCHAR
VARCHAR 的最⼤有效长度由
65,532字节
最⼤⾏⼤⼩和使⽤的字符集确定。整体最⼤长度是
最⼤⾏⼤⼩和使⽤的字符集确定。整体最⼤长度是 65,532字节
最⼤有效长度是 65532 字节,在 varchar 存字符串的时候,第⼀个字节是空的,不存任何的数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是 65535 -1 - 2= 65532 由字符集来确定,字符集分单字节和多字节
Latin1 ⼀个字符占⼀个字节,最多能存放65532 个字符GBK ⼀个字符占两个字节, 最多能存 32766 个字符UTF8 ⼀个字符占三个字节, 最多能存 21844 个字符mysql面试题sql语句多表联查
注意,char 和 varchar 后⾯的长度表⽰的是字符的个数,⽽不是字节数。
两相⽐较,char 的效率⾼,没有碎⽚,尤其更新⽐较频繁的时候,⽅便数据⽂件指针的操作。但不够灵活,在实际使⽤时,应根据实际需求来选⽤合适的数据类型。
相关题⽬:若⼀个表定义为 create table t1(c int, c2 char(30), c3 varchar(N)) charset=utf8; 问
N 的最⼤值⼜是多少?(65535 - 1 - 2 - 4 - 30 * 3 )/3
8. IP 该如何保存?
最简单的办法是使⽤字符串(varchar)来保存,如果从效率考虑的话,可以将ip 保存为整型(unsigned int),使⽤ php 或 mysql 提供的函数将 ip 转换为整型,然后存储即可。
PHP 函数:long2ip()和 ip2loang()
MySQL 函数:inet_aton()和 inet_ntoa
9. 设有成绩表如下所⽰,试查询两门及两门以上不及格同学的平均分。
ata-draft-node="block" data-draft-type="table" data-size="normal" data-row->
编号姓名科⽬分数1张三数学902张三语⽂503张三地理404李四语⽂555李四政治456王五政治30
#创建⼀个成绩表
CREATE TABLE grade(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10) NOT NULL,
subject VARCHAR(10) NOT NULL, score TINYINT UNSIGNED NOT NULL
);
#插⼊记录
INSERT INTO grade(name,subject,score) VALUES('张三','数学',90); INSERT INTO grade(name,subject,score) VALUES('张三','语⽂',50); INSERT INTO grade(nam #查询语句
copy 命令SELECT name,AVG(score),SUM(score<60) AS gk FROM grade
GROUP BY name HAVING gk>=2;
10. 为了记录⾜球⽐赛的结果,设计表如下,
team:参赛队伍表
ata-draft-node="block" data-draft-type="table" data-size="normal" data-row->
字段名称类型描述teamIDint主键teamnamevarchar(20)队伍名称
match:赛程表
其中,match 赛程表中的 hostTeamID 与 guestTeamID 都和 team 表中的 teamID 关联,查出2006-6-1 到 2006-7-1 之间举⾏的所
有⽐赛,并且⽤以下形式列出:
拜仁 2:0不莱梅 2006-6-21

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。