表note:
title         content                   summary
a             asfada(很多内容)           asf(40个字符+.....)
b             gsefs                      gse
c             asfawfa                    asd这里我想创建一个insert触发器,当插入一行后时就在content里取前40个字符放到summary中
mysql> create trigger newsummary after insert on note for each row update note s
et summary = concat(substring(content,1,40),'......');
Query OK, 0 rows affected (0.01 sec)

结果是ok的然后插入一行
mysql> insert into note(title,content) values('hello2','sdsdsadawdawd');结果报错: 
ERROR 1442 (HY000): Can't update table 'note' in stored function/trigger because
 it is already used by statement which invoked this stored function/trigger.
MySQL

解决方案 »

  1.   

    delimiter //
    create trigger newsummary before insert on note for each row 
    begin
    set  new.summary = concat(substring(new.content,1,40),'......');
    end //
      

  2.   

    不能对本表进行操作set  new.summary = concat(substring(new.content,1,40),'......');
      

  3.   

    感谢两位的解答;
    我是一名初学者,现在再看Mysql必知必会,但发现里面的内容比较全,但是在实际用的时候,很多Mysql语句都是要组合起来用的,有没有好的书籍推荐能够解决这方面的困扰
      

  4.   


    如果还想同时把选出来的 40个字符 在  去掉空行呢?
    想和这条语句一起执行
    summary = replace(summary,'\n\n','\n') where summary like '%\n\n%';
      

  5.   

    delimiter //
    create trigger newsummary before insert on note for each row 
    begin
    set  new.summary =  replace(concat(substring(new.content,1,40),'......'),'\n\n','\n')  ;
    end //
      

  6.   

    先读三遍《数据库系统概论(第四版)》 王珊 萨师煊   高等教育出版社 (掌握基础知识和概念) 然后再粗略浏览一遍MYSQL的官方手册。(方便以后查找,避免类似于考试的时候,给你本政治书也不知道答案在第几章,第几页)MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html