《MySQL 5.6从零开始学》读书笔记
2016-05-11 11:27
465 查看
第1章 初始MySQL
MySQL的主要优势:体积小
速度快
成本低:含社区版和企业版
可移植性:可以在多个平台上运行
丰富的接口:提供了用于C,Java,PHP,Python等语言的API
支持查询语言
安全性和连接性:十分灵活和安全的权限和密码系统,允许基于主机的验证。
第2章 MySQL的安装与配置
登录:mysql -h hostname -u username -p第3章 数据库的基本操作
创建数据库:create database database_name;删除数据库:drop database database_name;
使用数据库:use database_name;
查看系统所支持的存储引擎类型:show engines;
第4章 数据表的基本操作
数据表中每一行代表一条唯一记录,每一列代表一个域。创建表
create table table_name(
字段名1 数据类型[列级别约束条件],
字段名1 数据类型[列级别约束条件],
......
[表级别约束条件]
);
主键:能够唯一标示表中数据;可以结合外键定义不同数据表之间的关系,并且可以加快数据库查询速度。
外键:保证数据的完整性、一致性。
CREATE TABLE offices ( officeCode INT(10) NOT NULL UNIQUE, city VARCHAR(50) NOT NULL, address VARCHAR(50) NOT NULL, country VARCHAR(50) NOT NULL, postalCode VARCHAR(15) NOT NULL, PRIMARY KEY (officeCode) );
CREATE TABLE employees ( employeeNumber INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, lastName VARCHAR(50) NOT NULL, firstName VARCHAR(50) NOT NULL, mobile VARCHAR(25) NOT NULL, officeCode INT(10) NOT NULL, jobTitle VARCHAR(50) NOT NULL, birth DATETIME, note VARCHAR(255), sex VARCHAR(5) DEFAULT '男', CONSTRAINT office_fk FOREIGN KEY(officeCode) REFERENCES offices(officeCode) );修改表名:alter table officesrenameoffices_new;
修改字段的数据类型:alter table officesmodifyname varchar(30);
修改字段名:alter table officeschangecity city_new varchar(30);
添加字段:alter table officesaddmanager int(10);
删除字段:alter table offices
drop manager;
删除表的外键约束:alter table officesdrop foreign key office_fk;
删除表:(若表被其他表关联,先删除外键约束,再删除表)drop table offices;
删除表中数据:delete from offices;
第5章 数据类型和运算符
1 整数和浮点数如果不需要小数部分,则使用整数保存数据;反正,使用浮点数类型;
浮点类型包括float和double,如果需要精度较高时,应选择double类型。
2 浮点数和定点数
在一定长度下浮点数能表示更大的数据范围
定点数精度高
3 char与varchar
char固定长度,存储速度快,浪费空间
4 blob和text
blob是二进制字符串,text是非二进制字符串,两者均可存放大容量的信息。
blob主要存放图片、音频等信息;
text只能存储纯文本文件。
第6章 MySQL函数
略。第7章 查询数据
select [字段1,字段2...] from 表名 [where 条件表达式] [group by 字段 ][having <条件表达式>] [order by 字段 asc|desc] [limit [<位置偏移量>,]<行数>](注:order by默认为asc升序排列;
having<条件表达式>指定满足表达式限定条件的结果将被显示;)
7.4连接查询
内连接(inner join)查询:使用比较运算符进行表间某(些)列数据的比较操作,并将满足条件的记录输出;外连接:包括左连接(left outer join)和右连接(right outer join),查询结果不仅包括符合连接条件的行,还包括左边、右表或两个连接表中的所有数据;
复合条件连接:在连接查询的过程中,添加过滤条件,使查询结果更加准确。
区别:
内连接仅返回符合查询条件和连接条件的行;
左连接(left outer join):返回left outer子句中指定左表的所有行,而不仅仅是连接匹配的行;
右连接(right outer join):返回右表所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。
7.5 子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询。先计算子查询,子查询结果作为外层另一个查询的过滤条件。
带any/some子查询:满足内层子查询的任何一个条件;
带all的子查询:满足所有内层查询的条件;
带exists的子查询:子查询返回结果至少一行,exists的结果为true,外层语句进行查询;否则,外层语句将不进行查询;
带in关键字的查询:内层子查询返回一个数据列作为外部查询的比较条件;
带比较运算符的子查询:<,>,<=,>=,<>,!=
7.6 合并查询结果
利用union关键字,可以给出多个select语句,并将它们的结果合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。
select column,... from table1 union [all] select column,... from table2注:union执行时删除重复记录,union all不删除重复行也不对记过进行自动排序。
7.7 取别名
为表去别名:表名 [as] 表别名为字段去别名:列名 [as] 列别名
7.8 使用正则表达式查询regexp
^:匹配以特定字符或字符串开头的记录,如'^b'匹配baa$:匹配以特定字符或字符串结尾的文本,如'$b'匹配aab
.:匹配任意一个字符,如:‘...b’匹配aaab
*:匹配零个或多个它前面的字符
+:匹配前面字符一次或多次
字符串:匹配指定字符串,如'ac'匹配acb,bac
[字符集合]:只匹配其中任何一个字符,即为所查找的文本
[^字符集合]:匹配不在字符集合中的任意字符
{n,}:匹配前面字符
{n,m}:匹配前面字符串不少于n次,不多于m次
注:
select * from table_name where
regexp 'ab'与select * from table_name where
like 'ab'不同,前者可匹配‘abc',后者不可以
当通配符正确,却没查找出符合条件的记录,可能是因为数据库中字符串两端有空格。解决方法是使用trim函数,将字符串两端的空格删除后再进行匹配。
第8章 插入、更新与删除数据
8.1 插入数据
insert into 表名(字段列表) values(value_list);
<pre name="code" class="sql">insert into 表名(字段列表) values (value_list1),(value_list2),...;
);
insert还可将select结果插入到表中,但select结果必须和字段列表的个数和数据类型相同。
8.2更新数据
update 表名 set column_name1 = value1, column_name2 = value2, ... column_namen = valuen where 条件如果忽略where子句,MySQL将更新表中所有行。
8.3删除数据
delete from table_name [where <condition>]如果忽略where子句,将删除表中所有数据。
第9章 索引
索引能快速找出某个列中有一特定值的行。索引是在存储引擎中实现的。
MySQL中索引的存储类型有两种:bTree和hash
MyISAM和InnoDB存储引擎只支持BTree索引;
MEMORY/Hea引擎可以支持hash 和btree索引。
索引的设计原则:
索引并非越多越好,因为当表中数据更新时,索引也会进行索引和更新;
避免对经常更新的表进行过多的索引;
数据量小的表不建议使用索引;
在不同值较多的列上建立索引,不同值较少的列上不要建立索引;
当唯一性是某种数据本身的特性时,指定唯一性索引;
在频繁进行排序或分组的列上建立索引,如有多列,可建立组合索引。
创建表时创建索引
create table table_name [col_name data_type] [unique|fulltext|spatial][index|key] [index_name](col_name[length]) [asc|desc];
unique:唯一索引
fulltext:全文索引
spatial:空间索引
在已经存在的表上创建索引
alter table table_name add <pre name="code" class="sql">[unique|fulltext|spatial][index|key] [index_name](col_name[length]) [asc|desc];
删除索引
alter table table_name drop index index_name;或者使用drop index
drop index index_name on table_name;
第10章 存储过程和函数
存储过程就是一条或多条sql语句的集合。10.1创建存储过程和函数
创建存储过程:create procedure sp_name([proc_parameter]) [characteristics...] routine_body
proc_parameter为指定存储过程的参数列表,列表形式如下:
[in | out | inout] param_name typein 表示输入参数;out表示输出参数; inout表示既可以输入也可以输出。
characteristics指定存储过程的特性。
toutine_body是SQL代码的内容,用bdgin...end表示SQL代码的开始和结束。
在定义存储过程语句前面添加
delimiter //将MySQL的结束符设置为'//',并以
end //结束存储过程。
存储过程定义完毕之后再使用
delimiter ;恢复默认结束符‘;’。
创建存储函数:
create function func_name([func_parameter]) return type [characteristic...] routine_body定义变量:
变量可以在begin...end中使用
declare var_name date_type [default value];为变量赋值用set
set var_name = value[,var_name1 = value1...];光标
查询语句可能返回多条语句,在存储过程或存储函数中,可以使用光标逐条读取查询结果中的记录。
declare 光标名称 cursor for 查询语句;打开光标
open 光标名称;
使用光标
fetch 光标名称 into 参数名称[,参数名称...];关闭光标
close 光标名称;流程控制
if:
case:
loop:重复执行某条语句
leave:退出被光标标志的流程控制
iterate:将执行顺序转到语句段开头处
repeat:条件为真退出,否则继续执行
repeat 语句 until 条件 end repeat;
while
while 条件 do 语句 end while;
注解:
sql语句后面加"\G":将查询结果按列打印,可以将每个字段打印到单独的行。
相关文章推荐
- Mysql分页查询的方法
- mysql重要语句
- Windows下忘记MySQL root密码解决方法
- mac mysql完全卸载
- mac mysql安装
- mysql 半同步复制配制
- Mysql 创建查询视图
- mysql 行锁排查
- mysql 行锁排查
- mysql 行锁排查
- 阿里云Ubuntu服务器配置教程(一)——服务器与MySQL配置
- 如何在MySQL中设置外键约束以及外键的作用
- MySQL存储引擎总结
- mysql中文排序
- mysql详解--数据库基本概念
- 查看及修改MySQL注释
- mysql复制
- mysql-省市区县-中华人民共和国统计局-最新行政区域划分-有需要其他的格式的,留下联系方式
- mysql查询一天,查询一周,查询一个月的数据【转】
- MYSQL的自增ID