数据库&MYSQL&JDBC
2015-06-06 15:00
381 查看
一、数据库系统
别人总结的知识点: http://blog.csdn.net/yangcs2009/article/details/38349289 http://blog.csdn.net/jokes000/article/details/7521259
第一章:概论
1,数据库术语
1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。如mysql,oracle。
4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
2,数据模型是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;
1)数据模型的组成要素是:数据结构、数据操作、完整性约束条件。2)分类:概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计;逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现;物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。3)常见的数据模型包括:关系、层次、网状、面向对象、对象关系映射等几种。
4, 阐述数据库三级模式、二级映象的含义及作用。
数据库三级模式反映的是数据的三个抽象层次: 模式是对数据库中全体数据的逻辑结构和特征的描述。内模式又称为存储模式,是对数据库物理结构和存储方式的描述。外模式又称为子模式或用户模式,是对特定数据库用户相关的局部数据的逻辑结构和特征的描述。
数据库三级模式通过二级映象在 DBMS 内部实现这三个抽象层次的联系和转换。外模式面向应用程序, 通过外模式/模式映象与逻辑模式建立联系, 实现数据的逻辑独立性。 模式/内模式映象建立模式与内模式之间的一对一映射, 实现数据的物理独立性。
第二章:关系模型1,实体1)实体和属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。
2)E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。3)实体型之间的关系分为一对一、一对多和多对多三种类型。
2,关系模型的组成要素:数据结构:关系为表,元组为行,属性为列,;数据操作:增删改查;完整性约束:实体完整性、参照完整性和用户定义完整性。
3,主键: 能够唯一地标识一个元组的属性或属性组称为关系的键或候选键。 若一个关系有多个候选键则可选其一作为主键(Primary key)。
外键:如果一个关系的一个或一组属性引用(参照)了另一个关系的主键,则称这个或这组属性为外码或外键(Foreign key)。
4,完整性约束
1)实体完整性:用于标识实体的唯一性。它要求基本关系必须要有一个能够标识元组唯一性的主键,主键不能为空,也不可取重复值。【主键唯一且非空】
2)参照完整性: 用于维护实体之间的引用关系。 它要求一个关系的外键要么为空, 要么取与被参照关系对应的主键值,即外键值必须是主键中已存在的值。【外键值为空或被参照关系对应的主键值】
3)用户定义的完整性:就是针对某一具体应用的数据必须满足的语义约束。包括非空、 唯一和布尔条件约束三种情况。
5,关系的 5 种基本操作是选择、投影、并、差、笛卡尔积。
1)笛卡尔积:
将两个表中的各个元组两两组合,列数变为原来的列数之和,行数为原来行数之积;会产生很多无意义的元组
2)投影
取出一个表中的某几列,并去除重复的行或列;属性可能减少,元组可能减少。
3)选择
水平分割,选取符合条件的元组。
6,连接(join)
1)内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括条件联接和自然联接。也可以用where....from 表示
条件连接(包括等值连接):先对两个关系进行笛卡尔积运算,再根据条件做选择运算。
自然连接:当两个关系具有公共的属性时,连接条件是两个相同属性组的分量相等,并且把重复的属性去掉(与其他连接的不同)。即先等值连接,在做投影。
2)外连接: http://blog.csdn.net/hellowheat/article/details/4207467 3)交叉连接:笛卡尔积;所有的连接都是先做笛卡尔积,然后通过条件筛选。
三种连接的区别:内连接通过条件筛选,不符合条件的两个表中的元组都不会显示;外连接也通过条件筛选,如果是左外连接,左表中不符合条件的元组会显示一条记录,配对项中的数据为null。也就是说坐标的任何记录都会在连接表中显示。笛卡尔积完全不考虑条件,左表中的每条元组都要和右表中的元组配一下对。
7,数据库表设计3范式1NF(First Normal Form):当且仅当所有属性只包含原子值,即每个属性都是不可再分的数据项。如某一属性为联系方式,其中包括联系电话和通讯地址,则就不符合。2NF(Second Normal Form):当且仅当实体E满足第一范式,且每一个非键属性完全依赖主键时,满足第二范式。即要求数据库表中的每个实例或行必须可以被惟一地区分。3NF(Third Normal Form):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖时,满足第三范式。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。员工编号---部门编号---(部门名称、部门简介),这就叫传递依赖。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
第三章:安全与性能1,数据库并发控制事务是一组数据库操作序列,这些操作不可分割,要么全做,要么不做,是数据库的逻辑工作单位,相当于操作系统进程的概念。ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。其他详见hibernate悲观锁乐观所部分。
2,数据库的索引:http://blog.csdn.net/pang040328/article/details/4164874
3,常见关系型数据库小型数据库:access、foxbase;中型数据库:sql server 、mysql、informix;大型数据库:db2、Oracle、Sybase。
Mysql与Oracle区别这两种都是跨平台的
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是免费开源的而Oracle价格非常高。2. Oracle支持大并发,大访问量,可靠性高,是联机事务处理系统(OLTP)最好的工具。3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。4.Oracle和Mysql操作上的一些区别①主键Mysql
一般使用自动增长类型,在创建表时只要指定表的主键为auto
increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将
序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。②单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。③翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80④ 长字符串的处理长
字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串,
请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长
度字段值都应该提出警告,返回上次操作。⑤空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。⑥字符串的模糊比较MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱
二、Mysql数据库[/b]1)distinct:去除重复的行;当distinct用于检索多个属性时只能这样用, 如select distinct row1,row2 from table;这样的话会搜索出row1和row2均不相同的行。
2)limit 1,2 选取第二行和第三行;
3)order by 按列排序;order by 和limit组合能找出第n大(小)的值,找不到返回null;
4)where 除了正常关系运算外还可通过is null返回空值的行,[/b]多个条件时可以使用and or in连接;from.... where.....可以和join.....on.....等价转换,大于两个表时建议用第二种。
5)like进行字符串匹配,返回包含目标字串的行,有通配符%(任意多个字符)和_(任意一个字符),使用通配符后效率低下;6)正则表达式 regexp。关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。7)全文本搜索,match和against。效率比前两个高。8)字符串处理函数;日期处理函数;数字处理函数;聚集函数:运行在行组上,返回一个值。avg(),count(),max(); 聚集函数只能返回单个值,如果存在多个最大值的情况,则不能用聚集函数。
9)group by(分组) 和 having(过滤分组)
使用group by的两个要素:
(1) 出现在select后面的字段 要么是聚合函数中的,要么是group by 中的.
(2) 要筛选结果 可以先使用where 再用group by 或者先用group by 再用having http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html10)select子句循序:select、from、 where、 group by、 having、 order by、 limit11)子查询:where子句in操作符中;12)mysql中的join:交叉连接:mysql中以下五句等价,前三句都属于内连接,但在普通sql中,内连接必须加on条件
mysql> select * from table1 inner join table2;
mysql> select * from table1 nature join table2;
mysql> select * from table1,table2;
mysql> select * from table1 cross join table2;
mysql> select * from (table1, table2);
自然连接:下面两句等价,公共字段只显示一次。
mysql> select * from table1 natural join table2;
mysql> select * from table1 inner join table2 using (id);
外连接:外连接相对于内连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录。
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
13)表别名:在函数后面加as创建新的列名;14) sql可能出现null的一些情况: 表定义中某些列定义为null 没有Else的Case语句 左、右和完全外联接 选择Min、Max、Avg和Sum 数学运算涉及可为null的列
15)视图:查询结果组成的虚拟表,本身没有内容,内容随相关表而变化。每次用到视图时都需要执行查询效率不高。create view 视图 as select ......;16) 存储过程,sql中的封装函数,有in和out两种参数,表示输入和输出。要取得out参数的值需要对out参数执行select。http://www.jb51.net/article/30825.htm17)游标:用在存储过程中,取得select结果集中的数据,通过循环遍历对游标中的数据进行操作。http://www.cnblogs.com/trying/p/3296793.html18)触发器:create triger。在某个操作的前后执行某些操作。
19)delete删除重复字段问题 delete a from Person a join Person b on a.email=b.email and a.id>b.id;
20)建表时的引擎:engine=语句。
MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。支持全文本 。使用表锁技术优化并发,但高并发下性能较差;
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。 不支持全文本
MEMORY功能类似MyISAM该存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉。
21)索引:类似于字典里的索引,创建索引是指在某张表的一列或者多列上建立一个索引,不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。
有两种数据类型,B型树索引和哈希索引,MyISAM和InnoDB只支持B型树而MEMORY支持两者。
B树结构:其实就是一个平衡的排序多叉树,高度较小,但增删后的维护比较困难。
由于在修改一棵B树时,需要多次访问硬盘,效率低下,现在有些Nosql数据库采用LSM树。对该树进行写操作时,先在内存中生成一个子树,对子树进行操作,操作完成后在访问硬盘,与原树合并,提高了修改速度。
优点:提高检索速度,排序速度,分组速度;缺点:增删改表中数据需要修改索引(可以先删除表中的索引在进行增删数据),占用额外的物理空间。
分为普通索引(可重复),唯一性索引(主键是一种),全文索引,单列索引,多列索引,空间索引。
创建索引:
建表时创建:
已存在表直接创建:CREATE INDEX index_name ON table_name (column_list)
alter table 创建已存在表索引:alter table table_name ADD INDEX index_name(column_list);
使用索引:使用where过滤行时,所涉及到的列会先检测有没有索引,如果有的话会自动使用加快查询速度。多列索引只适用于索引中的多个列同时被查询到的情况。
MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。
通过索引优化来实现MySQL的ORDER BY语句优化:
ORDER BY的索引优化。如果一个SQL语句形如:
SELECT [column1],[column2],…. FROMORDER BY [sort];
别人总结的知识点: http://blog.csdn.net/yangcs2009/article/details/38349289 http://blog.csdn.net/jokes000/article/details/7521259
第一章:概论
1,数据库术语
1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。如mysql,oracle。
4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
2,数据模型是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;
1)数据模型的组成要素是:数据结构、数据操作、完整性约束条件。2)分类:概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计;逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现;物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。3)常见的数据模型包括:关系、层次、网状、面向对象、对象关系映射等几种。
4, 阐述数据库三级模式、二级映象的含义及作用。
数据库三级模式反映的是数据的三个抽象层次: 模式是对数据库中全体数据的逻辑结构和特征的描述。内模式又称为存储模式,是对数据库物理结构和存储方式的描述。外模式又称为子模式或用户模式,是对特定数据库用户相关的局部数据的逻辑结构和特征的描述。
数据库三级模式通过二级映象在 DBMS 内部实现这三个抽象层次的联系和转换。外模式面向应用程序, 通过外模式/模式映象与逻辑模式建立联系, 实现数据的逻辑独立性。 模式/内模式映象建立模式与内模式之间的一对一映射, 实现数据的物理独立性。
第二章:关系模型1,实体1)实体和属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。
2)E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。3)实体型之间的关系分为一对一、一对多和多对多三种类型。
2,关系模型的组成要素:数据结构:关系为表,元组为行,属性为列,;数据操作:增删改查;完整性约束:实体完整性、参照完整性和用户定义完整性。
3,主键: 能够唯一地标识一个元组的属性或属性组称为关系的键或候选键。 若一个关系有多个候选键则可选其一作为主键(Primary key)。
外键:如果一个关系的一个或一组属性引用(参照)了另一个关系的主键,则称这个或这组属性为外码或外键(Foreign key)。
4,完整性约束
1)实体完整性:用于标识实体的唯一性。它要求基本关系必须要有一个能够标识元组唯一性的主键,主键不能为空,也不可取重复值。【主键唯一且非空】
2)参照完整性: 用于维护实体之间的引用关系。 它要求一个关系的外键要么为空, 要么取与被参照关系对应的主键值,即外键值必须是主键中已存在的值。【外键值为空或被参照关系对应的主键值】
3)用户定义的完整性:就是针对某一具体应用的数据必须满足的语义约束。包括非空、 唯一和布尔条件约束三种情况。
5,关系的 5 种基本操作是选择、投影、并、差、笛卡尔积。
1)笛卡尔积:
将两个表中的各个元组两两组合,列数变为原来的列数之和,行数为原来行数之积;会产生很多无意义的元组
2)投影
取出一个表中的某几列,并去除重复的行或列;属性可能减少,元组可能减少。
3)选择
水平分割,选取符合条件的元组。
6,连接(join)
1)内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括条件联接和自然联接。也可以用where....from 表示
条件连接(包括等值连接):先对两个关系进行笛卡尔积运算,再根据条件做选择运算。
自然连接:当两个关系具有公共的属性时,连接条件是两个相同属性组的分量相等,并且把重复的属性去掉(与其他连接的不同)。即先等值连接,在做投影。
2)外连接: http://blog.csdn.net/hellowheat/article/details/4207467 3)交叉连接:笛卡尔积;所有的连接都是先做笛卡尔积,然后通过条件筛选。
三种连接的区别:内连接通过条件筛选,不符合条件的两个表中的元组都不会显示;外连接也通过条件筛选,如果是左外连接,左表中不符合条件的元组会显示一条记录,配对项中的数据为null。也就是说坐标的任何记录都会在连接表中显示。笛卡尔积完全不考虑条件,左表中的每条元组都要和右表中的元组配一下对。
7,数据库表设计3范式1NF(First Normal Form):当且仅当所有属性只包含原子值,即每个属性都是不可再分的数据项。如某一属性为联系方式,其中包括联系电话和通讯地址,则就不符合。2NF(Second Normal Form):当且仅当实体E满足第一范式,且每一个非键属性完全依赖主键时,满足第二范式。即要求数据库表中的每个实例或行必须可以被惟一地区分。3NF(Third Normal Form):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖时,满足第三范式。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。员工编号---部门编号---(部门名称、部门简介),这就叫传递依赖。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
第三章:安全与性能1,数据库并发控制事务是一组数据库操作序列,这些操作不可分割,要么全做,要么不做,是数据库的逻辑工作单位,相当于操作系统进程的概念。ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。其他详见hibernate悲观锁乐观所部分。
2,数据库的索引:http://blog.csdn.net/pang040328/article/details/4164874
3,常见关系型数据库小型数据库:access、foxbase;中型数据库:sql server 、mysql、informix;大型数据库:db2、Oracle、Sybase。
Mysql与Oracle区别这两种都是跨平台的
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是免费开源的而Oracle价格非常高。2. Oracle支持大并发,大访问量,可靠性高,是联机事务处理系统(OLTP)最好的工具。3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。4.Oracle和Mysql操作上的一些区别①主键Mysql
一般使用自动增长类型,在创建表时只要指定表的主键为auto
increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将
序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。②单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。③翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80④ 长字符串的处理长
字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串,
请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长
度字段值都应该提出警告,返回上次操作。⑤空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。⑥字符串的模糊比较MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱
二、Mysql数据库[/b]1)distinct:去除重复的行;当distinct用于检索多个属性时只能这样用, 如select distinct row1,row2 from table;这样的话会搜索出row1和row2均不相同的行。
2)limit 1,2 选取第二行和第三行;
3)order by 按列排序;order by 和limit组合能找出第n大(小)的值,找不到返回null;
4)where 除了正常关系运算外还可通过is null返回空值的行,[/b]多个条件时可以使用and or in连接;from.... where.....可以和join.....on.....等价转换,大于两个表时建议用第二种。
5)like进行字符串匹配,返回包含目标字串的行,有通配符%(任意多个字符)和_(任意一个字符),使用通配符后效率低下;6)正则表达式 regexp。关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。7)全文本搜索,match和against。效率比前两个高。8)字符串处理函数;日期处理函数;数字处理函数;聚集函数:运行在行组上,返回一个值。avg(),count(),max(); 聚集函数只能返回单个值,如果存在多个最大值的情况,则不能用聚集函数。
9)group by(分组) 和 having(过滤分组)
使用group by的两个要素:
(1) 出现在select后面的字段 要么是聚合函数中的,要么是group by 中的.
(2) 要筛选结果 可以先使用where 再用group by 或者先用group by 再用having http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html10)select子句循序:select、from、 where、 group by、 having、 order by、 limit11)子查询:where子句in操作符中;12)mysql中的join:交叉连接:mysql中以下五句等价,前三句都属于内连接,但在普通sql中,内连接必须加on条件
mysql> select * from table1 inner join table2;
mysql> select * from table1 nature join table2;
mysql> select * from table1,table2;
mysql> select * from table1 cross join table2;
mysql> select * from (table1, table2);
自然连接:下面两句等价,公共字段只显示一次。
mysql> select * from table1 natural join table2;
mysql> select * from table1 inner join table2 using (id);
外连接:外连接相对于内连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录。
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
13)表别名:在函数后面加as创建新的列名;14) sql可能出现null的一些情况: 表定义中某些列定义为null 没有Else的Case语句 左、右和完全外联接 选择Min、Max、Avg和Sum 数学运算涉及可为null的列
15)视图:查询结果组成的虚拟表,本身没有内容,内容随相关表而变化。每次用到视图时都需要执行查询效率不高。create view 视图 as select ......;16) 存储过程,sql中的封装函数,有in和out两种参数,表示输入和输出。要取得out参数的值需要对out参数执行select。http://www.jb51.net/article/30825.htm17)游标:用在存储过程中,取得select结果集中的数据,通过循环遍历对游标中的数据进行操作。http://www.cnblogs.com/trying/p/3296793.html18)触发器:create triger。在某个操作的前后执行某些操作。
19)delete删除重复字段问题 delete a from Person a join Person b on a.email=b.email and a.id>b.id;
20)建表时的引擎:engine=语句。
MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。支持全文本 。使用表锁技术优化并发,但高并发下性能较差;
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。 不支持全文本
MEMORY功能类似MyISAM该存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉。
21)索引:类似于字典里的索引,创建索引是指在某张表的一列或者多列上建立一个索引,不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。
有两种数据类型,B型树索引和哈希索引,MyISAM和InnoDB只支持B型树而MEMORY支持两者。
B树结构:其实就是一个平衡的排序多叉树,高度较小,但增删后的维护比较困难。
由于在修改一棵B树时,需要多次访问硬盘,效率低下,现在有些Nosql数据库采用LSM树。对该树进行写操作时,先在内存中生成一个子树,对子树进行操作,操作完成后在访问硬盘,与原树合并,提高了修改速度。
优点:提高检索速度,排序速度,分组速度;缺点:增删改表中数据需要修改索引(可以先删除表中的索引在进行增删数据),占用额外的物理空间。
分为普通索引(可重复),唯一性索引(主键是一种),全文索引,单列索引,多列索引,空间索引。
创建索引:
建表时创建:
已存在表直接创建:CREATE INDEX index_name ON table_name (column_list)
alter table 创建已存在表索引:alter table table_name ADD INDEX index_name(column_list);
使用索引:使用where过滤行时,所涉及到的列会先检测有没有索引,如果有的话会自动使用加快查询速度。多列索引只适用于索引中的多个列同时被查询到的情况。
MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。
通过索引优化来实现MySQL的ORDER BY语句优化:
ORDER BY的索引优化。如果一个SQL语句形如:
SELECT [column1],[column2],…. FROM