数据库
2019-09-09 10:12:05 0 举报
AI智能生成
数据库
作者其他创作
大纲/内容
SQL优化
索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引分类
唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。
尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。
主键索引
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
主键自动创建索引
候选索引
与主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库和自由表中,可以为每个表建立多个候选索引。
聚集索引(聚簇索引)
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
非聚集索引(非簇索引)
也叫非簇索引,在非聚集索引中,数据库表中记录的物理顺序与索引顺序可以不相同。一个表中只能有一个聚集索引,但表中的每一列都可以有自己的非聚集索引。如果在表中创建了主键约束,SQL
Server将自动为其产生唯一性约束。在创建主键约束时,如果制定NONCLUSTERED关键字,则将为表产生唯一聚集索引。
索引的作用
快速取数据;
保证数据记录的唯一性;
实现表与表之间的参照完整性;
在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
保证数据记录的唯一性;
实现表与表之间的参照完整性;
在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
索引优/缺点
优点
在设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点。
能提高数据的搜索及检索速度,符合数据库建立的初衷。
能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。
在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。
建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义。
能提高数据的搜索及检索速度,符合数据库建立的初衷。
能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。
在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。
建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义。
缺点
在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。
在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加
在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。
在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加
在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。
子主题
(1)MySQL Hash索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。(2)MySQL Hash索引无法被用来避免数据的排序操作。(3)MySQL Hash索引不能利用部分索引键查询。(4)MySQL Hash索引在任何时候都不能避免表扫描。(5)MySQL Hash索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。
(1)MySQL Hash索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。(2)MySQL Hash索引无法被用来避免数据的排序操作。(3)MySQL Hash索引不能利用部分索引键查询。(4)MySQL Hash索引在任何时候都不能避免表扫描。(5)MySQL Hash索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。
索引失效
1、使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,一般大于5%-15%就不走索引而走FTS
2、单独的>、<。
3、like "%-" 百分号在前。
4、单独引用复合索引里非第一位置的索引列。
5、字符型字段为数字时在where条件里不添加引号。
6、当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
7、索引失效,可以考虑重建索引,rebuild online。
8、B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走、联合索引 is not null 只要在建立的索引列(不分先后)都会走。
2、单独的>、<。
3、like "%-" 百分号在前。
4、单独引用复合索引里非第一位置的索引列。
5、字符型字段为数字时在where条件里不添加引号。
6、当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
7、索引失效,可以考虑重建索引,rebuild online。
8、B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走、联合索引 is not null 只要在建立的索引列(不分先后)都会走。
EXPLAIN
显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
http://blog.csdn.net/zhuxineli/article/details/14455029
慢查询
http://blog.csdn.net/jie_liang/article/details/77340905
运维
运维
运维,这里指互联网运维,通常属于技术部门,与研发、测试、系统管理同为互联网产品技术支撑的4大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同。
一般晚上进行运行维护
数据库备份
库外备份
黑窗口操作
黑窗口操作数据库
ctrl+c退出数据库
数据库操作
sql语句操作
一次操作一张表
库内备份
create database 数据库的名字:第二:进入数据库 第三:source d:mydb1.sql
黑窗口操作具体步骤
逻辑备份与物理备份
逻辑备份
备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备,包括导出/导入(EXPORT/IMPORT)。这种方法包括读取一系列的数据库日志,并写入文件中,这些日志的读取与其所处位置无关。
物理备份
物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归档模式下(业务数据库在非归档模式下运行),且需要极大的外部存储设备,例如磁带库,具体包括冷备份和热备份。冷备份和热备份是物理备份(也称低级备份),它涉及到组成数据库的文件,但不考虑逻辑内容。
分类
冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。
优点
是非常快速的备份方法(只需拷文件)
容易归档(简单拷贝即可)
容易恢复到某个时间点上(只需将文件再拷贝回去)
能与归档方法相结合,做数据库“最佳状态”的恢复。
低度维护,高度安全。
容易归档(简单拷贝即可)
容易恢复到某个时间点上(只需将文件再拷贝回去)
能与归档方法相结合,做数据库“最佳状态”的恢复。
低度维护,高度安全。
缺点
单独使用时,只能提供到“某一时间点上”的恢复。
在实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
不能按表或按用户恢复。
在实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
不能按表或按用户恢复。
热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。即热备份是系统处于正常运转状态下的备份。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog()方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。
优点
可在表空间或数据库文件级备份,备份的时间短。
备份时数据库仍可使用。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体做恢复
恢复是快速的,在大多数情况下在数据库仍工作时恢复。
备份时数据库仍可使用。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体做恢复
恢复是快速的,在大多数情况下在数据库仍工作时恢复。
缺点
不能出错,否则后果严重
若热备份不成功,所得结果不可用于时间点的恢复
因难于维护,所以要特别仔细小心,不允许“以失败告终”。
若热备份不成功,所得结果不可用于时间点的恢复
因难于维护,所以要特别仔细小心,不允许“以失败告终”。
区别
物理备份就是转储ORACLE物理文件(如数据文件、控制文件、归档日志文件等),一旦数据库发生故障,可以利用这些文件进行还原;
逻辑备份就是对数据库对象(如用户、表、存储过程等)利用EXPORT等工具进行导出工作,可以利用IMPORT等工具把逻辑备份文件导入到数据库
逻辑备份是通过逻辑手段记录要备份的数据库对象的信息,是一种对象级备份的方案,因此逻辑备份的备份集的可移植性比较强,
可以把数据库的逻辑备份恢复到不同版本不同平台的数据库上,也正式因为逻辑备份是对象级的备份,因此备份和恢复的效率比较低,
对于大型的系统,采用逻辑备份,其恢复时间之长是大多数大型业务系统所不能忍受的。相对而言,物理备份不具备移植性,
备份环境和恢复环境必须是完全相同的,由于物理备份是对数据库的文件(Block)进行备份,其备份和恢复速度相对比较快,
在大型业务系统中较多地使用物理备份
逻辑备份就是对数据库对象(如用户、表、存储过程等)利用EXPORT等工具进行导出工作,可以利用IMPORT等工具把逻辑备份文件导入到数据库
逻辑备份是通过逻辑手段记录要备份的数据库对象的信息,是一种对象级备份的方案,因此逻辑备份的备份集的可移植性比较强,
可以把数据库的逻辑备份恢复到不同版本不同平台的数据库上,也正式因为逻辑备份是对象级的备份,因此备份和恢复的效率比较低,
对于大型的系统,采用逻辑备份,其恢复时间之长是大多数大型业务系统所不能忍受的。相对而言,物理备份不具备移植性,
备份环境和恢复环境必须是完全相同的,由于物理备份是对数据库的文件(Block)进行备份,其备份和恢复速度相对比较快,
在大型业务系统中较多地使用物理备份
数据库还原(恢复)
数据库密码修改(黑窗口)
1) 停止mysql服务器 运行输入services.msc 停止mysql服务
2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)
3) 新打开cmd 输入mysql -u root -p 不需要密码
use mysql;
update user set password=password('abc') WHERE User='root';
4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程
5) 在服务管理页面 重启mysql 服务
密码修改完成
2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)
3) 新打开cmd 输入mysql -u root -p 不需要密码
use mysql;
update user set password=password('abc') WHERE User='root';
4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程
5) 在服务管理页面 重启mysql 服务
密码修改完成
双击热备
所谓双机热备系统,其实可以认为是集群的最小组成单位,就是将中心服务器安装成互为备份的两台服务器,并且在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会迅速的自动启动并运行(一般为数分钟左右),从而保证整个网络系统的正常运行!双机热备的工作机制实际上是为整个网络系统的中心服务器提供了一种故障自动恢复能力
什么是标准双机热备
标准的双机热备是基于双机软件和共享存储实现的,他在无人值守的情况小也会快速的切换,
不会有数据丢失和破坏
不会有数据丢失和破坏
集群、分布式
NoSql
分支主题
基础
数据库(Database)
储存持久性数据的集合。(本质是文件系统)
Oracle数据库 oracle(甲骨文)公司 大型的关系型数据库
db2 ibm公司 大型的收费的关系型数据库
sqlserver Microsoft 中大型的收费的关系型数据库
mysql oracle公司 中小型免费开源关系型数据库,由于体积小,速度快,总体拥有成本低,尤其是开放源码
nosql 面向对象的数据库
db2 ibm公司 大型的收费的关系型数据库
sqlserver Microsoft 中大型的收费的关系型数据库
mysql oracle公司 中小型免费开源关系型数据库,由于体积小,速度快,总体拥有成本低,尤其是开放源码
nosql 面向对象的数据库
数据库分类
网状数据库(Network Database)
关系数据库(Relation Database)
商业应用中主要使用
商业应用中主要使用
关系型数据库名称
DB2
作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器——
System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2 forMVSV1
在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS
提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2
Universal Database
6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。
Informax
Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族。作为一个集成解决方案,它被定位为作为IBM在线事务处理(OLTP)旗舰级数据服务系统。 IBM对Informix和DB2都有长远的规划,两个数据库产品互相吸取对方的技术优势。
Oarcle
racle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。 到目前仍在数据库市场上占有主要份额。作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。主要应用的企业:现在基本大型的企业都是用的oracle数据库,如公安局的身份证数据信息存储、中国银行的数据信息存储、淘宝数据存储等等。这些企业基本都有一个共同特点:数据量大,要求数据准确,要求系统性能高。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MS SQL Server
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
Sybase
美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。 Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。
关系型数据库由来
虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是在数据库独立和抽象级别是仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而关系型数据库就可以较好的解决这些问题。
关系型数据库介绍
关系型数据库模型是把复制的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类合并、连接或选取等运算来实现数据库的管理。
关系类型:一对一,一对多,多对多
树状数据库(Hierarchical Database)
面向对象数据库(Object-oriented Database)
myql忘记密码
http://www.jb51.net/article/87580.htm
SQL
结构化查询语言,是上世纪70年代由IBM公司开发,用于对数据库进行操作的语言
是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名
数据库管理系统(DBMS)
位于用户与操作系统之间的一层数据管理软件
数据库系统(Database System):包括数据库、DBMS、应用系统、数据库管理员(DBA)
数据库规则
数据库里的数据集合都存放在数据表里
数据表有数据行(row)和数据列组成
一个数据行就是数据表里的一条记录
记录可以包含多个信息项,数据表里的每一个数据列都对应一个信息项
数据库的作用
子主题
关系型数据库
关系型数据库以行和列的形式储存数据,以便于用户理解。这一系列的行和列被称为表,
一组表组成了数据库。表与表之间的数据记录有关系。用户用查询来检索数据库中的数据。
一组表组成了数据库。表与表之间的数据记录有关系。用户用查询来检索数据库中的数据。
子主题
键
主键(Primary Key)
关系型数据库中的一条记录中由若干个属性,若其中某一个属性组能唯一标识一条记录,
该属性组就可以称之为一个主键
主键是用于标识当前记录的字段。它的特点是非空,唯一,必须的。
该属性组就可以称之为一个主键
主键是用于标识当前记录的字段。它的特点是非空,唯一,必须的。
外键(Foreign Key)
外键用于与另一个表的关联,是能确定另一张表记录的字段,用于保持数据的一致性
foreign key(外键)特点:
1.外键必须是另一表或自身表的主键的值
2.外键可以重复
3.外键可以为空
4.一张表中可以有多个外键
1.外键必须是另一表或自身表的主键的值
2.外键可以重复
3.外键可以为空
4.一张表中可以有多个外键
主键和外键
预备键
在数据库设计中,选多个唯一的候选键,也叫候选关键字,
例如一个表中有ID和学号,学号就可以作为预备键。
例如一个表中有ID和学号,学号就可以作为预备键。
引用表
包含外键的表,也叫子表;被引用表就是父表
引用的完整性
子表中的外键仅限于父表中的值
自引用
外表可以引用自己表的主键
数据类型
char
固定长度字符串类型,如果没有指定长度,默认长度是
255,如果储存的字符没有达到指定长度,mysql将会在
其后面用空格补足到指定长度。
255,如果储存的字符没有达到指定长度,mysql将会在
其后面用空格补足到指定长度。
varchar
可变长度字符串类型,它的长度可以由我们自己指定,它
能保存数据长度的最大值是65535,如果储存的字符没有
达到指定的长度,不会补足到指定长度。
能保存数据长度的最大值是65535,如果储存的字符没有
达到指定的长度,不会补足到指定长度。
text/tinytext
可变长度字符串类型,其储存范围是28-1B
日期
date:日期类型,只有年月日
datetime:日期类型,有年月日,有时分秒
time:时间类型,只有时分秒,没有年月日
timestamp:时间类型,有时分秒,没有年月日
子主题
bigint:范围-2^63到2^15-1
int:范围-2147483648到2147483647
smallint:2^15到2^15-1
sq语法
select(查询)
select name from student;查询学生表里面的name
select name,t_id from student;查询学生表里面的name和t_id这两个
select * from student;查询学生表里面所有的东西
select name as 姓名 from student;as重命名,将name改成姓名
select DISTINCT name from student; 去重。把重复符名字去除掉
select id,t_id,(id+t_id) from student;计算id和t_id的和;注:一方有值为nul时,最终结果无值
select id,t_id,(id+ifnull(t_id,0)) as he from student 添加一个if判断,即使一方为null,也会把null值为0去进行加减,并得出最后值
update(更正)
update 表名 set 字段名称=值; 全部修改
update 表名 set 名称1=值,名称2=值; 修改多个字段
配合where条件,进行具体值的修改
update 表名 set 名称1=值,名称2=值; 修改多个字段
配合where条件,进行具体值的修改
删除
drop
格式 delete from 表名.这会将表中所有数据删除。
delete
有条件删除
delete from 表名 where 条件.
delete from 表名 where 条件.
truncate
delete 与truncate的区别
1.delete是一行一行删除 truncate是将表结构销毁,在重新创建表结构.如果数据比较多,truncate的性能高。
2.delete是dml语句 truncate dcl语句 delete是受事务控制. 可以回滚数据.truncate是不受事务控制. 不能回滚.
2.delete是dml语句 truncate dcl语句 delete是受事务控制. 可以回滚数据.truncate是不受事务控制. 不能回滚.
删除表与删除表数据的区别
1.删除表 drop table 表名
2.删除表中记录
1.delete from 表名
2.truncate table 表名
2.删除表中记录
1.delete from 表名
2.truncate table 表名
数据库开发步骤
开发准备
打开MySQL服务,并使用root登录
启动MySQL服务:sudo service mysql start
使用root 用户登录,密码为空则直接回车登录mysql-u root
使用root 用户登录,密码为空则直接回车登录mysql-u root
Mac上MySQL之初始化密码操作
详细步骤
新建数据库
CREATE DATABASE<数据库名字>;(大小写随意)
编码格式设置:ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
显示数据库
SHOW DATABASES;
SHOW TABLES;(显示数据库中的表)
连接数据库
USE<数据库名字>;
新建数据表
数据表(table)简称表,它是数据库最重要的组成部分之一。
数据库只是一个框架,表才是实质内容。而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被连接起立,才成为可以交叉查阅,一目了然的数据库
数据库只是一个框架,表才是实质内容。而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被连接起立,才成为可以交叉查阅,一目了然的数据库
CREATE TABLE<表名>{
列名a数据类型(数据长度),
列名b数据类型(数据长度)
}
列名a数据类型(数据长度),
列名b数据类型(数据长度)
}
MySQL
整数除了INT外,还有TINYINT、SMALLINT、MEDIUMINT、BIGINT
TINYINT有符号的范围是-128-127,无符号的范围是从0到255的整型数据。
SMALLINT一个小整数。有符号的范围是-2^15到2^15-1的整型数据,无符号的范围是0到65535.一个大小为2个字节
mediumint 一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215.一位大小为3个字节
int一个正常大小整数,有符号的范围是-2^31到2^31-1的整形数据,无符号的范围是0到4294967295,一位字节大小为4个字节
子主题
子主题
子主题
子主题
子主题
子主题
子主题
插入数据
insert into <表名>(列名a,列名b,...)values(值1,值2,...)
insert into <表名> values(值1,值2,...)
约束数据
约束概念
约束是一种限制,他通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性
约束分类
主键:PRIMARY KEY
子主题
外键:FOREIGN KEY
默认值:DEFAULT
唯一:UNIQUE
非空:NOT NULL
创建分类
创建主键约束
创建外键约束
创建默认值约束
创建唯一的约束,即非空约束
查询数据
单表查询
分页查询
select * from orders order by price desc LIMIT 0,10--分页查询从0开始向后查找10条数据
模糊查询
select * from 表名 where name like "";--模糊查询
去重查询
select distinct name from 表名;--去重查询
全部查询
select * from 表名;--查询所有信息
升降序查询
select * from 表名order by 字段 asc/desc;--升序排列,降序排列
条件查询
select * from 表名 where age>=10 or age <=12;--or:或
select * from 表名 where age between 10 and 12;--and:并且
select * from 表名 where age between 10 and 12;--and:并且
and优先级略高于or
重命名查询
select name as 注释 from 表名;-- 为查询信息添加注释
是否为空查询
select * from 表名 where name is not null;
select * from 表名 where name not name is null;-- 条件不为空
select * from 表名 where name not name is null;-- 条件不为空
注:开发避免使用like和*,in ,太low
子查询
子查询按照结果分类
单行单列
单列子查询就是一个值,我们就可以使用>,<,>=,<=,=,!=关系运算符比较
单行多列
>any:大于子查询中的最小值
>all:大于子查询中的最大值
<any:小于子查询中的最大值
<all:小于子查询中的最小值
>=any/<=any:大于/小于等于子查询中的最小/大值
>=all/<=all:大于/小于等于子查询中最大/小值
!=any或<>any:不等于子查询中的任意值
!=all或<>all:不等于子查询中的所有值
=any:等于子查询中任意值
=all:等于子查询中所有值(无意义)
>all:大于子查询中的最大值
<any:小于子查询中的最大值
<all:小于子查询中的最小值
>=any/<=any:大于/小于等于子查询中的最小/大值
>=all/<=all:大于/小于等于子查询中最大/小值
!=any或<>any:不等于子查询中的任意值
!=all或<>all:不等于子查询中的所有值
=any:等于子查询中任意值
=all:等于子查询中所有值(无意义)
多行多列
查询出的结果直接放在from后面做一张表
关于子查询注意事项
1.子查询必须使用小括号()括起来
2.子查询可以出现在查询的任意位置
3.子句中不能出现order by
2.子查询可以出现在查询的任意位置
3.子句中不能出现order by
子查询按照性质分类
1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
2>相关子查询的执行依赖于外部查询的数据,外部查询执行一次,子查询就执行一次。
2>相关子查询的执行依赖于外部查询的数据,外部查询执行一次,子查询就执行一次。
连接查询
内连接
交叉连接
交叉连接(返回到结果集合中的数据行数等于第一个表中符合条件的数据行数乘以第二个表中符合条件的数据行数)
表 a cross join 表 a where条件;--使用where消除笛卡尔积
笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
相等连接/等值连接
等值连接:关联条件的运算符是用等号来链接的
表1 inner join 表2 on 链接条件;-- inner可以省略
表1 join 表2 using(相同的条件)
自然连接
自然连接:在两张表中寻找数据类型和列名都相同的字段,然后自动将他们连接起来,并返回所有符合条件的结果。(等值内连接最多是从表的数量)
只能查找一组字段相同的数据,其他字段都不能相同,大小写都不行
select * from 表1,表2 where 连接条件
隐式连接
select * from 表1,表2 where 连接条件;
外链接
分类
左外链接(left outer join)
右外链接(right outer join)
全链接(full outer join)
右外链接(right outer join)
全链接(full outer join)
左外链接
返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
右外链接
恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
全链接
返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值
笛卡尔积
开发中尽量避免出现笛卡尔积
内连接只能把有关联的数据查出来
外链接可以把没有关联的数据也拿到
外链接可以把没有关联的数据也拿到
函数
一般函数
数学函数
select ceil(double) from biao;--向上取整
select floor(double) from biao;--向下取整
select mod(number,money) from biao;--取余(数)
select abs(num) from biao;--取绝对值
select floor(double) from biao;--向下取整
select mod(number,money) from biao;--取余(数)
select abs(num) from biao;--取绝对值
逻辑函数(标量函数)
select money*ifnull(num,0) from 表名;--是空判断
select substring(ename from 1 for 3)from emp;--字符串截取
select upper(ename) from emp;--字母大写
select lower(ename) from emp;--字母小写
select trim(name) from emp;--去除两边空格
select position('爽' in name) from emp;--查询位置,没有则返回0.有则返回位置
select character_length(naem) from emp;--字符长度
select substring(ename from 1 for 3)from emp;--字符串截取
select upper(ename) from emp;--字母大写
select lower(ename) from emp;--字母小写
select trim(name) from emp;--去除两边空格
select position('爽' in name) from emp;--查询位置,没有则返回0.有则返回位置
select character_length(naem) from emp;--字符长度
时间函数
select now();--获取当前时间
聚合函数(分组函数)
聚合函数注意事项
1、不能出现在where子句中
2、不能再select子句中跟非聚合函数混合使用
3、可以在select子句中使用多个聚合函数
4、不可以在聚合函数里嵌套聚合函数
5、可以在子查询中使用聚合函数
2、不能再select子句中跟非聚合函数混合使用
3、可以在select子句中使用多个聚合函数
4、不可以在聚合函数里嵌套聚合函数
5、可以在子查询中使用聚合函数
select count(*) from emp;--查询表中某列有多少数据(不包含null)
select max (secore) from student;--最大值
select min(secore) from student;--最小值
select avg(score) from student;--平均值
select sum(number) from student;--总和
select max (secore) from student;--最大值
select min(secore) from student;--最小值
select avg(score) from student;--平均值
select sum(number) from student;--总和
分组操作(group by)
使用group by可以 对查询信息进行分组,分组后再使用聚合函数,他就是用于统计每一组的数据
使用group by 进行分组后,可以在使用having进行条件过滤。
having 和 where的区别?
1、where 是用于分组前进行过滤,having是用于分组后进行过滤
2、where 后面不可以使用聚合函数,having后面可以使用
1、where 是用于分组前进行过滤,having是用于分组后进行过滤
2、where 后面不可以使用聚合函数,having后面可以使用
修改数据
update 表名 set 记录 where 条件
删除数据
删除行
delete from <数据表名> where 条件
删除列
alter table <表名> drop column<列名>
删除表
drop table<数据表名>;
truncate table<表名>;-- 删除表并重新创建一个新的
truncate table<表名>;-- 删除表并重新创建一个新的
删除数据库
drop database<数据库名>;
delete,truncate的区别:delete是dml语句 truncate是dml语句 truncate dcl语句;delete是受事物控制,可以回滚数据;truncate是不受事物控制,不能回滚
事物
什么是事物:作为单个逻辑工作单元执行的一系列操作,要么全都执行,要么全部不执行
事物的特性
原子性
事物必须是原子工作单元;对其数据修改要么全都执行,要么全都不执行
一致性
事物在完成时,必须使用所有的数据都保持一致的状态
隔离性
由并发事物所做的修改必须与任何其它并发事物所做的修改隔离
持久性
事物完成之后,他对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持
事物的使用
1,setAutoCommit(false);//将事物改为手动控制,false为手动,true为自动
2,,当出现错误时,手动抛出异常
3,通过异常控制事物,出现异常时在catch中调用con.rollback();//回滚
4,在finally中调用con.commit();//提交事务,commit命令用于把事物所做的修改保存到数据库,无论发生异常还是没发生异常都将执行commit
JDBC(数据库连接系统)
jdbc
JDBC(java Date Base Connectivitty.java数据库连接)是一种用于执行sql语句的Java API,可以为多种关系数据库提供
统一访问,它由一组用java语言编写的类和接口组成。
统一访问,它由一组用java语言编写的类和接口组成。
运行步骤
①:通过Class.forName9()将驱动程序类加载到虚拟机的 内存中。
②:使用DriverManager类的getConnection()方法获得数据库连接。(需要给出连接数据库的URL和用户名、密码)
③:用数据库连接对象获得Statement对象,它可以用来执行SQL语句
④:用Statement对象负责发送SQL和接受结果。数据库执行SQL语句。
⑤:处理执行结果,执行语句后
②:使用DriverManager类的getConnection()方法获得数据库连接。(需要给出连接数据库的URL和用户名、密码)
③:用数据库连接对象获得Statement对象,它可以用来执行SQL语句
④:用Statement对象负责发送SQL和接受结果。数据库执行SQL语句。
⑤:处理执行结果,执行语句后
无法查询中文的解决方法
jdbc:mysql://localhost:3306/student?user=root&password=root&useUnicode=true&characterEncoding=utf-8
localhost
在计算机网络中,localhost(意为“本地主机”,指“这台计算机”)是给回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1(IPv4)
Java分包思想
在进行Java项目设计与开发的过程中,为了方便项目的组织与管理、避免命名的冲突,分包是非常有必要的。
命名规则
项目所属组织名(公司或单位的网址域名)的逆序形式+项目名+模块名
包中三层框架
数据层、逻辑层、表示层
@Test注解
用于测试方法,可以不用main方法测试
注解下必须有方法,否则报错
注解下必须有方法,否则报错
获取配置文件信息
preparedStatement和Statement的区别
PreparedStatement
ResoutceBundle.getBundle("jdbc").getString("dirver");
面试题
sql注入
占位符
占位符有很多种,使用占位符,可以将字符串直接加载,且可以使用setString(),setInt()等方法将占位符赋值
ORM(Object Relationship Mapping)
ORM基本思想
表结构跟类对应,表中字段和类的属性对应;表中记录和对象对应
让javabean的属性名和类型尽量和数据库保持一致
一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)
子主题
context.xml配置数据库
<Resource
name="jdbc/day"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/liwang"
maxActive="8"
maxIdle="4"
maxWait="10000"
/>
name="jdbc/day"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/liwang"
maxActive="8"
maxIdle="4"
maxWait="10000"
/>
视图
什么是视图
视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。
视图的特点
视图中的数据并不属于视图本身,而是属于基本的表,对视图可以像表一样进行insert,update,delete操作。
视图不能被修改,表修改或者删除后应该删除视图再重建。
视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。
视图可以被嵌套,一个视图中可以嵌套另一个视图。
视图不能索引,不能有相关联的触发器和默认值,sql server不能在视图后使用order by排序。
视图不能被修改,表修改或者删除后应该删除视图再重建。
视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。
视图可以被嵌套,一个视图中可以嵌套另一个视图。
视图不能索引,不能有相关联的触发器和默认值,sql server不能在视图后使用order by排序。
视图的优/缺点
优点
简化查询:视图可以基于多个不同的表来建立,他将多个表中抽取的数据放在一起,像一个单表一样操作。
简化结构:无论数据在数据表中的物理布局如何,视图都可以使数据按照不同用户的要求任意的将其选择组合为虚表来呈现给用户
安全性:通过视图来访问数据库中的数据。可以限制用户对数据库内容的访问范围,让用户只能访问视图的创建者想让他们看到的具体数据。
数据完整性:在用户通过视同访问或者更新数据时,数据库管理系统DBMS的相关部分会自动地检查数据,确保预先设定的完整性约束。
简化结构:无论数据在数据表中的物理布局如何,视图都可以使数据按照不同用户的要求任意的将其选择组合为虚表来呈现给用户
安全性:通过视图来访问数据库中的数据。可以限制用户对数据库内容的访问范围,让用户只能访问视图的创建者想让他们看到的具体数据。
数据完整性:在用户通过视同访问或者更新数据时,数据库管理系统DBMS的相关部分会自动地检查数据,确保预先设定的完整性约束。
缺点
性能不高:虽然对用户来说,利用视图访问数据的方法和表相同,但是,数据库管理系统DBMS处理用户对视图的查询时,必须要先将其转换为对底层源表的查询。
数据更新受限
数据更新受限
视图的SQL
0 条评论
下一页