错代码说明一览表
数 值 叙 述
1 0x0000 *** 作完成
2 0x0001 不正确的函数
3 0x0002 系统找不到指定的文件
4 0x0003 系统找不到指定的路径
5 0x0004 系统无法打开文件
6 0x0005 拒绝存取
7 0x0006 无效的代码
8 0x0007 内存控制模块已损坏
9 0x0008 内存空间不足,无法处理这个指令
10 0x0009 内存控制模块地址无效
11 0x000a 环境不正确
12 0x000b 尝试载入一个格式错误的程序
13 0x000c 存取码错误
14 0x000d 资料错误
15 0x000e 内存空间不够,无法完成这项 *** 作
16 0x000f 系统找不到制定的硬盘
17 0x0010 无法移除目录
18 0x0011 系统无法将文件移到其它的硬盘
19 0x0012 没有任何文件
19 0x0013 储存媒体为写保护状态。
20 0x0014 系统找不到指定的装置。
21 0x0015 装置岩捞N绪。
22 0x0016 装置无法识别指令。
23 0x0017 资料错 (cyclic redundancy check)
24 0x0018 程序发出一个长 度错的指令。
25 0x0019 磁盘驱动器在磁盘找不到 持定的扇区或磁道。
26 0x001A 指定的磁盘或磁盘无法存取。
27 0x001B 磁盘驱动器找不到要求的扇区。
28 0x001C 打印机没有纸。
29 0x001D 系统无法将数据写入指定的磁盘驱动器。
30 0x001E 系y无法读取指定的装置。
31 0x001F 连接到系统的某个装置没有作用。
32 0x0020 The process cannot access the file because it is being used by another process
33 0x0021 档案的一部份被锁定, 现在无法存取。
34 0x0022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial Number: %3) 插入磁盘驱动器 %1。
36 0x0024 开启的分享档案数量太多。
38 0x0026 到达档案结尾。
39 0x0027 磁盘已满。
50 0x0032 不支持这种网络要求。
51 0x0033 远程计算机无法使用。
52 0x0034 网络名称重复。
53 0x0035 网络路息鉹ㄗ魽C
54 0x0036 网络忙碌中。
55 0x0037 The specified network resource or device is no longer available
56 0x0038 The network BIOS command limit has been reached
57 0x0039 网络配接卡发生问题。
58 0x003A 指定的服务器无法执行要求的作业。
59 0x003B 网络发生意外错。
60 0x003C 远程配接卡不相容。
61 0x003D 打印机队列已满。
62 0x003E 服务器的空间无法储存等候打印的档案。
63 0x003F 等候打印的档案已经删除。
64 0x0040 指定的网络名称无法使用。
65 0x0041 拒绝存取网络。
66 0x0042 网络资源类型错。
67 0x0043 网络名称找不到。
68 0x0044 超过区域计算机网络配接卡的名称限制。
69 0x0045 超过网络 BIOS 作业阶段的限制。
70 0x0046 远程服务器已经暂停或者正在起始中。
71 0x0047 由于联机数目已达上限,此时无法再联机到这台远程计算机。
72 0x0048 指定的打印机或磁盘装置已经暂停作用。
80 0x0050 档案已经存在。
82 0x0052 无法建立目录或档案。
83 0x0053 INT 24 失败
84 0x0054 处理这项要求的储存体无法使用。
85 0x0055 近端装置名称已经在使用中。
86 0x0056 指定的网络密码错。
87 0x0057 参数错。
88 0x0058 网络发生数据写入错。
89 0x0059 此时系统无法执行其它行程。
100 0x0064 无法建立其它的系统 semaphore。
101 0x0065 属于其它行程专用的 semaphore 。
102 0x0066 semaphore 已经设定,而且无法关闭。
103 0x0067 无法指定 semaphore 。
104 0x0068 在岔断时间无法要求专用的 semaphore 。
105 0x0069 此 semaphore 先前的拥有权已经结束。
106 0x006A 请将磁盘插入 %1。
107 0x006B 因为代用的磁盘岩捞〕J,所以程序已经停止。
108 0x006C 磁盘正在使用中或被锁定。
109 0x006D Pipe 已经中止。
110 0x006E 系统无法开启指定的 装置或档案。
111 0x006F 档名太长。
112 0x0070 磁盘空间不足。
113 0x0071 没有可用的内部档案标识符。
114 0x0072 目标内部档案标识符不正确。
117 0x0075 由应用程序所执行的 IOCTL 呼叫 不正确。
118 0x0076 写入验证参数值不正确。
119 0x0077 系统不支持所要求的指令。
120 0x0078 此项功能仅在 Win32 模式有效。
121 0x0079 semaphore 超过逾时期间。
122 0x007A 传到系统呼叫的数据区域 太小。
123 0x007B 文件名、目录名称或储存体标语法错。
124 0x007C 系统呼叫层次不正确。
125 0x007D 磁盘没有设定标。
126 0x007E 找不到指定的模块。
127 0x007F 找不到指定的程序。
128 0x0080 没有子行程可供等待。
129 0x0081 %1 这个应用程序无法在 Win32 模式下执行。
130 0x0082 Attempt to use a file handle to an open disk partition for an
operation other than raw disk I/O
131 0x0083 尝试将档案指标移至档案开头之前。
132 0x0084 无法在指定的装置或档案,设定档案指标。
133 0x0085 JOIN 或 SUBST 指令 无法用于 内含事先结合过的磁盘驱动器。
134 0x0086 尝试在已经结合的磁盘驱动器,使用 JOIN 或 SUBST 指令。
135 0x0087 尝试在已经替换的磁盘驱动器,使 用 JOIN 或 SUBST 指令。
136 0x0088 系统尝试删除 未连结过的磁盘驱动器的连结关系。
137 0x0089 系统尝试删除 未替换过的磁盘驱动器的替换关系。
138 0x008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。
139 0x008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
140 0x008C 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
141 0x008D 系统尝试将磁盘驱动器 SUBST 成已结合的磁盘驱动器 目录。
142 0x008E 系统此刻无法执行 JOIN 或 SUBST。
143 0x008F 系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。
144 0x0090 这个目录不是根目录的子目录。
145 0x0091 目录仍有数据。
146 0x0092 指定的路恕w经被替换过。
147 0x0093 资源不足,无法处理这项 指令。
148 0x0094 指定的路拿o时候无法使用。
149 0x0095 尝试要结合或替换的磁盘驱动器目录,是已经替换过的的目标。
150 0x0096 CONFIGSYS 文件未指定系统追踪信息,或是追踪功能被取消。
151 0x0097 指定的 semaphore事件 DosMuxSemWait 数目不正确。
152 0x0098 DosMuxSemWait 没有执行;设定太多的 semaphore。
153 0x0099 DosMuxSemWait 清单不正确。
154 0x009A 您所输入的储存媒体标 元长度限制。
155 0x009B 无法建立其它的执行绪。
156 0x009C 接收行程拒绝接受信号。
157 0x009D 区段已经被舍弃,无法被锁定。
158 0x009E 区段已经解除锁定。
159 0x009F 执行绪识别码的地址不正确。
160 0x00A0 传到 DosExecPgm 的自变量字符串不正确。
161 0x00A1 指定的路恕ㄔ萧T。
162 0x00A2 信号等候处理。
164 0x00A4 系统无法建立执行绪。
167 0x00A7 无法锁定档案的部份范围。
170 0x00AA 所要求的资源正在使用中。
173 0x00AD 取消范围的锁定要求不明显。
174 0x00AE 档案系统不支持自动变更锁定类型。
180 0x00B4 系统发现不正确的区段号码。
182 0x00B6 *** 作系统无法执行 %1。
183 0x00B7 档案已存在,无法建立同一档案。
186 0x00BA 传送的旗号错。
187 0x00BB 指定的系统旗号找不到。
188 0x00BC *** 作系统无法执行 %1。
189 0x00BD *** 作系统无法执行 %1。
190 0x00BE *** 作系统无法执行 %1。
191 0x00BF 无法在 Win32 模式下执行 %1。
192 0x00C0 *** 作系统无法执行 %1。
193 0x00C1 %1 不是正确的 Win32 应用程序。
194 0x00C2 *** 作系统无法执行 %1。
195 0x00C3 *** 作系统无法执行 %1。
196 0x00C4 *** 作系统无法执行 这个应用程序。
197 0x00C5 *** 作系统目前无法执行 这个应用程序。
198 0x00C6 *** 作系统无法执行 %1。
199 0x00C7 *** 作系统无法执行 这个应用程序。
200 0x00C8 程序代码的区段不可以大于或等于 64KB。
201 0x00C9 *** 作系统无法执行 %1。
202 0x00CA *** 作系统无法执行 %1。
203 0x00CB 系统找不到输入的环境选项。 \r
205 0x00CD 在指令子目录下,没有任何行程有信号副处理程序。
206 0x00CE 文件名称或扩展名太长。
207 0x00CF ring 2 堆衬洏峇丑C
208 0x00D0 输入的通用档名字元 或 不正确, 或指定太多的通用档名字元。
209 0x00D1 所传送的信号不正确。
210 0x00D2 无法设定信号处理程序。
212 0x00D4 区段被锁定,而且无法重新配置。
214 0x00D6 附加到此程序或动态连结模块的动态连结模块太多。
215 0x00D7 Can't nest calls to LoadModule
230 0x00E6 The pipe state is invalid
231 0x00E7 所有的 pipe instances 都在忙碌中。
232 0x00E8 The pipe is being closed
233 0x00E9 No process is on the other end of the pipe
234 0x00EA 有更多可用的资料。
240 0x00F0 作业阶段被取消。
254 0x00FE 指定的延伸属性名称无效。
255 0x00FF 延伸的属性不一致。
259 0x0103 没有可用的资料。
266 0x010A 无法使用 Copy API。
267 0x010B 目录名称错。
275 0x0113 延伸属性不适用于缓冲区。
276 0x0114 在外挂的档案系统上的延伸属性档案已经毁损。
277 0x0115 延伸属性表格文件满。
278 0x0116 指定的延伸属性代码无效。
282 0x011A 外挂的这个档案系统不支持延伸属性。
288 0x0120 意图释放不属于叫用者的 mutex。
298 0x012A semaphore 传送次数过多。
299 0x012B 只完成 Read/WriteProcessMemory 的部份要求。
317 0x013D 系统找不到位于讯息文件 %2 中编号为 0x%1 的讯息。
487 0x01E7 尝试存取无效的地址。
534 0x0216 运算结果超过 32 位。
535 0x0217 通道的另一端有一个行程在接送数据。
536 0x0218 等候行程来开启通道的另一端。
994 0x03E2 存取延伸的属性被拒。
995 0x03E3 由于执行绪结束或应用程序要求,而异常终止 I/O 作业。
996 0x03E4 重读I/O 事件不是设定成通知状态。
997 0x03E5 正在处理重读I/O 作业。
998 0x03E6 对内存位置的无效存取。
999 0x03E7 执行 inpage 作业发生错。
上面看看 知道了 是文档已存在 是你的 记事本出了问题!
你自己看看 你是不是一直有程序要打开记事本啊!自己看下进程
篇幅所限本文只写了MySQL25题,像其他的Redis,SSM框架,算法,计网等技术栈的面试题后面会持续更新,个人整理的1000余道面试八股文会放在文末给大家白嫖,最近有面试需要刷题的同学可以直接翻到文末领取。
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果使用非自增主键(如果身份z号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置, 频繁的移动、分页 *** 作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE(optimize table)来重建表并优化填充页面。
Server层按顺序执行sql的步骤为:
简单概括:
可以分为服务层和存储引擎层两部分,其中:
服务层包括连接器、查询缓存、分析器、优化器、执行器等 ,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 555版本开始成为了默认的存储引擎。
Drop、Delete、Truncate都表示删除,但是三者有一些差别:
Delete 用来删除表的全部或者一部分数据行,执行Delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除,会触发这个表上所有的delete触发器。
Truncate 删除表中的所有数据,这个 *** 作不能回滚,也不会触发这个表上的触发器,TRUNCATE比Delete更快,占用的空间更小。
Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。
因此,在不再需要一张表的时候,用Drop;在想删除部分数据行时候,用Delete;在保留表而删除所有数据的时候用Truncate。
隔离级别脏读不可重复读幻影读 READ-UNCOMMITTED 未提交读 READ-COMMITTED 提交读 REPEATABLE-READ 重复读 SERIALIZABLE 可串行化读
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ (可重读)
这里需要注意的是 :与 SQL 标准不同的地方在于InnoDB 存储引擎在 REPEATABLE-READ(可重读)事务隔离级别 下使用的是 Next-Key Lock 锁 算法,因此可以避免幻读的产生,这与其他数据库系统(如 SQL Server)是不同的。所以 说InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) 已经可以完全保证事务的隔离性要 求,即达到了 SQL标准的SERIALIZABLE(可串行化)隔离级别。
因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内 容):,但是你要知道的是InnoDB 存储引擎默认使用 REPEATABLE-READ(可重读)并不会有任何性能损失 。
InnoDB 存储引擎在分布式事务 的情况下一般会用到SERIALIZABLE(可串行化)隔离级别。
主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。
文件与数据库都是需要较大的存储,也就是说,它们都不可能全部存储在内存中,故需要存储到磁盘上。而所谓索引,则为了数据的快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数,因此B+树相比B树更为合适。数据库系统巧妙利用了局部性原理与磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,而红黑树这种结构,高度明显要深的多,并且由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。
最重要的是,B+树还有一个最大的好处:方便扫库。
B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持,这是数据库选用B+树的最主要原因。
B+树查找效率更加稳定,B树有可能在中间节点找到数据,稳定性不够。
B+tree的磁盘读写代价更低:B+tree的内部结点并没有指向关键字具体信息的指针(红色部分),因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一块盘中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多,相对来说IO读写次数也就降低了;
B+tree的查询效率更加稳定:由于内部结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引,所以,任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当;
视图是一种虚拟的表,通常是有一个表或者多个表的行或列的子集,具有和物理表相同的功能 游标是对查询出来的结果集作为一个单元来有效的处理。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。当事务已经被提交之后,就无法再次回滚了。
回滚日志作用:1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因。
InnoDB
MyISAM
总结
数据库并发会带来脏读、幻读、丢弃更改、不可重复读这四个常见问题,其中:
脏读 :在第一个修改事务和读取事务进行的时候,读取事务读到的数据为100,这是修改之后的数据,但是之后该事务满足一致性等特性而做了回滚 *** 作,那么读取事务得到的结果就是脏数据了。
幻读 :一般是T1在某个范围内进行修改 *** 作(增加或者删除),而T2读取该范围导致读到的数据是修改之间的了,强调范围。
丢弃修改 :两个写事务T1 T2同时对A=0进行递增 *** 作,结果T2覆盖T1,导致最终结果是1 而不是2,事务被覆盖
不可重复读 :T2 读取一个数据,然后T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
第一个事务首先读取var变量为50,接着准备更新为100的时,并未提交,第二个事务已经读取var为100,此时第一个事务做了回滚。最终第二个事务读取的var和数据库的var不一样。
T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。
T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。例如:事务1读取某表中的数据A=50,事务2也读取A=50,事务1修改A=A+50,事务2也修改A=A+50,最终结果A=100,事务1的修改被丢失。
T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
悲观锁,先获取锁,再进行业务 *** 作,一般就是利用类似 SELECT … FOR UPDATE 这样的语句,对数据加锁,避免其他事务意外修改数据。当数据库执行SELECT … FOR UPDATE时会获取被select中的数据行的行锁,select for update获取的行锁会在当前事务结束时自动释放,因此必须在事务中使用。
乐观锁,先进行业务 *** 作,只在最后实际更新数据时进行检查数据是否被更新过。Java 并发包中的 AtomicFieldUpdater 类似,也是利用 CAS 机制,并不会对数据加锁,而是通过对比数据的时间戳或者版本号,来实现乐观锁需要的版本判断。
分库与分表的目的在于,减小数据库的单库单表负担,提高查询性能,缩短查询时间。
通过分表 ,可以减少数据库的单表负担,将压力分散到不同的表上,同时因为不同的表上的数据量少了,起到提高查询性能,缩短查询时间的作用,此外,可以很大的缓解表锁的问题。分表策略可以归纳为垂直拆分和水平拆分:
水平分表 :取模分表就属于随机分表,而时间维度分表则属于连续分表。如何设计好垂直拆分,我的建议:将不常用的字段单独拆分到另外一张扩展表 将大文本的字段单独拆分到另外一张扩展表, 将不经常修改的字段放在同一张表中,将经常改变的字段放在另一张表中。对于海量用户场景,可以考虑取模分表,数据相对比较均匀,不容易出现热点和并发访问的瓶颈。
库内分表 ,仅仅是解决了单表数据过大的问题,但并没有把单表的数据分散到不同的物理机上,因此并不能减轻 MySQL 服务器的压力,仍然存在同一个物理机上的资源竞争和瓶颈,包括 CPU、内存、磁盘 IO、网络带宽等。
分库与分表带来的分布式困境与应对之策 数据迁移与扩容问题----一般做法是通过程序先读出数据,然后按照指定的分表策略再将数据写入到各个分表中。分页与排序问题----需要在不同的分表中将数据进行排序并返回,并将不同分表返回的结果集进行汇总和再次排序,最后再返回给用户。
不可重复读的重点是修改,幻读的重点在于新增或者删除。
视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询;不包含任何列或数据。使用视图可以简化复杂的 sql *** 作,隐藏具体的细节,保护数据;视图创建后,可以使用与表相同的方式利用它们。
视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by 则对视图再次order by将被覆盖。
创建视图:create view xxx as xxxx
对于某些视图比如未使用联结子查询分组聚集函数Distinct Union等,是可以对其更新的,对视图的更新将对基表进行更新;但是视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新。
B+tree的磁盘读写代价更低,B+tree的查询效率更加稳定 数据库索引采用B+树而不是B树的主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。
B+树的特点
在最频繁使用的、用以缩小查询范围的字段,需要排序的字段上建立索引。不宜:1)对于查询中很少涉及的列或者重复值比较多的列 2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称 之为“覆盖索引”。
我们知道在InnoDB存储引 擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出的列和索引是对应的,不做回表 *** 作!
举例 :
学号姓名性别年龄系别专业 20020612李辉男20计算机软件开发 20060613张明男18计算机软件开发 20060614王小玉女19物理力学 20060615李淑华女17生物动物学 20060616赵静男21化学食品化学 20060617赵静女20生物植物学
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)