zoukankan      html  css  js  c++  java
  • 数据库触发器、事务、索引简单格式

    触发器的关键词:

    create trigger  触发器名---创建触发器

    (一般触发器名格式前面为表名,后面为要控制的多做。如:StudentList_Delete-针对此表的删除动作)

    on  表名---触发器所针对的表名

    for delete--触发器对此表所执行的动作,for是指执行完此多做之后,这里用删除举例,执行完删除动作,将进行一下操作

    as---执行完动作后要进行的操作,as以下就可以编写自己想要执行的操作

    select * from StudentList-----此例是指当StudentList表执行完删除后进行查询整个表所有数据的操作

    还有一种方式是替换此动作:instead of delete--这里是指如果对此表执行删除动作,将进行替换,也就是删除动作不能被执行,被替换为以下的操作

    举例:

    此触发器是指如果删除Student表中的一条数据,会将这个删除动作替换为查询显示要删除的数据
    create
    trigger Student_delete on Student instead of delete as select * from deleted;

    如:delete from Student where code='s101'

    则会显示

    这里简单写一个触发器:

    create trigger Student_delete
    
    on Student
    
    instead of delete
    
    as
    declare @a nvarchar(200);
    select @a=code from deleted;
    if @a='s101'
    begin
    select '此人不可删除!'
    end
    else
    select '其他人也不可以!'

    这个触发器是指如果Student表执行删除动作时,将执行替换,将要删除的数据的code赋值到变量当中,条件过滤

    现在如果执行这样一条语句:delete from Student where code='s101'

    则会显示:

    如果是:delete from Student where code='s102',或者其他编号以及其他删除,则会走else

    事务:

    数据库的事务是用来执行批量动作时如果其中一条sql出错,就会停止整个批量动作的执行,并进行事务回滚,将

    之前执行完的动作也取消,这样避免在操作数据时出现批量数据不能完全被执行从而造成数据不统一,出现错误和垃圾数据

    关键词:begin tran--开始事务,@@error--错误信息(不报错是为0,如果大于0,表示有错误出现),

                rollback tran--回滚事务,之前执行的将取消并不再执行,commit tran--提交事务

    如下:

    有Studet和Class两个表,关联字段(student.code=class.cod)

    现在同时向两个表中添加一条数据

    insert into class values('三班','s111')
    insert into Student values('s111','郭德纲','haha','1880-08-08',80)

    因第二条出现错误,则会出现一条成功一条失败,因为两个表是关联的,查询时Class表中cod为s111的信息在student表中

    就查询不到,从而出现错误和垃圾数据

     

    class表多出一条数据

    先手动将这条数据删除,再继续往下看:

    这时,咱们就可以用到事务来解决这个问题:

    begin tran
    insert into class values('三班','s111')
    insert into Student values('s111','郭德纲','haha','1880-08-08',80)
    
    if @@error>0
    begin
    rollback tran;
    end
    else
    begin
    commit tran
    end

    执行结果:

    这样执行消息看起来并没有什么变化,但查询这两个表,发现,执行成功的那一条数据并未被插入表中

    索引:

    创建索引:

    唯一的索引 :(关键词unique)

    在表格上面创建某个一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

    比如一个成绩表的某一列是考试分数,就无法创建唯一索引,分数有相同的

    create unique index 索引名称

    on 表名称(列名称)

    可以一次给多个列创建索引,以逗号隔开:create  unique  index  索引名   on  表名(列名,列名)

    普通索引:

    省略unique关键词,此列中可以有重复的值,上面提到的分数列可以建普通索引

    create index 索引名称

    on 表名称(列名称)

    还可以用ALTER 创建索引:

    ALTER TABLE  表名  ADD INDEX 索引名(列名称)
    ALTER TABLE  表名  ADD UNIQUE  (列名称)
    ALTER TABLE 表名   ADD PRIMARY KEY (列名称)---主键索引
     
    删除索引:
    可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,
    DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。
    index_name:索引名          table_name:表名
    DROP INDEX index_name ON table_name
    ALTER TABLE table_name DROP INDEX index_name
    ALTER TABLE table_name DROP PRIMARY KEY-----删除主键索引

  • 相关阅读:
    [leetcode-551-Student Attendance Record I]
    [leetcode-543-Diameter of Binary Tree]
    [leetcode-541-Reverse String II]
    [leetcode-530-Minimum Absolute Difference in BST]
    [leetcode-521-Longest Uncommon Subsequence I]
    [leetcode-504-Base 7]
    [leetcode-116-Populating Next Right Pointers in Each Node]
    [leetcode-573-Squirrel Simulation]
    [leetcode-572-Subtree of Another Tree]
    [leetcode-575-Distribute Candies]
  • 原文地址:https://www.cnblogs.com/zyg316/p/9098314.html
Copyright © 2011-2022 走看看