两年前买的书, 因为种种原因一直没看, 0 碎抽点时间看一遍, 感觉对自己有用的就顺手记录下. 之后转身就把这本书甩了, 因为这本书的内容大多是增删改查语句, 不实操只看的话, 没有什么意义. 而且作为一个测试, 其实在日常工作中对数据库的初级运用也就只是增删改查语句了.
1, 为什么要使用 IN 操作? 其优点具体如下:
a). 在使用长的合法选项清单时, in 操作符的语言更清楚且更直观;
b). 在使用 in 时, 计算的次序更容易管理;(因为使用的操作符更少)
c).in 操作符一般比 or 操作符清单执行更快;
d).in 的最大优点是可以包含其他 select 语句, 使得能够更动态的建立 where 语句.
2,where 和 having 的区别:
a).where 过滤行, having 过滤组;
b).where 在数据分组前进行过滤, having 在数据分组后进行过滤. where 排除的行不包括在分组中, 这可能会改变计算值, 从而影响 having 子句中基于这些值过滤掉的分组.
3,group by 与 order by 的差别:
ORDER BY | GROUP BY |
排序产生的输出 | 分组行, 但输出可能不是分组的顺序 |
任意列都可以使用 (甚至非选择的列也可以使用) | 只可能使用选择列或表达式列, 而且必须使用每个选择列表达式 |
不一定需要 | 如果与聚集函数一起使用列 (或表达式), 则必须使用 |
4,UNION 的使用:
这样一条 SQL:
select pid,vid from table_name where pid<=4 or vid in(1001,1002)
可以用 UNION 写成:
select pid,vid from table_name where pid<=4 UNOIN select pid,vid from table_name where vid in(1001,1002)
能用 where 条件去查询的, 几乎都能用 union.union 查询出来的数据默认是去重的, 所以如果需要显示所有的数据(包括重复行), 那么需要把 union 改成 union all.
5, 增删改示例:
INSERT INTO table_name VALUES (值 1, 值 2,....) -- 插入行
INSERT INTO table_name (列 1, 列 2,...) VALUES (值 1, 值 2,....) -- 插入列
UPDATE table_name SET key=new_values1,key2=new_values2 where xx=xx --key 为要更改的字段, new_values 为更新后的值
DELETE FROM table_name WHERE xx=xx
如果需要降低 insert 语句的优先级, 可在 insert 和 into 之间添加关键字 LOW_PRIORITY, 此法同样适用于 update 和 delete.
delete 删除的是整行而不是删除列, 如果删除制定的列, 可使用 update(值为 NULL).
delete 不删除表本身, 若想从表中删除所有行, 可使用 TRUNCATE TABLE 语句, 速度更快(TRUNCATE 实际上是删除原来的表并重新创建一个表).
6, 创建表示例语句:
- CREATE TABLE table_name
- (
- key1 int NOT NULL AUTO_INCREMENT,
- key2 char(20) NOT NULL,
- key3 char(50) NULL,
- key4 char(11) NULL,
- ......
- ...
- PRIMARY KEY(ZC_id) /*zc_di 为主键, 主键值必须唯一, 主键中只能使用不允许 NULL 值的列 */
- )ENGINE=InnoDB; /*InnoDB 为数据库引擎, 如果省略 ENGINE = 语句, 则使用默认引擎(很可能是 MyISAM)*/
创建新表时, 指定的表名必须不存在, 列名在表中必须是唯一的.
每个表只允许一个 AUTO_INCREMENT 列, 而且它必须被索引. 它告诉 Mysql, 本列每当增加一行时自动增量, 每次执行一次 insert 操作, Mysql 自动对该列增量, 一般用于做主键值.
__几个需要知道的引擎(引擎类型可以混用):
a).InnoDB 是一个可靠的事务处理引擎, 它不支持全文本搜索;
b).MEMORY 在功能上等同于 MyISAM, 但由于数据存储在内存 (不是磁盘) 中, 速度很快(特别适用于临时表);
c).MyISAM 是一个性能极高的引擎, 它支持全文本搜索, 但不支持事务处理.
7, 视图相关
视图为虚拟的表, 包含的不是数据而不是根据需要检索数据的查询. 识图提供了一种 Mysql 的 select 语句层次的封装, 可用于简化数据处理以及重新格式化基础数据或保护基础数据.
视图可用于重用 SQL 语句, 简化复杂的 SQL 操作(一般为 select), 使用表的组成部分而非整个表, 保护数据以及更改数据格式和显示.
__创建 & 使用视图的规则和限制:
a). 视图的命名必须唯一(视图之间不能重名, 视图不能与表同名);
b). 可以创建的视图数目无限制, 必须就有足够的访问权限才能创建视图, 视图可以嵌套;
c).ORDER BY 可以用在视图中, 但如果从该视图中检索数据的 select 语句中也含有 ORDER BY, 那么该视图中的 ORDER BY 将被覆盖;
d). 视图不能被索引, 也不能有关联的触发器或默认值, 视图可以和表一起使用;
e). 使用 SHOW CREATE VIEW view_name; 来查看创建视图的语句;
f). 用 DROP 删除视图, 其语法为 DROP VIEW view_name;
g). 更新视图时, 可以先用 drop 在使用 create, 也可以直接用 create or replace view.
视图可用于重用 SQL 语句, 简化复杂的 SQL 操作(一般为 select), 使用表的组成部分而非整个表, 保护数据以及更改数据格式和显示.
通常, 视图是可更新的, 更新一个视图将更新其基表(因为视图本身是没数据的), 但是并非所有的视图都是可更新的, 基本上来说, 如果 Mysql 不能正确的确定被更新的基数据, 则不允许更新(delete&insert 同理).
__视图定义中有如下操作, 则不能进行视图的更新:
a). 分组(使用 GROUP BY 和 HAVING);
b). 联结;
c). 子查询;
d). 并;
e). 聚集函数 (Min(),Count(),Sum() 等);
f).DISTINCT;
g). 导出 (计算) 列.
8, 存储过程(游标)
这东西比较尴尬, 貌似现在很多开发人员都放弃它了. 个人认为是因为可维护性太低了, 而且这东西的编写还需要比较好的技术和经验, 否则可能会导致性能反而比普遍的 SQL 更低, 当初之所以用存储过程是因为它简单, 安全, 高性能. Mysql 的游标只能用于存储过程(和函数), 所以游标这一章也略过了.
9, 触发器
需要在某个表发生更改时自动处理, 这就是触发器. 触发器是 Mysql 响应 delete&insert&update 语句 (或位于 Begin 和 End 语句之间的一组语句) 而自动执行的一条 Mysql 语句. 触发器仅支持表, 临时表和视图均不支持.
__创建触发器时, 需要给出一下信息:
a). 唯一的触发器名;
b). 触发器关联的表;
c). 触发器应该响应的活动;(delete,insert 或 update)
d). 触发器何时执.(处理之前或之后)
__触发器的几个小点:
a). 创建触发器可能需要一定的权限, 但是触发器的执行是自动的;
b). 用触发器可以来保证数据的一致性(大小写, 格式等), 在触发器中执行这种类型的处理的有点是它总是进行这种处理, 而且是透明的执行, 与客户机应用无关;
c). 触发器的一种非常有意义的使用是创建审计跟踪. 实用出发, 把更改 (如果需要, 甚至还有之前和之后的状态) 记录到另一个表非常容易;
d).Mysql 触发器不支持 CALL 语句, 这表示不能从触发器内调用存储过程, 所需的存储过程代码需要复制到触发器中.
10, 事务处理
a). 事务处理是一种机制, 用来管理必须成批执行的 Mysql 操作, 以保证数据库不包含不完成的操作结果, 利用事务处理, 可以保证一组操作不会中途停止, 或者作为整体执行, 或者完全不执行, 其中如果发生错误, 则进行回退;
b). 事务处理用来管理 INSERT,UPODATE 和 DELETE 语句, 你不能回退 CREATE 或 DROP 操作, 事务处理块中可以使用这两条语句, 但如果执行回退, 它们不会被撤销;
c). 事务处理块中, 提交不会自动进行, 为了进行明确的提交, 使用 COMMIT 语句. 当 COMMIT 或 ROLLBACK 语句执行后, 事务会自动关闭;
d). 如果事务需要部分提交或者回退, 则需要在合适的位置添加占位符(保留点), 每个保留点都取表示的唯一名字, 以便在回退时, Mysql 知道回退到何处, 保留点在事务处理完成后自动释放;
e). 如果不需要 Mysql 自动提交更改, 可使用 SET autocommit=0;autocommit 标志决定是否自动提交更改, 只要其为(假), 则 Mysql 就不会自动提交更改. autocommit 标志针对每个连接而不是服务器.
11, 查看日志文件
a). 错误日志. 它包含启动和关闭问题以及任意关键错误的细节, 此日志通常名为 hostname.err, 位于 data 目录中;
b). 查询日志. 它记录所有 Mysql 活动, 在诊断问题时非常有用, 此日志文件可能会很快变得非常大, 因此不应该长期使用它. 此日志通常名为 hostname.log, 位于 data 目录中;
c). 二进制日志. 它记录更新过数据 (或者可能更新过数据) 的所有语句. 此日志通常名为 hostname-bin, 位于 data 目录内;
d). 缓存查询日志, 此日志记录执行缓慢的任何查询. 这个日志在确定数据库何处需要优化很有用, 通常命名为 hostname-slow.log, 位于 data 目录.
在使用日志时, 可用 FLUSH LOGS 语句来刷新和重新开始所有日志文件.
___胸中一点浩然气, 天地千里快哉风
来源: http://www.bubuko.com/infodetail-2765497.html