程序员常见面试之 数据库 知识点小结(三)
2015-12-27 19:26
579 查看
前言
根据自己的项目经验和阅读经验,整理了一些数据库常见面试知识点,喜欢能帮助到大家。本文地址 http://blog.csdn.net/never_cxb/article/details/50413644 转载请注明出处
常用 SQL 语句
order
select a,b from list_table order by b asc
从 list_table 表中选出 a,b列,并按照 b 的升序排列
ASC表示按升序排序,DESC表示按降序排序
ORDER BY 1 表示 所select 的字段按第一个字段排序
INSERT INTO SELECT 和 SELECT INTO FROM 区别
1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量 2.SELECT INTO FROM语句 语句形式为:SELECT vale1, value2 into Table2 from Table1 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
distinct
select distinct c from list_table order by c desc
这儿的 distinct 表示去除重复的意思
选出 c 值,并按照 c 的降序排列,消除重复的 c 值
constraint
创建约束alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名) 例子: alter table emp add constraint p_const primary key (id)
上面 sql 语句表示把 id 设置为主键
约束名称是为了方便后面删除这个约束
unique约束:
就是给列的数据追加的不重复的约束类型
格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)
(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。
(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。
(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。
(4)建立主键的目的是让外键来引用.
(5)一个表最多只有一个主键,但可以有很多唯一键
index
CREATE INDEX index_name on TABLE_NAME(Column_name) mysql> create index i_name on my_user(name); Query OK, 100000 rows affected (0.84 sec) Records: 100000 Duplicates: 0 Warnings: 0
创建索引,上面可以看到,创建索引会影响到所有行。
ALTER TABLE my_user ADD UNIQUE INDEX i_name (name);
如果是唯一话,可以创建唯一索引,上面的UNIQUE表示唯一的意思。
注意 如果某列有多行包含 NULL 值,则不能在该列上创建唯一索引。同样,如果列的组合中有多行包含 NULL 值,则不能在多个列上创建唯一索引。在创建索引时,这些被视为重复的值。
isnull 或NVL函数
将 null 值转化为特定数值,这个有很多函数。isnull decode nvl coalesce 多种函数可以解决。coalesce 函数可以接受多个参数,将会返回这些参数中第一个非NULL的值,若提供的参数全部为NULL,则返回NULL。
ifnull 函数和coalesce功能一样,只是只可以接受两个参数。
SELECT a.*,isnull(t.cous,0) as count FROM brand as a left join (select brandid as bid,count(1) as cous from shopbrand group by brandid) t on a.brandid=t.bid ORDER BY count DESC LIMIT 0,20
这儿一定要注意到左连接,如果 a 表中某个字段没有数据关联到 t 表,那么得到的 t.cous是 null。需要进行处理。
日志文件满
在事务日志已满的情况下,用户不能更新数据。backup log语句有双重的目的,不仅可以备份事务日志,并且在事务日志满的时候,用户还可以利用他清理事务日志,移去事务日志中不活动的部分
截断并不减少物理日志文件大小,而是减少逻辑日志文件的大小并释放磁盘空间以供重新使用。
参考文章
MySQL索引SQL Server 2008通过DBCC OPENTRAN和会话查询事务详解
SQLSERVER备份事务日志的作用