买了这本书,想着边看边整理一下,可以方便以后查阅。分享出来,大家都可以看看!
第3章 使用MySQL
- 使用数据库 —— USE 数据库名称
- 了解数据库 —— SHOW 数据库名称
- 查看数据库中的表 —— SHOW TABLES
- 查看表中列的消息 —— SHOW COLIMNS from 表名(DESCRIBE 表名)
- 自动增量 ——AUTO_INCREMENT
- 主键 —— PRIMARY KEY
第4章 检索数据库
SELECT语句:
- 检索一个列: SELECT 列名 FROM 表名
- 检索多个列: SELECT 列名1,列名2 FROM 表名
- 检索所有列: SELECT * from 表名
- LIMIT 关键字: SELECT 列名 from 表名 limit 2(检索不多于2行的)
SELECT 列名 from 表名 limit 2,2 (从行2开始检索两行)注意:行2表示的是表中的第三行
- DISTINCT关键字: SELECT DISTINCT 列名1 from 表名(只显示该列中不相同的数据)
第5章 排序检索数据
- ORDER BY关键字: SELECT * from 表名 ORDER BY 列名1 (按列名1排序检索表格)
SELECT * from 表名 ORDER BY 列名1 DESC (按列名1逆序排序检索表格)
SELECT * from 表名 ORDER BY 列名1 DESC,列名2(先按列名1逆序排序,再按列名2正序排 序)
第6章 过滤数据
WHERE子句
- 使用方法: SELECT * FROM 表名 WHERE 条件
- 与ORDER BY混合使用: SELECT * FROM 表名 WHERE 条件 ORDER BY 列名;(ORDER BY必须放在WHERE之后)
- where子句后的条件: <> ,> ,< >=,<= ,and ,or
- 范围值检索: SELECT * from 表名 WHERE 列名 BETWEEN 数字1 AND 数字2 (按列名在数字1和数字2之间检索)
- 空值检索: SELECT * from 表名 WHERE 列名 IS NULL;
第7章 数据过滤
- AND和OR操作符: AND的优先级高于OR
- IN操作符:SELECT * from 表名 WHERE 列名 IN(数值1,数值2)
- NOT操作符: SELECT * from 表名 WHERE 列名 NOT IN(数值1,数值2)
第8章 用通配符进行过滤
LIKE操作符
- 百分号(%)通配符: SELECT * from 表名 WHERE 列名 LIKE ‘XXX%’(检索列名以XXX开头的任何字符)
SELECT * from 表名 WHERE 列名 LIKE ‘%XX%’(检索列名中间为XX的任何字符)
(注意:用%不能匹配值为NULL的行)
- 下划线(_)通配符:SELECT * from 表名 WHERE 列名 LIKE ‘_XXX’
注意: %可以匹配多个字符,而_只能匹配一个字符
第9章 使用正则表达式进行搜索
正则表达式的作用是匹配文本,将一个模式与一个文本串进行比较
- 使用方法: SELECT 列名 from 表名 WHERE 列名 REGEXP ‘正则表达式’ ;
SELECT 列名 from 表名 WHERE 列名 REGEXP ‘000’(‘000’表示匹配任意一个字符)
- 进行OR匹配: SELECT 列名 from 表名 WHERE 列名 REGEXP ‘字符1| 字符2’(匹配数值1和数值2中的其中一个)
- 匹配几个字符之一: SELECT 列名 from 表名 WHERE 列名 REGEXP ‘[字符1 字符2 字符3] XXX’(匹配这三个字符中的一个)
l 匹配范围: SELECT 列名 from 表名 WHERE 列名 REGEXP '[字符1- 字符3]XX'
l 匹配特殊字符: SELECT 列名 from 表名 WHERE 列名 REGEXP ‘ .’
l 定位符: SELECT 列名 from 表名 WHERE 列名 REGEXP '^[8.]'(以8开头的所有字符) ($这是结尾标志符)
第10章 创建计算字段
- 拼接字段 —— CONCAT
SELECT CONCAT (列名1,‘(', 列名2,')’))from 表名
SELECT CONCAT (RTrim(列名1),LTrim(列名2)) from 表名(RTrim去除列值右边的空格)
- 算数运算 —— * 、/、+、-
第11章 使用数据处理函数
- UPPER()和LOWER()函数——字段全部大写或者小写
- DATE()函数 —— 仅提取列中的日期
- YEAR() 函数 —— 从日期中返回年
- Month()函数 —— 从日期中返回月
- 数值处理函数 —— abs()/Cos()/Exp()/MOd()/Pi()
第12章 汇总数据
- 聚集函数——AVG()/COUNT()/MAX()/MIN()/SUM()
注意: SELECT COUNT(*) from 表格 (对表中行的数目进行统计,不管表列中是否包含空值)
SELECT COUNT(列名) from 表格 (对当前列中不是空值的行的数目进行统计)
- SELECT AVG(DISTICNCT 列名) from 表格 (去重后求取平均值)
第13章 分组数据
- 分组 —— GROUP BY
GROUP BY子句必须在where子句之后,在ORDER BY子句之前
SELECT 列名1,count(列名2) AS new_列名2 FROM 表名 group by 列名1 WITH ROLLUP;(ROLLUP得到每个分组和每个分组汇总级别的值)
- 过滤分组 ——HAVING
where中的子句部分,都可以在having中用,但是where在分组前进行过滤,而having在分组后过滤;
例如: SELECT 列名1,COUNT(列名2) as new_c from 表格 group by 列名1 having COUNT(列名2)>= 2;
SELECT 列名1,sum(列名2 * 列名3) as new from 表名 group by 列名1 having sum(列名2 * 列名3) >=50
在HAVING中使用聚合函数的时候,必须写全不能用其重命名
第14章 使用子查询
- 子查询 —— SELECT语句中嵌套SELECT语句
第15章 联结表
- 联结表的基础是有关系数据表的存在
- 内部联结(inner join)—— SELECT * from 表1 inner join 表2 on 表1.列名 = 表2.列名
第 16 章 创建高级联结
- 自联结 —— 就是同一张表引用多次
- 自然联结
- 外部联结 —— OUTER JOIN
SELECT a.列名1,a.列名2,b.列名1 FROM 表1 as a LEFT OUTER JOIN 表2 as b ON a.列名 = b.列名
外部联结中必须使用LEFT或者RIGHT指定联结方向;
- 聚集函数也可以使用在联结中
第17章 组合查询
- 使用条件 : 1)在单个查询中从不同的表返回类似结构的数据;2)对单个表执行多个查询,按单个查询返回数据;
- 创建组合查询 —— UNION关键字
SELECT 语句1 UNION SELECT 语句2 (UNION在查询时会自动去掉重复行)
SELECT 语句1 UNION ALL SELECT 语句2 (UNION在查询时不会去掉重复行)
- UNION和WHERE的区别:UNION相当于是WHERE的补充,即如果需要每个条件的匹配行全部出现,就必须用UNION ALL ;
第18章 全文本搜索
- 一般在创建表时指定FULLTEXT:例如:FULLTEXT(note_txt)
- 全文本搜索—— Match() 和Against()
Match() 指定被搜索的列,Against() 指定要使用的搜索表达式式;
SELECT note_tx FROM 表名 WHERE Match(note_txt) Against('表达式')
Match使用说明:传递给Match()的值必须与FULLTEXT()定义的相同;如果指定多个列就必须列出它们且次序正确
- 使用查询扩展
SELECT note_txt FROM 表名 WHERE Match(note_txt) Against('字符串' WITH QUERY EXPANSION)
扩展查询输出与你想要的搜索结果有关的值,但是也并不包含你的搜索结果
- 布尔文本搜索—— IN BOOLEAN MODE
SELECT note_txt from 表名 WHERE Match(note_txt) Against('字符串' IN BOOLEAN MODE)
例如: SELECT note_txt FROM 表名 WHERE Match(note_txt) Against('+词1 <词2''' IN BOOLEAN MODE)
SELECT note_txt FROM 表名 WHERE Match(note_txt) Against('"词1 词2"' IN BOOLEAN MODE)(匹配短语)
第19章 插入数据
- INSERT语句
INSERT INTO 表名 VALUES(按列次序输入每列中的值)
INSERT INTO 表名(各个列名)VALUES(按列输入每个值)
- 插入检索出的数据
INSERT INTO 表名 (各个列名)SELECT (各个列名)FROM 表名1;
第20章 更新和删除数据
- 更新数据——UPDATE(1,更新表中所有行;2,更新表中特定行)
UPDATE 表名 SET 更新公式 where 条件
- IGNORE关键字 ——作用是更新多个行的时候忽略可能出现的错误 UPDATE IGNORE 表名...
- 删除数据——DELETE(1,从表中删除特定的行;2,从表中删除所有行)
DELETE FROM 表名 WHERE 条件 (使用DELETE时不能省略where 防止删除整个表)
注意:小心使用UPDATE和DELETE,因为这两个是不可逆的
第21 章 创建和操纵表
- 创建表
例如: CREATE TABLE price
( pro_id int not null primary key auto_increment,
pro_name char(50) not null,
pro_date datetime not null)
注意:主键值必须唯一,如果主键使用单个列,则它的值必须唯一;如果使用多个列,则这些列的组合值必须唯一
允许NULL值的列不能作为唯一标志,NULL值不是空值
- 更新表(使用ALTER时要格外小心,最好做一个备份)
ALTER TABLE 表名 ADD 列名 char(20) ——给原表增加一个新列(列名)
ALTER TABLE 表名 DROP COLUMN 列名 —— 删除表中的列(列名)
- 删除表
DROP TABLE 表名
- 重命名表
RENAME TABLE 表名 to 新表名
第22章 使用视图
- 创建视图 —— CREATE VIEW 。。。。
- 使用视图 —— SHOW CREATE VIEW viewname
- 删除视图 —— DROP viewname
- 视图一般用于检索而不用于更新(INSERTUPDATEDELETE)
第23章 使用存储过程
使用存储过程的好处:简单、安全、高性能
- 创建存储过程
CREATE PROCEDURE save_name ()
BEGIN
SELECT 语句1;
SELECT 语句2;
END
- 调用存储: CALL save_name()
- 删除存储过程: DROP PROCEDURE save_name;
- 带参数的存储过程: CREATE PROCEDURE save_name(参数1,参数2,参数3)
调用过程: CALL save_name(@变量1,@变量2,@变量3)
第24 章 使用游标
- 游标(cursor)是一个存储在MySQL服务器上的数据库查询,是被SELECT语句检索数来的结果集,存储了游标后,应用程序可以根据需要滚动或者浏览其中的数据
- 创建游标
DECLARE 游标名 CURSOR FOR SELECT语句
- 打开或关闭游标
OPEN/CLOSE 游标名
例如:
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders ;
OPEN ordernumbers ;
FETCH ordernumbers INTO o; %查询游标中的一行
CLOSE ordernumbers
END ;
第25章 使用触发器
用于数据表发生变化(DELETE、INSERT、UPDATE)时,自动执行的一条SQL语句
CREATE TRIGGER 触发器名 AFTER INSERT ON 表名 FOR EACH ROW;
CREATE TRIGGER 触发器名 BEFORE/AFTER DELETE/UPDATE ON 表名 FOR EACH ROW;
第26章 管理事物处理
事物处理可以用来维护数据库的完整性,保证成批的MYSQL操作要么全部执行,要么都不执行。
关于事物处理需要知道的术语: 事物回退提交保留点
- 执行事物——COMMIT
- 撤销 —— ROLLBACK
- 保留点 —— SAVEPOINT (用于在回退时可以回退到保留点)