数据库

触发器语法

在某个地方(表)发生了某些事件前或后,触发某些事件进行某些操作。

 

四要素

监视地点:表名

监听事件:insert

触发操作:  update

触发时间:before/after

 

 

写触发器之前改变语句结束符号delimite $

语法:

Create trigger triggerName after/beforeinsert/update/delete on 表名

For each row#这句话是固定的

Begin

Sql语句,一句或多句

End;

 

如何在触发器中引用行的值

对于insert而言,新增的行用new 来表示,行中的每一列的值,用new.列名来表示

对于delete而言,删除的行用old来表示,行中每一列的值,用old.列名来表示。

对于update而言,修改前的数据用old表示,修改后的数据用new表示。

 

触发器里after和before的区别

After是先完成数据的增删改再触发。

触发的语句晚于监视的增删改,无法影响前面的增删改动作。

Before是先完成触发,再增删改。

触发的语句先于监视的增删改发生,我们有机会判断,修改即将发生的操作。

 

常用的表的引擎

Myisam 批量插入速度快,不支持事务,锁表

Innodb 慢,支持,锁行

 

 

事务

选用Innodb/bdb

通俗的说事务:指一组操作,要么都成功执行,要么都不执行-----》原子性

在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-----》隔离性

事务发生前和发生后,数据的总额依然匹配—》一致性

事务产生的影响不能够撤销------》持久性

如果出了错误,事务也不允许撤销,只能通过“补偿性事务”

 

开启事务 start transaction;

Commit 提交/rollback 回滚

注意:当一个事务commit,或者rollback就结束了。

有一些语句会造成事务的隐式提交,如starttransaction;

 

 

备份与恢复

系统运行中,增量备份与整体备份

例如:每周日整体备份一次,周一到六备份当天

备份工具

有第三方的收费备份工具

系统自带的mysqldump

Mysqldump –u root –proot test message>D:\\account.sql

导出多个库

Mysqldump –u root –proot  -B 库1 库2 库3>地址/备份文件名

备份所有库

Mysqldump –u root –proot  -A>地址/备份文件名

 

恢复

Source D:\\accont.sql  表级恢复先选库 use 库名; 

Mysql –u root –proot [databaseName]<sql文件

 

索引分为普通索引,唯一索引,全文索引和主键索引

索引是针对数据所建立的目录,可以加快查询速度,降低了增删改的速度。

假设新闻表15列,10列上有索引,如何快读插入500w行数据

1,把空表的索引全部删除

2.导入数据

3数据导入完毕后,集中建立索引

索引的创建原则

1.不要过度索引

2.在where条件最频繁的列上加

3.尽量索引散列值

 

 

普通索引:index,仅仅是加快查询的速度。

唯一索引:unique index行上的值不能重复

主键索引:primary key不能重复,主键必唯一,但是唯一索引不一定是主键

                     一张表上只能有一个主键,但是可以用一个或多个唯一索引

全文索引:fulltext  index select * from 表名 where match(全文索引名) against(‘china’)

全文索引不针对非常频繁的词做索引,如this,is,you,my等等,全文索引

 

查看一张表上所有索引

Show index from 表名

建立索引

Alter table 表名 add index 索引名(字段)

Alter table 表名 add primary key(列名)

存储过程

概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现,在封装的语句里面,可以用if/else,case,while等控制结构。可以进行sql编程。

查看现有的存储过程

Show procedure status

删除现有的存储过程

Drop procedure 存储过程的名字

调用存储过程

Call 存储过程名字();

Create procedure p3(n int,j char(1))

Begin

         Ifj=’h’ then

                   Select* from g where num>n;

         Else

                   Select* from g where num<n;

         Endif;

End$

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值