请教mysql中触发器的写法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教mysql中触发器的写法相关的知识,希望对你有一定的参考价值。

业务如下:
在博客系统中,有一个文章表article,和一个文章评论表artComment,以及一个评论日志表artComment_log,这三张表的表结构如下:
CREATE TABLE article(
aid INT PRIMARY KEY AUTO_INCREMENT,
atitle VARCHAR(50) NOT NULL,
acontent TEXT NOT NULL,
apubtime DATETIME NOT NULL,
alastmodifiedtime DATETIME NOT NULL,--最后修改时间
aaccesstime INT DEFAULT 0 NOT NULL,--访问次数
acommentnum INT DEFAULT 0 NOT NULL,--评论数量
aprivilege TINYINT NOT NULL,--访问权限
astate TINYINT NOT NULL,
uid INT NOT NULL,--用户ID
tid INT NOT NULL,--文章类型ID
FOREIGN KEY (uid) REFERENCES user(uid)
ON DELETE NO ACTION
ON UPDATE CASCADE,
FOREIGN KEY (tid) REFERENCES type(tid)
ON DELETE NO ACTION
ON UPDATE CASCADE
)ENGINE=INNODB
;
CREATE TABLE artComment(
cid INT PRIMARY KEY AUTO_INCREMENT,
ccontent VARCHAR(100) NOT NULL,
cpubtime DATETIME NOT NULL,
cstate TINYINT NOT NULL,
aid INT NOT NULL,--文章ID
uid INT NOT NULL,--用户ID
FOREIGN KEY (uid) REFERENCES user(uid)
ON DELETE NO ACTION
ON UPDATE CASCADE,
FOREIGN KEY (aid) REFERENCES article(aid)
ON DELETE NO ACTION
ON UPDATE CASCADE
)ENGINE=INNODB
;
CREATE TABLE artComment_log(
cid INT REFERENCES artComment(aid),
aid INT REFERENCES artComment(uid),
opertype VARCHAR(10) NOT NULL,--操作类型
operdate DATETIME NOT NULL --操作时间
)ENGINE=INNODB
;
现在我希望在向评论表中添加评论的同时,向artComment_log表中插入记录,并同时令文章表中的评论数量这个字段的值加1,于是我这样写了一个触发器:
CREATE TRIGGER insert_artComment
AFTER INSERT ON artComment
FOR EACH ROW
AS BEGIN
INSERT INTO artComment_log VALUES(
new.cid, new.aid, 'insert', CURRENT_TIMESTAMP
);
UPDATE article
SET acommentnum = acommentnum+1
WHERE aid = new.aid;
END;
但是这样写数据库会报错,呜呜。。。
我刚开始学触发器,不太会写,请高手指点!!
谢谢!!!

参考技术A 我只见过ERP、银行这些地方用到触发器来强制约束数据的合法性,其他的地方没见用哇,触发器会增加数据库负载,降低sql执行速度,增加很多cpu消耗,我们一般用程序来约束数据的合法性,而不是在数据库那端来做。

博客系统的话,评论量即使有错,也没什么影响,更用不到触发器了。

大公司才用呢,但是是大公司一般都会有DBA,负责优化数据库,建立触发器也是DBA的工作,他们对数据库的了解要远比一般的程序员深入都是有好几年经验的人,建立触发器、写存储过程、建索引,是很慎重的事情,这些事情,在大公司一般都轮不到程序员来做,因为程序员对数据库的了解有限,可能做得很差。毕竟人家数据都是很宝贵的,新人去直接碰数据库,万一弄出什么问题,后果不堪设想。所以有一些大公司,程序员动不了数据库,只有查看的权限,等你接到任务时候,表都被建好了,不用你操心了。

哈哈,多看看sql函数哇,招聘的时候考新人,90%不会考那个问题的,我面试过好几家,也没见人问过。
时间充裕的话,多研究研究表结构设计,这个即使小公司也常用到,然后看看sql优化,每种数据库的实现不同,如何写出各种数据库环境下最高效的sql。

高分请教.htaccess规则写法..URL 301

问题详见图片,不知道怎么的,老发不出问题,用图片试下:
简单说下,我的域名 aaa。com, 想重定向到 aaa。com/blog目录,但是其他url,比如aaa。com/xxx这种url不重定向,请问htaccess 文件应该怎么写呢?

这个是关键
RewriteRule ^(.*)$ xxx.com/blog/$1 [R=301,L]
如果只需要把 http://aaa.com/ 301转向到 http://xxx.com/ 其它不管的话,应该是
RewriteRule ^$ http://xxx.com/blog/ [L,R=301]追问

谢谢,那请问下,如果是除了aaa。com/blog这个url不转发,其他都转发应该怎么写呢?

追答

那就加条件
RewriteCond %HTTP_HOST ^aaa\.com$
RewriteCond %REQUEST_URI ^/blog

参考技术A 看不到 大图追问

点击图片或者保存下来看呢? 我这里没法补充问题,用文字发出来,baidu就给我吞了

以上是关于请教mysql中触发器的写法的主要内容,如果未能解决你的问题,请参考以下文章

python 请教一下如何用wincon监听windouws的WM_QUERYENDSESSION关机事件,触发一个事件。

oracle触发器的相关问题,请教

SQL问题,请教高手

关于oracle触发器问题请教

请教关于ADC模块的软件触发转换等问题

Quartz.Net间隔N周/日/年定时触发器写法总结