大二上,正在学,数字电路与系统设计基础,大概分了这几个部分,第一部分对逻辑数值的理解与转换,通俗地讲就是一大堆0100010111,化简找规律。第二部分,组合逻辑,这部分介绍了很多芯片,要求你会用这些芯片组合完成你想要的效果,最简单的输入0输出1.第三部分,触发器,这部分告诉你,电路是有延迟的,你可以利用延迟,有时也需要降低延迟,并增加了几种芯片,如触发器,寄存器,计数器,靠的就是电路的延迟。第四部分,数模互换,这部分是教你如何将连续的模电信号转换为不连续的数字信号(01),以及反向转换。第五部分正在学,深入讲了基础门电路的内部构造吧,NMOS,CMOS,暂时理解不深。第六部分综合。
触发器什么时候使用?有什么功能?举个简单的例子说明一下。
title: 计算机系统概论-笔记

date: 2019-09-28 10:40:32
tags:
typora-copy-images-to: ./计算机系统概论-笔记
本章就是概括性的讲解了一下计算机的一些基本常识.和计算机能产生的深刻哲学理念和计算机组成的层次
以8位二进制为例,这里需要考虑二进制是正数还是负数,负数的话要拿到补码在计算,补码表示法中最高位代表符号位
十进制转二进制,就是每次除以2,记录余数,然后从右到左排列,得到二进制数.
这四个结构就是布尔代数的基础结构.也是很多电子原器件能时间的固定门结构
浮点数用来表示小数.但也不是绝对的精确.只能在二进制数的范围内尽量接近结果.浮点数用固有的结构来表示,类似科学计数法,由三部分组成 比如 12340 =1.234*10^4
符号位:1bit 0为正数1位负数
数值范围:8bit 指数部分
数值精度:23bit 尾数部分
二进制的每四位都可以对应一个16进制, 因此直接四位四位一组转换就行
? 如 0011 1101 0110 1110 转换为 3 D 6 E 也就是3D6E
同理 十六进制转换二进制,就是把每位转成四个二进制01
本章将了一些二进制的常用转换,其实最主要的是补码,通过补码把减法转换成加法,简化了计算机的实现.而浮点数则是通过牺牲数字的精度来扩大了数值的范围,包括表示更大的大数如 1.5 10^20和更小的小数.1.5 *10^(-20)
in输入电压时,p断开n联通, out和ov相练.输出0v
in无电压时,p联通,n断开,out和2.9v相连,输出2.9v
电路in的输入和out的输出结果总是想反的
A B任一方有电压,都会导致上方p断开,下方0V联通, 则C输出为0v
A B都无电压时, 上方 2.9v 与C联通, 则C输出2.9V
? 或门就是或非门的相反或者说 或门取反就是或非门
? 电路就是或非门的输出结构在加上之前的非门,把结果在反转
左边部分.AB任意一个为0则上边两个P型会有一个连通,导致C输出为1,在经过非门后输出为0
A B 都为1时, 上边两个P行都端口,此时c输出为0,经过非门后为1
到这里二进制运算的与或非.就已经可以通过电路来实现了.而与或非,异或作为最基础的元件,在经过复杂的组合可以形成更多复杂的逻辑.下边把这几个门用符号抽象化,其中与非门和或非门就是对与门和或门取反
决策单元是不能存储数据的电路组合,他的输出取决于当前的输入.输出后的数据也没办法在决策单元中存储起来.
简单来说决策单元就是由实时的输入产生实时的输出.并不保存结果.
所有的输出结果没次只有一个是1,其他都是零.这个几个结构用来检测匹配不同的输入模式.因为他可以通过输出的结果判断输入的来源
与门前的小圆圈表示对输入取反. AB的每种组合都对应一个输出线路.这就是一种判断逻辑
这是一个一拆多的组合
ABCD 一直是输入的数据源.有电压. 而通过S的两根线路的组合.来决定使用ABCD的那个输入来传递给输出.
这是一个多合一的组合
累加器是用来做二进制的加法的.二进制的加法 其实是三个输入产生两个输出的结果
如 a= 10111 加 b= 11101 其实是两个数的每一位逐渐相加.但是这里两个位相加可能会产生进位.所以应该改为是a和b的每一位和前一位产生的进位(可以是1或0) 进行相加. 产生的结果也包括当前位的和,和一个进位.用carryi表示第i-1位产生的进位, carryi+1表示i位产生的进位, si是当前位相加的结果 真值表如下
门电路如下,可以看到.两个1位相加,就需要这么多电路,然后产生的传ci+1还要作为下一位相加的输入进位.
讲多个1位的全加器组合,形成多为加法器
最右边的0 是第一位加法的进位,然后产生的c1作为第二位加法的进位. S0,S1,S2,S3则是每位加法后的结果,最后输出的二进制格式就是 C4S3S2S1S0
指通过与或非三个门的各种组合,可以实现任何逻辑函数.类似道家的三生万物
存储单元用来把数据保存在电路中,在使用的时候将其输出
他能存储1比特的信息,S和R是两个输入端 ab是输出端.这个器件规定RS不能同时为0.而且这个电路任何时候A和a相同,B和b相同.
这个器件的规律是.当S和R都为0或都为1时, a b的状态都是稳定不变
当R从 1->0时, a->0 b->1
当S从 1->0 是,a->1,b->0.
而 R或S从 0->1时 a,b的状态稳定不变
因此只有 R或S从1->0时,才会改变ab的状态,其他情况 ab保持不变, 这就相当于这个器件提供了保存状态的功能和变更状态的功能,这就是一个存储器.
在锁存器前在加两个控制,we表示可写,D是输入的数据,当we为0时,SR都是1.输出不变,只有当W0->1时,无论
D是0还是1.都导致 RS其中一个由1->0,就会导致其中一个输出会变为1
举例.We为1,如果D为0,R会 1->0,b变成1a变成0 We为1,如果D为1,S会 1->0, 则a变成1b变成0
因此 We为1时,a的结果和D同步,表示D的数据保存在了a中,we为0时,a的数据不会在变化.
到此.这个锁存器可以通过数据数据D和读写控制W来变更,保存数据了.
把多个门控D锁存器相连,用同一个WE信号控制,就形成了多位的寄存器
下图是4位寄存器,D是数据源 Q是输出的存储结果 WE统一控制四位锁存器同时写入数据
内存是由数量极大的存储空间构成,每个存储空间可以放一个数据.而每个数据我们可以约定他有8位或者4位或者16位锁存器组成. 这里的每个存储空间的识别符叫做地址. 而每个数据中含有的锁存器的个数(也就是能存储的bit的位数)叫做寻址能力.地址的总数叫做寻址空间.
以手机短信为例. 手机上最多装2000条短信,2000叫寻址空间.而每个短信可以包含100个字.就是寻址能力是100.
比如说电脑有16MB内存,表示该系统有16M的地址个数(寻址空间为16M),而每个地址的寻址能力是1字节(寻址能力是8bit)
上文中,决策单元是不保存数据,当前的输出取决于当前的输入.存储单元是报错数据,可以持久使用.时序电路则是决策单元和存储单元的组合,既能存储数据,又能保存数据
时序电路的主要用于实现有限状态机.所谓有线状态机,就是指他有几个固定的状态,然后又固定的输入和输出,他会自己在这几个状态间切换,输入不同的状态.每个状态都会根据当前状态和当前输入来跳转到下一状态.例如红绿灯.红灯会在输入时间到变换时,根据现在是红灯状态,跳为绿灯,而绿灯则会跳到黄灯.
有限状态机表示一直逻辑上的顺序执行过程.他通过固定频率的市中电路来触发.
本章讲了主要讲了最基础的与或非门器件,然后由这几个器件组成了计算机中最重要的决策单元和存储单元.这两部分就是计算机的核心部件.到这里我们就发现.计算机其实就是有一些器件进行封装组合,然后形成了控制逻辑,然后慢慢演化出了程序和数据.
现在常用内存是 2 28-by-8-bit模式,也就是寻址空间为2 28(2^28个存储单元),寻址能力为8(每个单元容量为8bit)
访问内存需要先得到某存储单元的地址,放在CPU的内存地址寄存器(MAR)中,然后在发送读写信号,使内存和cpu的数据寄存器联通,数据从内存进入到数据寄存器(MDR)中.
ALU是算数逻辑运算单元,可以进行加减法和与或非逻辑运算.ALU能处理的数据的长度成为字长,目前通常是32位和64位字长.
通常为ALU配置少量存储器.用来保存计算中间结果.因为从内存中读取太慢了.这些存储器叫寄存器,字长和ALU一直
输入输出的读写速度更慢,通常会为他们分配缓存,CPU与缓存进行数据交流
控制单元指挥其他单元协同工作.里边最重要的两个寄存器是指令寄存器,用来保存被执行的那条指令,程序技术器,保存下一条要执行的指令的地址.控制单元包括有限状态机,用来控制系统中的活动.
指令周期是指指令的执行步骤,指令在计算机控制单元的控制下一步一步执行,每个指令分为六个步骤,称为节拍,一个指令的完整执行过程叫指令周期.
取指令就是把内存中某个指令,加载到控制单元的指令寄存器IR中.PC就是指向下一个要执行的指令的地址.详细步骤如下
从这里可以看到CPU与内存打交道都是通过MAR,MDR寄存器, MAR保存某存储单元的地址,MDR从该单元拿到数据.而IR寄存器总是保存要执行的指令的内容,IP则总是指向下一个要执行的指令的地址.
这里的每个步骤都会花费一到多个时钟周期
译码操作是分析,检查指令的类型,并确定对应的操作.这里利用第三章的译码器 逻辑器件,确定指令对应的电路.
如果指令执行时存在地址操作,则在此节拍进行. 就是得到 指令操作数中完整的地址
读取操作数地址对应的实际内容,这里也需要使用MAR装入上步计算出的地址,然后通过MDR把地址上的数据读取出来
指令已经识别出,操作数的内容也拿到了.这步就是执行指令.
这是该指令周期的最后一个节拍,前一节拍的结果会被写入目的寄存器.该节拍完成后,控制单元再次从取指令开始执行下一个指令周期(因为此时PC寄存器已经指向下一个将要执行的指令地址了).这里就是一个有限状态机在不同状态的按顺序切换
要想改变指令的执行顺序,比如跳到一个我们希望他执行的指令那里,例如循环时需要向前跳.就要在当前指令取指令节拍 后Pc指向下一个指令 到执行下一个指令的取指令节拍前,把pc执行的指令的地址改成我们希望执行的指令的地址. 这就需要用到控制指令, 控制指令就是在上文的执行节拍EXECUTE,主动修改PC寄存器的内容.那么本条指令执行完后,Pc就取出我们想要的指令的地址了.
因为CPU是一条指令一条指令一直执行,如和才能停止运行呢,因为指令是根据CPU的时钟周期来运行的.意思是时钟不断发信号提醒指令执行不同的节拍,然后一直执行指令.因此想停掉指令执行,就是要停止时钟.也就是事运行控制位输出为0 .就停止了时钟.
本章介绍了冯诺依曼的模型.现在的计算机都是采用这个模式来设计和组装的.这里边不同的硬件,对于CPU来说.都需要把数据读到寄存器中,CPU在从寄存器中读取使用.因为CPU的频率远远高于内存和io单元的频率.
接下来是指令执行的六个阶段.他是一种有限状态机.不停的在六个节拍中顺序执行.这里就用上了上章的译码器器件.
lc-3 是一个简化版的计算机.用来了解整个计算机的完整构造.
? 寻址空间是2^16(数据块),寻址能力是16位(数据块大小), 我们成这16位寻址能力叫做一个"字".
? 内存和频率远远低于CPU的频率.CPU从内存直接读取数据就浪费大量时钟周期.所以CPU中有很多寄存器,其实就是告诉内存.他们和内存的原理一样,能存储数据,有唯一表示能独立寻址,用R0...R7表示8个寄存器
? 指令集包括 操作码(做什么)+操作数(对谁操作) 其实操作数中还包括 寻址模式, 也就是怎样定位到操作数的具体位置,该指令表示 把R0 和R2的值相加,结果保存在R1中
? 操作码主要分三类,运算,数据移动,控制. 运算指令负责处理信息(加减乘除与或非) 数据移动指令负责在内核和寄存器之间以及内存/寄存器和io设备间传递信息. 控制负责改变指令的执行顺序,如指令跳转.
? 全部指令如下 DR是 DestinationRegister目的寄存器 SR是SourceRegister 源寄存器 通常指令都是把sr的数据传入到dr中
? 是指定位操作数位置的方式.操作数通常在三个地方,内存,寄存器或数据本身.通过寻址模式和操作数的搭配确定操作数的具体地址. 寻址模式有5种,立即数,寄存器,相对寻址,间接寻址,基地址偏移
? lc-3中有3个一位寄存器 N Z P ,当任何寄存器有数据写入时,根据结果,如果写入结果是负数,N为1.结果是0则Z为1,写入是正数则P是1. 这三个寄存器可提供信息给控制指令用来做条件跳转用.
对源操作数按位取反,放入目的操作数 使用寄存器寻址模式,也就是源操作数和目的操作数都是寄存器
把 R5寄存器的值按位取反,结果放在R3寄存器中
ADD是两个操作数执行补码加法.AND是两个操作数执行按位与. 这个指令需要2个源操作数,一个目的操作数.这里的源操作数,其中一个是寄存器寻址模式.另一个可以是立即数寻址模式或寄存器模式.
立即数就是把数值直接放在指令中作为源操作数.如 MOV AL, 0FH ; 将8位立即数0FH传送到AL寄存器中, 0FH就是立即数

下图是 把 R5和R4的结果相加.保存在R1中
搬移指令是在寄存器和内存/寄存器和Io间进行数据传输的指令. 数据从内存到寄存器叫装载(load),从寄存器到内存叫存储(store).
如果bit[9-11]是DR 表示把地址生成位中的数据加载到改DR中
如果bit[9-11]是SR,表示把该SR的数据保存到地址生成位的内存中
? LD 加载指令 ST存储指令
? 该模式下 bit[0-8]表示的是相对位移.相对于当前pc计数器的位移,(上文说过pc计数器保存下一条要执行指令的地址) .pc相对寻址的限制就是 偏移量是针对PC的地址的.所以偏移的范围有限
如下图.此时pc的值是 x4019,相对x4019在偏移x1AF ,LD是加载指令.意思是把 (x4019+x1AF)地址中的数据保存到R2中
? LDI 加载指令 STI存储指令
? 间接寻址中.地址生成位保存的是一个偏移地址A. 而A和PC相加后得到的数值是另外一个地址B.地址B的值才是最终要操作的内存地址.间接寻址可以使指令在更大的范围内跳转. 这是一种2次寻址.x
? 下图解释. pc当前的值是 x4A1C. 则偏移地址A =(x4A1C +x1CC)=x4BE8 ,下图写错了.应该是x4BE8的内容是x2110,然后在把x2110的内容放在R3中.
总结起来就是先进行一次pc相对寻址,再把得到的地址中的值交给R3
? LDR 加载指令 STR存储指令
? 该模式先指定一个基地址寄存器.在指定一个偏移地址,最终的操作数地址由 基地址寄存器的值+偏移地址构成
? 下图解释, 操作数地址 = R2+x1D =x2345+x1D =x2362, 在把 x2362地址中的内容加载到 R1中
? LEA 将立即数与pc计数器地址相加.保存到另一个寄存器中.该命令用来对寄存器初始化.
? 立即数.这个词的命名意思就是,操作数就在指令中,直接就可以读取了(文中-3).就是立即得到.上图中,改指令读取指阶段,pc加1 变成 x4019, 执行时 x4019-3 =x4016. 再把x4016地址处的值复制给R5.
? 控制指令可以改变指令的执行顺序.不用说.肯定是修改pc计数器的值.而且控制指令肯定是需要根据条件判断进行跳转.因此也用上了上边提到的 NZP 三个一位寄存器.
? lc-3中有5中控制指令, 条件跳转,无条件跳转,子程序(函数).TRAP,中断返回
? N negative 表示负数 Z zero 表示零 P positive 表示正数
? bit[9-11]中的值如果与NZP三个位寄存器匹配时,该条件被触发.pc计数器就会计算pc计数器的值+pc偏移值, 也就是进行了指令的跳转.
在指令周期的执行节拍(EXECUTE),处理器检测bit[9-11]的条件码和 NZP三个位寄存器的匹配情况,如果匹配,就修改pc计数器的值.完成指令跳转.
上图中 pc=x4028 修改后的pc = x4028+x0D9 =x4101
如果 某指令的bit[9-11]位都设置为1. 则一定会触发跳转,这叫做无条件跳转指令.
条件跳转指令的问题就是跳转是根据pc偏移值来跳转的.一共8位,跳转的范围有有限.而如果想在内存中更大范围跳转指令.需要使用jump
jump指令.使用源操作数的内容作为要跳转的地址,如下.表示要跳转到 寄存器R2的内容的地址上
trap指令和jump指令相似.都是改变pc计数器内容.跳转到新的指令执行地址.但是jump是在本程序中跳转.而trap则是直线操作系统控件内部,也就是跳转到操作系统的某个指令地址.这就是相当于开启调用系统服务api了.执行完成后.pc计数器会还原为原来本程序中trap指令的下一个地址,既接着执行本程序的逻辑.
回顾一下上文的lc-3结构.下边进行介绍
图中最粗最黑的先.lc-3的全局总线有16位,表示不同结构之间每次传递最多16位信息.同一时刻,总线只允许一个数据发送方发送数据.
访问内存的步骤是.先将要访问内存的地址装入MAR寄存器,然后在看是读指令还是写指令.如果是load,会发送RD信号,把内存中数据送入MDR寄存器, 如果是store,则数据会放入MDR寄存器中,然后发送WE信号,使MDR寄存器中的数据保存至MAR寄存器指定的地址中. (感觉这里是硬件的执行逻辑了.是器材之间电路的联通)
ALU是算数逻辑单元,进行基础的运算. 接受两个输入,一个是寄存器.另一个是寄存器或者是立即数.ALU计算完成会把结果保存在通用寄存器中.同时改变三个条件码寄存器NPZ.
? pc计数器记录下一条要执行的操作.他会在指令周期的取指令节拍最后进行自增来指向下一条指令的地址.但同时上问介绍的控制指令.也是会改变pc计数器的值.因此有了PCMUX,PCMUX是一个三选一的多路复用器(第三章介绍过,多种输入数据,1个输出数据),PCMUX输入包括PC+1(正常执行)、利用offset计算的PC值(控制指令)、MDR(控制指令)
? MARMUX是用来在load,store.trap指令执行期间,选择合适的地址输入.他会根据指令的操作码.来从他的几个输入地址中选择合适的地址.我的理解是他处理了各种不同寻址方式产生的结果.
? IR寄存器保存当前要执行的这个指令.当执行一条指令时,先把它从内存取到内存数据寄存器(MDR)中,然后再传送至IR
? 具体讲解,直接记录了,本指令开头是0110,对应指令格式如下 ,意思是把 baseR +offset6 地址的数据取出来.保存到DR中 DR =M[baseR + offset6]
? 本章主要分解了LC-3计算机的基础结构,分别是内存,寄存器,指令集,寻址模式,条件码..其中寄存器虽然有好几种,但本质都是存取数据的存储元件,只是保存不同的信息.而指令则分为操作指令(用于计算数据),数据搬移指令(用于移动数据)和控制指令(用于控制指令跳转),在加上三个位寄存器NPZ的配合,就实现了一部分逻辑功能,有点程序的感觉了.
? 接着是指令执行的一个周期中的6个节拍.每个节拍需要一到多个始终周期.而计算书就是根据时钟周期的信号频率还不断的运行.不同的节拍做什么,直接理解记住就好.这就是规则.
? 至于指令,其实操作码是主要的.反复就这集中,有的操作码还根据寻址模式不同,又多了几个变化,其实也是很好理解的
? 寻址模式是为了在不同程度上,在寄存器中的不同位置得到数据,这个也直接记录就可以.没难度
? 对于寄存器.概括就是 MAR记录内存的地址 MDR保存内存的值. PC指向下一个指令地址 IR保存要执行的指令
ZNP记录对寄存器数据变化的结果,用来做逻辑判断.
汇编语言是对机器指令的另一种表示方法.机器并不理解汇编语言.汇编语言最后也要翻译成机器指令.而汇编语言和机器指令的格式有点类似.每条汇编语言通常会对应一个机器指令.汇编语言需要经过汇编器汇编变成机器语言.
LABEL OPCODE OPERANDS ; COMMENTS
? 这个和之前的机器指令是一样的. 操作码决定做什么.操作数决定对谁做.这里同样存在不同的寻址模式.
? ru ADD R1 ,R3,#-1 把R3和 -1相加.结果在保存在R1中,这是立即数寻址方式
? 指向内存单元的一个符号名.可以直接在内存中使用.用来做跳转或者做load/store用,其实是一种地址的简单表示方式如下 brp又跳转到了again标号的地方
? 注释用 ; 隔开,计算机不会别识别.是提供给人看的.
? 伪操作并不会执行,是程序员传递给汇编器的信息.用来指导汇编器的汇编操作.汇编器看到这些信息,会把他们丢弃.
? 告诉汇编器将lc-3程序放在内存的什么位置上.如 .ORIG x3050 表示
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。 数据库领域名词触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
创建触发器的SQL语法
DELIMITER |
CREATE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
END |
触发器的优点
触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
比较触发器与约束
约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。
例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。
CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。
约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。
触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。
触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。
如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。
触发器到底可不可以在视图上创建 在 SQL Server?6?4 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:
在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器,真的是这样吗?请点击详细,但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。 深刻理解 FOR CREATE TRIGGER 语句的 FOR 关键字之后可以跟 INSERT、UPDATE、DELETE 中的一个或多个,也就是说在其它情况下是不会触发触发器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。相关内容 一个有趣的应用我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名, 在触发器中利用回滚就可以巧妙地实现无法更改用户名……详细内容 触发器内部语句出错时…… 这种情况下,前面对数据更改操作将会无效。举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。不能在触发器中使用的语句 触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。
CREATE 语句,如:CREATE DATAbase、CREATE TABLE、CREATE INDEX 等。
ALTER 语句,如:ALTER DATAbase、ALTER TABLE、ALTER INDEX 等。
DROP 语句,如:DROP DATAbase、DROP TABLE、DROP INDEX 等。
DISK 语句,如:DISK INIT、DISK RESIZE。
LOAD 语句,如:LOAD DATAbase、LOAD LOG。
RESTORE 语句,如:RESTORE DATAbase、RESTORE LOG。
RECONFIGURE
TRUNCATE TABLE 语句在sybase的触发器中不可使用!
慎用触发器 触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序. [编辑本段]数字电路领域名词学名“双稳态多谐振荡器(Bistable Multivibrator)”。触发器(Flip Flop)是一种可以存储电路状态的电子元件。最简单的是由两个或非门,两个输入端和两个输出端组成的RS触发器(见图)。复杂一些的有带时钟(CLK)段和D(Data)端,在CLK端为高电平时跟随D端状态,而在CLK端变为低电平的瞬间锁存信号的D触发器。更常用的是两个简单D触发器级联而成的在时钟下跳沿锁存信号的边缘D触发器,广泛应用于计数器、运算器、存储器等电子部件。
触发器的电路结构和逻辑功能:
逻辑功能,是指触发器的次态和现态及输入信号之间在稳态下的逻辑关系。这种逻辑关系可以用特性表、特性方程或状态转换图给出。
根据逻辑功能的不同特点,把触发器分为RS、JK、T、D等几种类型。
电路结构,是指电路中门电路的种类及组合方式。
基本RS触发器、同步RS触发器、主从触发器、边缘触发器等是指电路结构的不同形式。由于电路结构形式的不同,带来了各不相同的动作特点。
同一种逻辑功能的触发器可以用不同的电路结构实现。反过来说,用同一种电路结构形式可以作成不同逻辑功能的触发器。
触发器的类型:
按逻辑功能不同分为:RS触发器、D触发器、JK触发器、T触发器。
按触发方式不同分为:电平触发器、边沿触发器和主从触发器。

按电路结构不同分为:基本RS触发器和钟控触发器。
按存储数据原理不同分为:静态触发器和动态触发器。
按构成触发器的基本器件不同分为:双极型触发器和MOS型触发器。
照明配件
用于高强度气体放电灯(H.I.D)的启动,型号繁多.由于高强度气体放电灯启动时需要一个高电压来使气体电离进入等离子态,因而需要一个高压发生器做为启动器。这就是触发器早期的机械型触发器已经淘汰。现在绝大多数触发器都是使用可控硅或高压触发二极管的电子触发器,常用的型号有:OSRAM 的 CD-7 飞利浦的 SI51 SN58 爱伦的ALK400等


