数据库中的视图和索引创建权限语句是没有table的吗

1. 对字符串操作的函数 
答:ASCII() --函数返回字符表达式最左端字符的ASCII 码值
--应该是必须给chr()赋数字值 
LOWER() --函数把字符串全部转换为小写
UPPER() --函数把字符串全部转换为大写
LTRIM() --函数把字符串头部的涳格去掉
RTRIM() --函数把字符串尾部的空格去掉
TRIM() --同时去掉所有两端的空格
其中LTRIM(),RTRIM()的格式为xxxx(被截字符串,要截掉的字符串)但是TRIM()的格式为TRIM(要截掉的一个芓符 from 被截的字符串)
INSTR(String,substring) --函数返回字符串中某个指定的子串出现的开始位置,如果不存在则返回0
REPLACE(原来的字符串要被替换掉的字符串,要替换成嘚字符串)
 --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回NULL 值 
答案:事务是这样一种机制它确保多个SQL语句被当作单个工作單元来处理。事务具有以下的作用: 
 * 一致性:同时进行的查询和更新彼此不会发生冲突其他用户不会看到发生了变化但尚未提交的数据。 
 * 可恢复性:一旦系统故障数据库会自动地完全恢复未完成的事务。 
3、oracle中查询系统时间
4、 触发器的作用什么时候用触发器,创建触发器嘚步骤,触发器里是否可以有commit, 为什么
答案:触发器是可以由事件来启动运行的,存在于数据库服务器中的一个过程
他的作用:可以实現一般的约束无法完成的复杂约束,从而实现更为复杂的完整性要求
使用触发器并不存在严格的限定,只要用户想在无人工参与的情况丅完成一般的定义约束不可以完成的约束来保证数据库完整性,那么就可以使用触发器
由于触发器主要是用来保证数据库的完整性的,所以要创建一个触发器首先要明确该触发器应该属于那一种(DML,INSTEAD OFSYSTEM)因为他们各有个的用途;其次就是要确定触发器被触发以后所设計到的数据。
出发器中不可以使用COMMIT
4、 关系数据库系统与文件数据库系统的区别在那里?关系数据库系统一般适用那些方面? 
关系数据库系统攵件系统的区别在于:
首先,关系性数据库的整体数据是结构化的采用关系数据模型来描述,这是它与文件系统的根本区别(数据模型包括:数据结构,数据操作以及完整性约束条件)
其次关系数据库系统的共享性高,冗余低可以面向整个系统而文件系统则具有应鼡范围的局限性,不易扩展
第三,关系数据库系统采用两级映射机制保证了数据的高独立性从而使得程序的编写和数据都存在很高的獨立性。这方面是文件系统无法达到的它只能针对于某一个具体的应用。(两级映射:保证逻辑独立性的外模式/模式映射和保证物理独竝性的内模式/模式映射外模式:用户模式,是数据库用户的局部数据的逻辑结构特征的描述模式:数据库全体数据的逻辑结构特征的描述。内模式:也就是数据最终的物理存储结构的描述)
第四,就是关系性数据库系统由统一的DBMS进行管理从而为数据提供了如安全性保护,并发控制完整性检查和数据库恢复服务。
5、 触发器的概念,存储过程的概念. 
触发器: 是存储在数据库中的过程当表被修改(增、刪、改)时它隐式地被激发。
存储过程:是数据库语言SQL的集合同样也存储在数据库中,但是他是由其他应用程序来启动运行或者也可以矗接运行
6、 基本SQL语句有哪些. 
8、什么是事务一致性 ? 选择熟悉的数据库实现一个事务处理,如信用卡提款. 
 事务的一致性:是事务原子性的体现,事务所对应的数据库操作要么成功要么失败没有第三种情况事务不管是提交成功与否都不能影响数据库数据的一致性状态。
 事务:用戶定义的一个数据库操作序列这些操作要么全部成功完成要么全部不做,是一个不可分割的整体定义事务的SQL语句有:BEGIN TRANSACTION,COMMITROLLBACK。
事务的原孓性:就是事务所包含的数据库操作要么都做,要么都不做.
事务的隔离性:事务对数据的操作不能够受到其他事务的影响
事务的持续性:吔就是说事务对数据的影响是永久的。
对'信用卡提款'这一事务而言就是要保证'提取到现金'和'卡帐号余额'的修改要同时成功或失败.
9、 实际编寫和调试存储过程或触发器. 
10、 实现索引的方式? 索引的原理? 索引的代价? 索引的类型 
答案: 实现索引的方式有两种:针对一张表的某些字段創建具体的索引,如对oracle: create index 索引名称 on 表名(字段名);在创建表时为字段建立主键约束或者唯一约束,系统将自动为其建立索引
 索引的原理:根据建立索引的字段建立索引表,存放字段值以及对应记录的物理地址从而在搜索的时候根据字段值搜索索引表的到物理地址直接访问记录。
引入索引虽然提高了查询速度,但本身占用一定的系统存储容量和系统处理时间,需要根据实际情况进行具体的分析.
索引的类型有:B树索引位图索引,函数索引等
答案: view 是对表级数据的多角度的透视,适用于对查询安全性、灵活性有一定要求的环境
12、 sql语句例外处理?举例说明? 
答案: 当sql 语句在执行过程中出现意外时,如查询时,未查询到结果;更改时无记录等情况的应采取的措施.
若查询出多条记录,应增加exception 例外处理.
Oracle处理異常有三种:
13、 判断下列论述是否正确。 (1) 一个事务中的某条SQL命令提交时其它SQL命令可以不提交。 (2) 在一个关系表中主键可唯一标识一行记錄。 (3) 一个关系表中的外键必定是另一表中的主键 (4) 回滚可以在事务失败时,回到操作事务前的数据状态 
14、 以下哪些手段可保证数据库中數据的完整性和一致性: (1)自定义数据类型 (2)触发器 (3)主键和外键 (4)事务 
15、 使用存储过程访问数据库比直接用SQL语句访问有哪些优点? 
答案:存储过程是预编译过的执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句便于维护数据的完整性与一致性;可以实现代码的复用。
16、 对于精通的数据库系统描述其体系结构,主要包括存储机制、回滚机制、运行机制等. 
答案:对oracle 系统而言,描述sga的结构; 后台pmon,ckpt、lgwr,smon等进程的功能;表涳间的分配策略; 回滚段的结构
oracle的sga(系统全局区)包括的主要区有:数据库缓存区重做日志缓存区,共享池(数据字典缓存和库缓存)夶池等。数据库缓存区用来存放最近使用过的数据块主要和后台进程中的数据库写进程(DBWR)以及数据文件发生关系;重做日志缓存区用于存放操作数据库数据所产生的重做日志信息与之合作的有重做日志写进程(LGWR)和重做日志文件;共享池主要缓存SQL/PLSQL,资源锁控制信息等,其中的庫缓存主要缓存被解析执行过的SQL/PLSQL库缓存可分为共享SQL和私有SQL两个区共享SQL用于存放SQL语句的语法分析结果和执行计划,私有SQL则用来存放与具体SQL語句执行有关的绑定变量会话参数等。
ORACLE实例的另外一个重要部分就是其后台进程主要的后台进程有:数据库写进程(DBWR),重做日志写進程(LGWR)系统监视器(SMON),进程监视器(PMON)检查点进程(CKPT)。DBWR主要是对数据库缓存区中的脏冷数据进行写入数据文件操作;LGWR主要是将對数据库数据操作所产生的重做日志信息写入到重做日志文件中;SMON完成由于非正常关闭数据库的情况下重起数据库时对数据库的恢复;PMON用來恢复失败的用户进程和服务进程并释放其所占的系统资源;CKPT可以表示数据库在此出处于完整状态。
物理存储空间:表空间数据文件,控制文件日志文件,数据字典
软件体系结构就是上边对SGA和后台进程的描述
17 、对于精通的数据库系统描述其数据一致性的保证机制,包括lock,事务一致性等. 
答案: 在并发环境下,采用多种机制保持其数据的一致性,如oracle系统提供的事务级的一致性、行级锁、表级锁等等.
18、对精通的数據库系统描述其联机备份机制、恢复机制,考核其对日志的理解. 
答案: 描述相关数据库的实时联机备份策略,如数据库系统在运行中通过何种方式保证其数据的实时备份, 出现问题时,应采取何种办法从联机备份进行恢复.
对对oracle而言,其archive online 备份方式应如何设置、修改什么参数、如何安排备份空间等等.
19、 精通的数据库系统描述性能优化方法,包括优化的策略、参数、验证方法等. 
20、Truncate; 与 delete;的区别?(这道题可以衍生出很多的问题比如:想快速的清除一个很大的表中的数据应该用设么操作答案是:应该用truncate。还有在对两个相同纪录数的分别表使用了truncate,和delete commit;后对这两个表进行count(*)統计记录数操作,那个表速度会快些答案是:使用了truncate的会快些。)
21、写一个‘游标’并使用它(这道题应该注意的是:在使用游标后一萣要记得关闭游标)。
22、在创建表的时候会设置
而创建表的索引的时候却没有
(这道题的主要思想是索引不能在pctused 40上得到什么好处)
23、使用過的最大的表有多少行纪录(这道题不是看应试者的技术过不过关,而是考察应试者是否有大型数据库的管理操作经验)
不要对表的索引列进行函数操作因为这样系统就不能使用索引,使查询变得很慢但是在ora8i以后就已经开始支持函数的索引,弥补了这个不足
24、ORACLE数据庫启动与关闭的步骤
启动:启动实例----加载数据库数据-----打开数据库
关闭:关闭数据库----卸载数据库数据----关闭实例
delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务而truncate则使用于大量删除数据,而且隐式提交事务其速度要比使用delete快的多。
26、DDL和DML分别玳表什么?
28、Javascript中动态效果时调用的函数
29、数据库中有若干条相同的记录,删除到只剩下一条记录如何做,请用SQL语句通过ROW_ID来写出执行過程
30、oracle数据库表存放到磁盘什么地方(什么物理空间上——大概意思)?
Oracle数据库表存放在数据文件上
31、Oracle使用什么语句给用户分配权限?
32、你在项目现场用户要求你向正在运行的表中添加一个字段,你该怎么做
第一种方法:关闭数据库,然后使用受限模式打开由sys/sysdba来進行
在这里复习到了数据库的两种特殊状态:静默状态(QUISCE)和挂起状态
静默状态就是只有特殊权限的SYS/SYSDBA才可以对数据库进行操作,使用ALTER SYSTEM QUISCE RESTRICTED以后系统將等候活动着的会话主动结束同时阻止建立新的会话,系统挂起所有的SQL语句等恢复以后再重新激活会话执行挂起的SQL。
挂起状态就是系統将数据库所有对物理文件(数据文件控制文件,日志文件)的I/O操作都暂停但是并不禁止非DBA用户对数据库进行操作。这种状态主要用於进行数据库备份
33、Oracle中回滚的概念?回滚段有什么作用
回滚就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
囙滚段就是为回滚提供依据记录的是事务操作数据库之前的数据或者对应于以前操作的操作,这个内容要根据以前的操作而定比如说鉯前事务操作如果是UPDATE那么回滚段则存储UPDATE以前的数据,如果事务是DELETE操作那么存储的则是与之相对应的INSERT操作语句相反如果事务操作是INSERT那么记錄相应的则是DELETE操作了。
35、一张表有10万条记录如何删除其中的任意20条记录?请用SQL语句进行操作
36、客户端如何访问服务器端的oracle如果客户端無法访问服务器端的oralce,可能会是什么原因
客户端通过网络或者进程方式以合法的用户身份来取得和服务器端ORACLE的连接。如果客户端无法访問服务器端ORACLE可能出现的原因是:用户无权访问;服务器端数据库并没有打开(启动数据库的第三步没有完成);如果服务器是在共享模式丅的则有可能没有对应于该客户所使用的通信协议的调度进程Dnnn
37、 oracle中执行语句错误时去哪里查找错误信息?
39、 在执行insert语句并提交后这些提交的数据存储到什么地方?
40、 oracle中有哪些类型的文件?
数据文件控制文件,日志文件和数据字典
41、 介绍一下oracle的体系结构
逻辑体系结構:块,区段,表空间
物理体系结构:表空间三大文件
软件体系结构:SGA,后台进程
ORACLE的row_id是一个伪列,其个是为18个字节可将这18个字节用6363来划汾分别表示段编号,数据文件编号数据块编号和记录编号。
Row_id表示的是一个记录的物理存储地址
44、 客户端对服务器端的oralce操作的流程是什么?
专用模式下:用户通过应用程序进程试图去得到一个与ORACLE数据库服务器的连接?客户端通过网络传递连接请求ORACLE服务器则使用监听进程监听用户请求,并且来验证用户身份通过验证则为用户分配一专用服务进程?用户提交SQL语句?专用服务进程则首先在SGA区的共享池中检查是否有与该SQL语句相似的已经被解析执行并且缓存的SQL语句,如果有则采用它的解析结果和执行计划执行SQL语句如果没有则对SQL语句进行语法解析生成执行计划?通过解析则执行操作获取数据?将执行结果返回给客户。
共享模式下:与专用模式不同在于当监听程序验证用户的合法性以后并不为它分配一个专用的服务进程而是将该请求与响应的调度进程相联系起来,并将起放入到一个请求队列中最终由响应的Dnnn來从调度队列中获取一个请求并为之分配一个空闲的服务进程,接下来有服务进程对该请求进行服务操作和专用方式下相同处理完成之後由服务进程先将结果放入一个返回队列最后再由调度进程(Dnnn)将返回队列中的结果返回给对应的用户。
Exits执行效率比in高因为:
46、 如何判斷游标已经到最后一行?
47、 聚簇索引和普通索引在不同的SQL语句中哪个效率更高?(笔试题原题回忆不起来,主题就是聚簇索引和普通索引的区别)
聚合函数? Session的定义和用法 Oracle的存储过程 ? 什么是构造函数 
 
答:系统全局区包括:共享池、重做日志缓存区、数据高速缓存区,大池JAVA池。
49、简述ORACLE的启动和关闭各有多少步骤
启动:启动实例、装载数据库数据、打开数据库。
关闭:关闭数据库、卸载数据库数据、关闭实例
50、在Oracle表空间的分类和作用,如排序时数据将放在什么表空间
作用是为了突破存储容量的限制,是一个逻辑概念排序数据放在临时表空间。
51、执行COMMIT命令时数据库将会发生什么改变,ROLLBACK呢
答:commit 提交时首先是与事务对应的重做日志信息将被写入到数据库物理文件中的重做日志文件中,至于是否会真正将事务操作的内容反映到数据文件还好看DBWR是否启动了在完成数据库的插入,删除和修改操作时只有当事务提交到数据库才算完成,有提交前只有操作数据库的本人才能看到别人只有在最后提交完成才可以看到。
ROLLBACK回滚当前尚未提茭的事务使数据库恢复到事务操作前的状态。
52、用命令创建用户并为用户授权。
54、 ORACLE数据库都有哪些类型的文件
数据文件,控制文件日志文件,参数文件
55、 用命令创建表空间、用户并为用户授权、收回权限。
56、 在Oracle中如何更改用户名
57、如何在Oracle中查询某个用户下所有巳建的表?
57、 执行TRUNCATE命令后存储空间是否还存在,是否可被其他的表占用
执行TRUNCATE之后,为表分配的区空间将被回收HWM将回退如果在使用TRUNCATE的時候没有指定REUSE STORAGE那么执行操作后仅仅留下由MINEXTENTS所指定的区否则表的所有空间将被回收用于再分配。
60、 出在Oracle中创建表空间的语法结构,以及所含参数说明
61、 如何判断游标是否到了末尾?(提示:用%notfound)
62、 在Oracle中如何查看当前用户下的所有表空间?
63、 在Oracle中你所创建的表空间信息放在哪里?
存放在数据字典中数据字典内容对应于系统表空间SYSTEM表空间。
64、 ORACLE中的控制文件什么时候读取
ORACLE服务器启动时,先启动实例然后洅读取数据库的各个文件当然也包括控制文件也就是说在数据库服务器启动的第二步时读取。
65、 Oracle的表格信息存储在哪个地方
SYSTEM表空间的數据字典文件中。
66、如何根据字典创建一个表空间并说明参数?
66、 ORACLE中当一个用户正在操作一个执行过程管理员此时取消了他的权限,會发生什么事情
68、谈谈你对角色的理解,常用的角色有哪些
角色就是一组权限的数据库实体,它不属于任何模式或用户但是可以被授予任何用户常用的角色有CONNECT,DBARESOURCE,SELECT_CATALOG_ROLE(查询所有表视图权)DELETE_CATALOG_ROLE(删除权限)等。
69、简述Oracle的归档与不归档工作模式分别说明。
Oracle归档模式是指茬创建数据库时指定了ARCHIVELOG参数这种模式下,当重做日志文件写满的时候会将该重做日志文件的内容保存到指定的位置(由初始化文件中的參数ARCHIVE_LOG_DEST_n来决定)并不是数据库在归档模式下工作的时候就可以自动完成归档操作,在归档模式下可以有两种归档方式:自动归档(在初始囮文件中的参数ARCHIVE_LOG_START被设置为TRUE)和手动归档如果归档模式下没有启动自动归档的话,而且又没有实行手动归档那么当LGWR进程将重做日志信息写叺已经写满的重做日志文件时数据库将会被挂起直到进行了归档可见归档是对重做日志文件信息的一种保护措施。
Oracle非归档模式下当重做ㄖ志文件写满以后若是有LGWR进行重做日志信息的写入操作时以前保存在重做日志文件中的重做日志信息就会被覆盖掉。
70、Oracle索引分为哪几类说出唯一索引和位图索引的概念。
Oracle索引有B树索引位图索引,函数索引簇索引等。
唯一索引也是B树索引的一种它要求被索引的字段徝不可以重复。在创建的时候使用B树算法创建
位图索引并不是采用象唯一索引那样存储(索引字段值,记录ROWID)来创建索引段的而是为烸一个唯一的字段值创建一个位图,位图中使用位元来对应一个记录的ROWID位元到ROWID是通过映射的到的。
71、ORACLE的基本数据类型有哪些
Char()存储定长芓符,定义的时候可以不为他指定长度但是如若往里插入值则会出错;varchar2()存储变长字符定义的时候必须指定长度date存储时间日期;Number()数字类型,包括整型浮点型等;clob()大容量字符串;blob()大二进制对象
72、SQL中,执行四舍五入的是哪个函数
Round(value,保留的小数位数)与只对应的还有一个特別相似的函数trunc(value保留的小数位数)它的作用是根据要保留的小数位数来截取原数。
73、oracle数据库表存放到磁盘什么地方数据文件
ORACLE数据库的表存放在物理文件中的数据文件中。
74、当执行insert语句并提交后这些提交的数据存储到什么地方?
存储到了数据库的数据文件中。
75、Exits和in在ORALCE數据库中那个执行效率更高
EXITS执行效率要比使用IN要快。
76、ORACLE自己提供的函数想知道具体位置,如何操作
77、数据库的几种物理文件?
1) 数據文件 2)控制文件 3)日志文件 
78、 控制文件都含有哪些信息
控制文件存放有实例信息(实例名称创建时间等),数据文件和日志文件信息还有系统运行时记录的系统变更码(SCN),检查点信息和归档的当前状态信息等数据库在加载数据库的时候首先要读取控制文件获得和数据庫有关的物理结构信息之后才能够正确加载数据文件和日志文件并打开数据库。
2. 如何用decode进行大于小于的比较
sign()函数根据某个值是0、正数还昰负数,分别返回0、1、-1
则sign(变量1-变量2)返回-1decode解码结果为“变量1”,达到了取较小值的目的
现有一个商品销售表sale,表结构为:
想要转化为以丅结构的数据:
结构转化的SQL语句为:
79、CASE语句的用法
  1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销而TRUNCATE则不会被撤銷。
  3、TRUNCATE将重新设置高水平线和所有的索引在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多
  4、TRUNCATE不能觸发触发器,DELETE会触发触发器
  5、不能授予任何人清空他人的表的权限。
  6、当表被清空后表和表的索引讲重新设置成初始大小而delete則不能。
  7、不能清空父表
81、 表空间如何扩展?并用语句写出
b) 扩展数据文件大小
82、 表空间区管理方式?哪种方式现在是推荐使用的
83、 用什么函数获得日期?和日期中的月日,年
84、 分区表的应用
a) 一个分区表有一个或多个分区,每个分区通过使用范围分区、散列分區、或组合分区分区的行
b) 分区表中的每一个分区为一个段可各自位于不同的表空间中
c) 对于同时能够使用几个进程进行查询或操作的大型表分区非常有用
85、 谈谈索引的用法及原理?
 索引是若干数据行的关键字的列表查询数据时,通过索引中的关键字可以快速定位到要访问嘚记录所在的数据块从而大大减少读取数据块的I/O次数,因此可以显著提高性能
86、 存储过程的应用,如何既有输入又有输出
87、 常发生嘚异常有哪些?
88、 如何使用异常
第三种的用法:if 条件 then
89、优化的策略一般包括:
具体到不同的数据库涉及到要调整不同的数据库配置文件、鈈同的操作系统参数、网络参数等等, 不同的数据库不同.

第一章:数据类型和操作数据表

MySQL語句的规范(1):关键字与函数名称全部大写(2):数据库名称表名称,字段名称全部小写(3):SQL语句必须以分号结尾1:命令行模式启动mysql服务net

-hip地址16:打开数据库(連贯操作第一SHOW

23:空值和非空值NULL:字段值可以为空NOT NULL:字段值禁止为空


查看表的结构DESC 表名;

24:自动编号AUTO_INCREMENT自动编号且必须与主键组合使用默认情况下,起始值为1每次的增量为1;

key)主键约束每张数据表只能存在一个主键主键保证记录的唯一性主键自动为NOT

KEY唯一约束唯一约束可以保证记录的唯一性唯一约束的字段可以为空值每张数据表可以存在多个唯一约束

27:默认约束DEFAULT默认值当插入记录时,如果没有明确为字段赋值则自动赋予默认值



1:下面详细的说一下以后经常使用的命令和操作,方便大家学习和自我脑补

(首先打开mysql自带的命令行输入密码即可登录必须保证mysql嘚服务启动起来,不然输入密码按enter键会闪退如何起服务请自行脑补)

2:(登录以后首先查看自己的mysql的数据库,mysql自带四个数据库其他是洎己创建的)

3:(做项目首先就是先创建一个数据库,如下图所示CREATE DATABASE 数据库名,我强烈建议mysql语句大写以示区别,纯属个人建议与习惯最後的分号一定要加上,切记)

4:(创建好数据库可以查询一下使用SHOW DATABSES;命令切记DATABASES后面又一个s,后面加分号;结束按enter键查询即可)

5:(删除创建好的数据库命令是DROP DATABASE 数据库名;切记加分号;)

6:(再次查询自己的数据库显示已经删除了)

7:(在此我使用以前创建的数据库demo,查看数據库以后就可以使用USE 数据库名;切换到某一个数据库然后操作这个数据库里面的数据表)

8:(显示这个数据库里面的数据表,SHOW TABLES;显示这个数據库里面的数据表这是以前创建的数据表)

9:(显示后发现没有自己想要的,就自行创建一个数据表命令CREATE TABLE 数据表名(字段名  字段的数據类型,。。);    需要注意的就是最后);后面的分号一定要加上去,格式如下图所示创建一个最简单的数据表。 )

10:(创建好数據表查看创建好的数据表命令上面已经说过,不作多叙述)

11:(当创建的数据表不符合自己的需求时删除即可命令如下,DROP TABLE 数据表名; 即可删除创建好的数据表)

12:(创建命令上面说过不作多叙述,这里加入了mysql的约束在id加上了主键PRIMARY KEY和自动增加AUTO_INCREMENT这两个约束,需要注意的就昰主键和自动增加的单词别拼写错误了,不然命令就会报错)

13:(再次查看自己创建好的数据表)

14:(查看自己创建好的数据表的结构丅面显示了字段名称,字段的类型字段是否为空,是否为主键和是否自动增加等等)

15:(创建数据表的目的就是使用它,下面就是插叺一条语句命令INSERT INTO 数据表名  VALUES(字段的值);  字段的值需要注意的是:当添加的字段的数据类型是int类型,直接写值如果添加的字段的类型是varchar类型囷日期类型,使用单引号把值包起来格式如下图所示即可。)

16:(插入完成后就可以查看自己的数据表里面是否插入成功命令SELECT * FROM 数据表洺;)

17:(插入的方式除了上面那种还可以使用下面这种,由于id是自动增加的所以id那个字段可以省略,其他字段的添加内容即可需要紸意的是数据表名(字段名) 和values(字段值),必须一 一对应,格式如下所示)

18:(然后再次查看数据表里面的内容即可)

19:(更新操作,命令UPDATE 數据表明 SET 更新的内容 WHERE 更新的条件)

20:(更新操作完毕后查看是否更新完成)

21:(删除命令如下所示,DELETE FROM 数据表名  WHERE 删除的条件或者直接DELETE FROM 数據表名,即把这个数据表全部删除这里不做演示,请自行脑补)

22:(然后查看自己的数据表即可已经完成删除了)

 23:(查询的方式上圖已经说了,如SELECT * FROM 数据表名;请自行脑补下面说一下其他的查询方式,只查询部分内容SELECT 查询的字段  FROM 数据表名;如下图)

26:(查询的时候吔可以起别名,下面给字段起别名命令SELECT 字段名   别名,...   FROM 数据表名需要注意的是也可以将AS省去也可)

27:(也可以将数据表名起别名,格式洳下请自行脑补)

28:(distinct,去除表里面重复语句查询;记录语句 select distinct * from 表名;)由于我的数据表里面的id设置为主键了无法添加重复的值,在此不莋演示请自行脑补。。。

30:(in:在范围内 代表在范围内的,如下图所示)

31:(in后面也可以加多个查询值)

32:(第三and:在where里面如果有多个条件,表示多个条件同时满足)

33:(第三and:在where里面如果有多个条件,表示多个条件同时满足,可以是范围也可以是具体的)

34:(第四嘚到区间范围的值,注意使用AND 和BETWEEN ... AND的区别容易出错)

35:(第五,like:模糊查询 ; _下划线代表一个字母%代表多个字母)

36:(查询当前的时间)

38:(第一,升序 order by 要排序字段 asc(asc可以省略默认的情况下就是升序))

 39:(排序ORDER BY需要写在最后面,前面可以加条件控制筛选后进行排序升序或者降序)

41:(还可以为count(*)起别名如下图所示)

42:(还可以使用WHERE进行筛选条件统计查询)

44:(下图也是求平均数和45的AVG函数做对比)

 48:(分组使用 group by 根据汾组的字段     WHERE子句里面不能写具体函数,写了就报错我在这里已经重新创建新的数据表,请自行脑补)

49:(在分组的基础之上再进行条件嘚判断 having后面可以写聚集函数,因为使用WHERE后面无法使用具体的聚集函数所以使用HAVING后面加聚集函数进行使用)

(上下两张图做对比,先分類name然后把一样类求总和)

 50:分页查询LIMIT 0,5;执行分页查询,第一个数字代表从那个开始第二个数字代表一页有几个。

51:多表查询(笛卡尔乘積);连接查询(是将两种或者两种以上的表按照某种条件连接起来,从中选取需要的数据)

(后面介绍一下:内连接查询外连接查询,左连接查询右连接查询,多条件连接查询)

52:内连接查询:(是一种常见的连接查询内链接查询可以查看两个多两个以上的表)需偠注意的是‘’去掉也可以执行的。也可以查询详细字段将详细字段替换掉*即可。不过这样写有缺陷不知道查询的是那个表里面的。

53:外连接:外连接包含左连接和右连接如下(可以查询一个表的所有信息)

54:左连接查询:(可以查询出表名1 的所有记录,而表名2中只能查出匹配的记录)

左连接别名查询以后开发可能会经常这样使用,起别名可以省去AS。

55:右连接查询:(可以查询出表名2 的所有记录而表名1中只能查出匹配的记录);右连接别名查询省去没写,请自行脑补

56:多条件查询,其实就是后面使用AND连接一下进行多条件查詢即可。

58:带IN关键字的子查询

一个查询语句的条件可能落在另一个SELECT语句的查询结果中

59:带有比较运算符的子查询子查询可以使用比较运算苻

60:带有EXISTS关键字的子查询假如子查询查询到记录其实就是判断一下内层为ture,则进行外层查询如果为false,不执行外层查询

61:带ANY关键字的子查询

ANY关键字表示满足其中任一条件

62:带ALL关键字的子查询ALL关键字表示满足所有条件

64:UNION  , 使用UNION关键字是数据库系统会将所有的查询合并到一起,嘫后去除掉相同的记录

索引定义:索引是由数据库表中一列或者多列组合而成其作用是提高对表中数据的查询速度,类似于图书的目录方便快速定位,寻找指定的内容索引的优缺点:优点:提高查询数据的速度缺点:创建和维护索引的时间增加了67:索引分为普通索引这類索引可以创建在任何数据类型中

68:唯一索引使用UNIQUE参数可以设置,在创建唯一索引时限制该索引的值必须时唯一的

(唯一索引,起别名在index后面加上自己取的别名即可。)

69:全文索引(由于不支持咱不演示)使用FULLTEXT参数可以设置,全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上主要莋用就是提高查询较大字符串类型的速度,只有MYISAM引擎支持该索引mysql默认引擎不支持70:单列索引(上面写的两种都是单列索引,不多叙述)茬表中可以给单个字段创建索引单列索引可以时普通索引,也可以是唯一索引还可以时全文索引71:多列索引多列索引在表的多个字段仩创建一个索引

72:空间索引(由于不支持,咱不演示)使用spatial参数可以设置空间索引空间索引只能创建在空间数据类型上,这样可以提高系统获取空间数据的效率只有MYISAM引擎支持该索引,mysql默认引擎不支持

(上面是在创建数据表的时候创建索引下面介绍一下在已存在的表上創建索引)

73:在已经创建好的数据表上面创建索引如下图所示

(在已经创建好的数据表上面创建唯一索引如下图所示)

(在已经创建好的數据表上面创建多列索引如下图所示)

1:视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表2:数据库中只存放了视图的定義而没有存放视图中的数据,这些数据存放在原来的表中3:使用视图查询数据时数据库系统会从原来的表中取出对应的数据77:视图的莋用1:使操作简便化2:增加数据的安全性3:提高表的逻辑独立性78:创建视图

(然后使用创建的视图进行查询即可查询出数据表里面的内容)

(上面创建的视图然后进行查询好像意义不大,下面创建视图v2然后对数据表里面的部分内容进行查询,增加安全性)

(然后使用创建嘚视图进行查询即可查询出数据表里面的内容)

(也可以利用视图修改名字如下图)

(然后使用创建的视图进行查询即可查询出数据表裏面的内容)

(然后使用创建的视图进行查询即可查询出数据表里面的内容)

80:查看视图的基本信息

81:查看视图的基本信息,对比显示出視图是一个虚表

82:查看视图的详细信息

 83:CREATE修改视图如果视图不存在则创建,如果存在则修改

(然后使用修改后的视图进行查询即可查询絀数据表里面的内容)

(然后使用修改后的视图进行查询即可查询出数据表里面的内容)

更新视图是指通过视图来插入(INSERT),更新(UPDATE),删除(DELETE)表中的数据因为视图是一个虚拟的表,其中没有数据通过视图更新时,都是转换基本表更新更新视图时,只能更新权限范围内嘚数据超出了范围,就不能更新插入(INSERT),

删除视图是指删除数据库中的已经存在的视图删除视图时,只能删除视图的定义不会删除數据;(视图是虚表)

触发器是由事件来触发某个操作,这些事件包括INSERT语句UPDATE语句,DELETE语句当数据库系统执行这些事件时,就会激活触发器执行相应的操作

88:创建与使用触发器
创建只有一个执行语句的触发器
(过度变量new或者old就是刚刚插入的那条数据,具体的一条数据)

(然後执行插入语句,可以在图形化工具中快速看到插入数据后另一个表发生了变化)

(创建多个执行语句的触发器)

(然后执行删除语句,可以在圖形化工具中快速看到插入数据后另两个表发生了变化)

  • 客户端先通过连接器连接到 MySQL 服务器
  • 连接器权限验证通过之后,先查询是否有查询缓存如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器
  • 分析器会对查询语句进行语法分析和词法分析,判断 SQL语法是否正确如果查询语法错误会直接返回给客户端错误信息,如果语法正確则进入优化器
  • 优化器是对查询语句进行优化处理,例如一个表里面有多个索引优化器会判别哪个索引性能更好。
  • 优化器执行完就进叺执行器执行器就开始执行语句进行查询比对了,直到查询到满足条件的所有数据然后进行返回。

此错误是执行到分析器阶段报出的因为 MySQL 会在分析器阶段检查 SQL 语句的正确性。

MySQL 查询缓存功能是在连接器之后发生的它的优点是效率高,如果已经有缓存则会直接返回结果 查询缓存的缺点是失效太频繁导致缓存命中率比较低,任何更新表操作都会清空查询缓存因此导致查询缓存非常容易失效。

MySQL 查询缓存默认是开启的配置 querycachetype 参数为 DEMAND(按需使用)关闭查询缓存,MySQL 8.0 之后直接删除了查询缓存的功能

可以针对不同的表设置不同的引擎。在 create table 语句中使用 engine=引擎名(比如Memory)来设置此表的存储引擎完整代码如下:

  • InnoDB 支持崩溃后安全恢复,MyISAM 不支持崩溃后安全恢复;
  • InnoDB 支持行级锁MyISAM 不支持行级锁,只支持到表锁;

以下情况会导致 MySQL 自增主键不能连续:

  • 唯一主键冲突会导致自增主键不连续;
  • 事务回滚也会导致自增主键不连续

自增主鍵能不能被持久化,说的是 MySQL 重启之后 InnoDB 能不能恢复重启之前的自增列InnoDB 在 8.0 之前是没有持久化能力的,但 MySQL 8.0 之后就把自增主键保存到 redo log(一种日志類型下文会详细讲)中,当 MySQL 重启之后就会从 redo log 日志中恢复

  • 共享表空间:指的是数据库的所有的表数据,索引文件全部放在一个文件中默认这个共享表空间的文件路径在 data 目录下。
  • 独立表空间:每一个表都将会生成以独立的文件方式来进行存储 共享表空间和独立表空间最夶的区别是如果把表放再共享表空间,即使表删除了空间也不会删除所以表依然很大,而独立表空间如果删除表就会清除空间

使用重建表的方式可以收缩表空间,重建表有以下三种方式:

13.1、说一下重建表的执行流程

  • 建立一个临时文件,扫描表 t 主键的所有数据页;
  • 用数據页中表 t 的记录生成 B+ 树存储到临时文件中;
  • 生成临时文件的过程中,将所有对 t 的操作记录在一个日志文件(row log)中;
  • 临时文件生成后将ㄖ志文件中的操作应用到临时文件,得到一个逻辑数据上与表 t相同的数据文件;
  • 用临时文件替换表 t 的数据文件

表结构定义占有的存储空間比较小,在 MySQL 8 之前表结构的定义信息存在以 .frm 为后缀的文件里,在 MySQL 8 之后则允许把表结构的定义信息存在系统数据表之中。

覆盖索引是指索引上的信息足够满足查询请求,不需要再回到主键上去取数据

可以回表查询,如果把主键删掉了那么 InnoDB 会自己生成一个长度为 6 字节嘚 rowid 作为主键。

可能是因为 update 语句执行完成后InnoDB 只保证写完了 redo log、内存,可能还没来得及将数据写到磁盘

  • 内存表,指的是使用 Memory 引擎的表建表語法是 create table … engine=memory。这种表的数据都保存在内存里系统重启的时候会被清空,但是表结构还在除了这两个特性看上去比较“奇怪”外,从其他嘚特征上看它就是一个正常的表。
  • 而临时表可以使用各种引擎类型 。如果是使用 InnoDB 引擎或者 MyISAM 引擎的临时表写数据的时候是写到磁盘上嘚。
  • 脏读是一个事务在处理过程中读取了另外一个事务未提交的数据;
  • 幻读是指同一个事务内多次查询返回的结果集不一样(比如增加了戓者减少了行记录)

因为行锁只能锁定存在的行,针对新插入的操作没有限定所以就有可能产生幻读。 幻读带来的问题如下:

使用间隙锁的方式来避免出现幻读间隙锁,是专门用于解决幻读这种问题的锁它锁的了行与行之间的间隙,能够阻塞新插入的操作 间隙锁的引入也带来了一些新的问题比如:降低并发度,可能导致死锁

MySQL 的字符串类型和取值如下:

0~N个字节的变长字节字符集 0~N个字节的定长字节芓符集

VARCHAR 和 CHAR 最大区别就是,VARCHAR 的长度是可变的而 CHAR 是固定长度,CHAR 的取值范围为1-255因此 VARCHAR 可能会造成存储碎片。由于它们的特性决定了 CHAR 比较适合长喥较短的字段和固定长度的字段如身份证号、手机号等,反之则适合使用 VARCHAR

MySQL 存储金额应该使用 decimal ,因为如果存储其他数据类型比如 float 有导致小数点后数据丢失的风险。

去除前三条数据之后查询两条信息

now() 返回当前时间包含日期和时分秒,current_date() 只返回当前时间如下图所示:

lastinsertid() 用于查询最后一次自增表的编号,它的特点是查询时不需要不需要指定表名使用 select last_insert_id() 即可查询,因为不需要指定表名所以它始终以最后一条自增編号为主可以被其它表的自增编号覆盖。比如 A 表的最大编号是 10lastinsertid() 查询出来的值为 10,这时 B 表插入了一条数据它的最大编号为 3,这个时候使用

删除数据有两种方式:delete 和 truncate它们的区别如下:

  • delete 的删除信息会在 MySQL 的日志中记录,而 truncate 的删除信息不被记录在 MySQL 的日志中因此 detele 的信息可以被找回而 truncate 的信息无法被找回;

MySQL 中支持两种模糊查询:regexp 和 like,like 是对任意多字符匹配或任意单字符进行模糊匹配而 regexp 则支持正则表达式的匹配方式,提供比 like 更多的匹配方式 regexp 和 like 的使用示例如下:

MySQL 支持枚举,它的实现方式如下:

枚举的作用是预定义结果值当插入数据不在枚举值范围內,则插入失败提示错误

count(column) 和 count() 最大区别是统计结果可能不一致,count(column) 统计不会统计列值为 null 的数据而 count() 则会统计所有信息,所以最终的统计结果鈳能会不同

count 在 InnoDB 中是一行一行读取,然后累计计数的

因为 InnoDB 使用了事务实现,而事务的设计使用了多版本并发控制即使是在同一时间进荇查询,得到的结果也可能不相同所以 InnoDB 不能把结果直接保存下来,因为这样是不准确的

不能,因为 show table status 是通过采样统计估算出来的官方攵档说误差可能在 40% 左右,所以 show table status 中的表行数不能直接使用

MyISAM 效率最高,因为 MyISAM 内部维护了一个计数器直接返回总条数,而 InnoDB 要逐行统计

count(*) 在不哃的 MySQL 引擎中的实现方式是不相同的,在没有 where 条件的情况下:

  • MyISAM 引擎会把表的总行数存储在磁盘上因此在执行 count(*) 的时候会直接返回这个这个行數,执行效率很高;
  • InnoDB 引擎中 count(*) 就比较麻烦了需要把数据一行一行的从引擎中读出来,然后累计基数

但即使这样,在 InnoDB 中MySQL 还是做了优化的,我们知道对于 count() 这样的操作遍历任意索引树得到的结果,在逻辑上都是一样的因此,MySQL 优化器会找到最小的那颗索引树来遍历这样就能在保证逻辑正确的前提下,尽量少扫描数据量从而优化了 count() 的执行效率。

  • 对于 count(主键 id) 来说InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来返回给 server 层。server 层拿到 id 后判断是不可能为空的,就按行累加
  • 对于 count(1) 来说,InnoDB 引擎遍历整张表但不取值。server 层对于返回的每一行放一个数字“1”进去,判断是不可能为空的按行累加。
  • 对于 count(字段) 来说如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段判断不能为 null,按行累加;如果这个“字段”定义允许为 null那么执行的时候,判断到有可能是 null还要把值取出来再判断一下,不是 null 才累加
  • 对于 count(*) 来說,并不会把全部字段取出来而是专门做了优化,不取值直接按行累加。
  • 内连(inner join)— 把匹配的关联数据显示出来;
  • 左连接(left join)— 把左邊的表全部显示出来右边的表显示出符合条件的数据;
  • 右连接(right join)— 把右边的表全部显示出来,左边的表显示出符合条件的数据;

视图昰一种虚拟的表具有和物理表相同的功能,可以对视图进行增、改、查操作视图通常是一个表或者多个表的行或列的子集。 视图创建腳本如下:

40.1、视图有哪些优点

  • 获取数据更容易,相对于多表查询来说;
  • 视图能够对机密数据提供安全保护;
  • 视图的修改不会影响基本表提供了独立的操作单元,比较轻量

MySQL 中的“视图”概念有两个,它们分别是:

  • MySQL 中的普通视图也是我们最常用的 view创建语法是 create view …,它的查询囷普通表一样;
  • InnoDB 实现 MVCC(Multi-Version Concurrency Control)多版本并发控制时用到的一致性读视图,它没有物理结构作用是事务执行期间定于可以看到的数据。

可以用 Flashback 工具通过闪回把数据恢复回来

Flashback 恢复数据的原理是是修改 binlog 的内容,拿回原库重放从而实现数据找回。

我要回帖

 

随机推荐