SQL语言包括哪几个部分?每部分都有哪些操作关键字?
常见的关系型数据库产品有:Oracle, MySQL, SQL Server,ACCESS等
SQL语句包括数据定义(DDL), 数据操纵(DML),数据控制(DCL),和数据查询(DQL)四个部分。
数据定义:Create table, Alter table, Drop table, Create Index/Drop index等
数据操纵:Select, Insert, Update, Delete
数据控制:grant, revoke
数据查询:Select
完整性约束包括哪些?
数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)
(1). 实体完整性:规定表的每一行在表中是唯一的实体
(2). 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围,精度等规定
(3). 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止数据丢失或无意义的数据在数据库中扩散
(4). 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反应某一具体应用必须满足的语义要求。
什么是事务?及其特性?
事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。
特性:
(1). 原子性:即不可分割性,事务要么全部被执行,要么全部不执行
(2). 一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态
(3). 隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务
(4). 持久性:事务正确提交之后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存
简单理解:在事务里的操作,要么全部成功,要么全部失败。
什么叫视图?什么叫游标?
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是由一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集在作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据时,游标显得十分重要。
什么是存储过程?用什么来调用
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快,可以用一个命令对象来调用存储过程。
如何通俗地理解三个范式?
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解
第二范式:2NF是对记录的唯一性约束,要求记录有唯一标示,即实体的唯一性
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
视图的优点
1. 视图能够简化用户的操作
2. 视图是用户能以多种角度看待同一数据
3. 视图为数据提供了一定程度的逻辑独立性
4. 视图能够对机密数据提供安全保护
NULL 是什么意思
NULL这个值表示UNKNOWN,不表示""。对NULL这个值的任何比较都会产生一个NULL值。不能把任何值与一个NULL值进行比较,并在逻辑上希望获得一个答案。使用IS NULL来进行NULL判断。
主键,外键,索引的区别
1. 定义:
主键:唯一标识一条记录,不能有重复,不能为空
外键:表的外键是另一个表的主键,外键可以有重复的,可以是空值
索引:该字段没有重复值,但可以有一个空值
2. 作用:
主键:用来保证数据完整性
外键:用来和其他表建立联系用的
索引:是提高查询排序的速度
3. 个数
主键:只能有一个
外键:一个表可以有多个外键
索引:一个表可以有多个索引
用什么来确保表里的字段值接受特定范围的值?
check限制
1. 创建表时设置检查约束的语法:CHECK(<检查约束>)
2. 修改表时设置检查约束的语法:ALTER TABLE <数据表名> ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
3. 删除表的检查约束的语法:ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>
SQL优化的方法
1. where子句:where表之间的连接必须写在其他where条件之前,哪些可以过来掉最大数量记录的条件必须写在where子句的末尾having最后
2. 用exists替代in, 用not exists替代not in
3. 避免在索引列上使用计算
4. 避免在索引列上使用IS NULL和IS NOT NULL
5. 对查询进行优化,应尽量避免全表扫描,首先考虑在where及order by涉及的列上建立索引
6. 应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
7. 应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
SQL语句中‘相关子查询’与’非相关子查询’有什么区别
1. 非相关子查询是独立于外部查询(父查询)的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询(父查询)。
2. 相关子查询的执行依赖于与外部查询(父查询)的数据,外部查询(父查询)执行一行,子查询就执行一次。
因此非相关子查询比相关子查询的效率高
MySQL的存储引擎,MyISAM和InnoDB的区别
MyISAM是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;不支持事务;适合小数据,小并发。
InnoDB是支持事务的存储引擎;适合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就是在锁的级别上);适合大数据,大并发。
数据表的类型有哪些
MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。
MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
对于大流量的网站,采用什么样的方法来解决各页面访问量统计问题?
1. 确认服务器是否能支撑当前访问量
2. 优化数据库访问
3. 禁止外部访问连接(盗链),比如图片盗链
4. 控制文件下载
5. 做负载均衡,使用不同主机分流
6. 使用浏览统计软件,了解访问量,有针对性的进行优化
MySQL数据库做发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
1. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率
2. 选择合适的表字段数据类型和存储引擎,适当的添加索引
3. 做mysql主从复制读写分离
4. 对数据表进行分表,减少单表中的数据量,提高查询速度
5. 添加缓存机制,比如redis, Memcached等
6. 对不经常改动的页面,生成静态页面(比如做ob缓存)
7. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
网友评论