My SQL数据库

1.sql 语句应该考虑哪些安全性?

(1).防止 Sql 注入(怎么防止sql注入?)通过使用预编译语句(prepared statements)和参数化查询(parameterized queries).使用PDO对象,使用mysqli.过滤输入和转义输出

(2)对特殊字符进行转义、过滤或者使用预编译的 sql 语句绑定变量。

(3)最小权限原则,特别是不要用 root 账户,为不同的类型的动作或者组建使用不同的账户。
(4)当 sql 运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息。

2. 简单描述 mysql 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)(新浪网技术部)

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含对数据表里所有记录的引用指针。

普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。

主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像 INDEX(columnA, columnB)索引,这就是联合索引
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

3. 如何用命令把 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)

4.MySQL 数据库中的字段类型 varchar 和 char 的主要区别是什么?哪种字段的查找效率要高,为什么?
char 表示定长,长度固定,varchar表示变长,即长度可变区别之二,存储的容量不同
对 char 来说,最多能存放的字符个数 255,和编码无关。

而 varchar 呢,最多能存放 65532 个字符。VARCHAR 的最大有效长度由最大行大小和使用的字符集

UTF8 一个字符占三个字节, 最多能存 21844 个字符

两相比较,char 的效率高,没有碎片,尤其更新比较频繁的时候,方便数据文件指针的操作。但不够灵活,在实际使用时,应根据实际需求来选用合适的数据类型。

5. IP 该如何保存?

最简单的办法是使用字符串(varchar)来保存,如果从效率考虑的话,可以将 ip 保存为整型(unsigned int),使用 php 或 mysql 提供的函数将 ip 转换为整型,然后存储即可。

PHP 函数:long2ip()和 ip2long()

MySQL 函数:inet_aton()和 inet_ntop

6. MYSQL 取得当前时间的函数是?格式化日期的函数是?

current_time()用于取得当前时间
date_format(datetime, format)用于格式化日期,如:select date_format(now(),'%Y%m%d');

7. 请简述项目中优化 sql 语句执行效率的方法,从哪些方面,sql 语句性能如何分析?
  1. 尽量选择较小的列
  2. 将where中用的比较频繁的字段建立索引
  3. select子句中避免使用‘*’
  4. 避免在索引列上使用计算、not in 和<>等操作
  5. 当只需要一行数据的时候使用limit 1
  6. 保证单表数据不超过200W,适时分割表。
8. 数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

ACID 四大特性,原子性、隔离性、一致性、持久性。

9. What's the difference between mysql_fetch_row() and mysql_fetch_array()? (Yahoo)

mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。
mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:
MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。其默认值是 MYSQL_BOTH。
如 果 用 了 MYSQL_BOTH , 将 得 到 一 个 同 时 包 含 关 联 和 数 字 索 引 的 数 组 。 用MYSQL_ASSOC 只得到关联索引(如同 mysql_fetch_assoc() 那样),用 MYSQL_NUM 只得到数字索引(如同 mysql_fetch_row() 那样)。

10. 请写出 php 连 mysql 连接中,获取下一个自增长 id 值的方法,可以写多个(酷讯)

方法一,使用 show table status ,然后获取 auto_increment 的值
方法二,使用 select max(id) + 1 from table
方法三,如果是刚插入记录,可以使用 last_insert_id() + 1 获得

11. php 访问数据库有哪几步?

主要有以下几个步骤:

  1. 连接数据库服务器:mysqli_connect('host','user','password');
  2. 选择数据库:mysql_select_db(数据库名);
  3. 设置从数据库提取数据的字符集:mysql_query("set names utf8");
  4. 执行 sql 语句:mysql_query(sql 语句);
  5. 处理结果集
  6. 关闭与数据库服务器的连接:mysql_close($link);
12.请简述数据库设计的范式及应用。
第一范式:若关系模式 R 的每一个属性是不可再分解的,且有主键,则属于第一范式。
第二范式:若 R 属于第一范式,且所有的非主键属性都完全函数依赖于主键属性,则满足第二范式。
第三范式:若 R 属于第二范式,且所有的非主键属性没有一个是传递函数依赖于候选主键属性,则满足第三范式。

13. php 连接 mysql 之后,如何设置 mysql 的字符集编码为 utf8?

mysql_query(“set names utf8”);

14. 解释 MySQL 外连接、内连接与自连接的区别 (小米)

先说什么是交叉连接,交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。
内连接则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
外连接其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。

左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那
些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以 NULL 来填充。
右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。
左连接和右连接可以互换,MySQL 目前还不支持全外连接。


15.简述在mysql数据库中myISAM和InnoDB的区别

(1)构成上:MyISAM的表在磁盘中有三个文件组成,分别是表定义文件,数据文件,索引文件,而InnoDB的表由表定义文件,表空间数据和日志文件组成。

(2)安全方面,MyISAM强调的是性能,其查询效率较高,但是不支持事务和外键等安全方面的性能,而InnoDB支持事务和外键都能高级功能,查询效率较低

(3)对锁的支持,MyISAM支持表锁,InnoDB支持行锁

[!!]16. 简述存储过程的适用情况

当需要处理复杂的查询和运算时,可以使用存储过程。
从应用分层的原则,大量使用存储过程导致业务逻辑分散在 DB 和应用服务器层,不利于维护和更新。
总体来说,存储程序可以用,但要慎重,最好只用来维护,不用于业务逻辑和支撑高并发高性能的东西。

17.存储例程是存储在数据库中的预编译对象。包括存储过程(procedure)和用户自定义函数(UDF)。能永久存储一组sql语句。

区别:1函数作用域有限。不可以从函数修改数据库表。2函数与其他任何表达式一样可用于sql语句中,但是存储过程必须使用call语句调用。

18.视图:视图是虚拟表,本身没有数据,对视图查询比较缓慢(1)作用:来限制用户对关键数据的访问,确保数据的安全性。(2)可以存储复杂查询,有助于简化复杂查询的执行。

19.视图限制:(1)不能在临时表创建视图(2)不能创建临时视图(3)不能在视图创建触发器,索引(4)视图的底层表或视图必须存在(5)视图定义的select语句不能在from子句中包含子查询

20.可更新视图:在视图上执行插入更新删除操作可以修改到底层表

  以下视图不可更新(1)列列表中存在聚合函数(2)select 语句中存在distinct ,group by,having子句

(3)select语句存在子查询(4)from子句存在不可更新视图

21.触发器:是预编译并存储在数据库中的小程序。

作用:维护数据库的完整性并提高其性能。使用数据库保证表间数据的一致性并执行特定操作有关的操作。

22.PDO:是用于与不同类型数据库通信的轻量级接口。它提供一组公共方法以访问不同数据库。而且它将数据库与应用程序分离,因此又称数据库访问抽象层。

特性:  一致编码,灵活性,相当好的性能,支持面向对象的特性

23.SQL优化:优化注意事项(1)应在搜索条件中常用的列上建立索引

(2)不应在仅包含一些惟一值的列上创建索引

(3)尽量在可能时使用连接代替子查询。处理连接比子查询效率高

(4)需要在查询中比较的列应为相同数据类型

(5)仅在需要时在like运算符中使用通配符

(6)正确使用长度定义列

(7)尽量对列使用not null约束

(8)尽量对字符串使用enum数据类型

优化措施(1)优化表:要重新获取未使用的空间以及降低表的片段化程度 可以使用optimize table

(2)优化索引:MySQL服务器使用不同算法在内部处理索引,例如B树索引,哈希索引,创建索引时,可以在一些存储引擎中显示指定索引类型。

(3)优化查询:分析查询,选择最佳最有效的执行方法。可使用查询执行计划 explain+select

(4)优化DML语句:load data infile语句使用文本文件将数据插入表,bulk_insert_buffer_size增加缓存内存大小的系统变量

使用low_priority关键字优化update语句

为优化删除性能,可以增加key_buffer_size变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值