您的位置:首页 > 职场人生

程序员常见面试之 数据库 知识点小结(三)

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备份事务日志的作用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息