一张表结构如下:  id  name   showname
  1   QQ     1QQ
  2   PP     2PP
  3   KK     3KKid为自增,name 为输入.
新增一条记录时,只输入 name 值.
如何自动生成.showname 的值

解决方案 »

  1.   

    用触发器做应该可以的吧
    每当插入一条记录时,showname的值为id+name(字符串连接)
      

  2.   

    如果这样,则不建议在表中设置这个showname字段,完全可以在查询中来生成select id,name, concat(id,name) as showname from 一张表结构你可以创建一个view以方便应用。
      

  3.   


    我触发器是这样写的,却报错。create Trigger Ttt
    after  insert
    on  tt for each row
    begin update tt set showname= conact(id,name);end;
    delimiter;
      

  4.   

    是concat 而不是 conact吧
    你改过来在试试看
      

  5.   


    还是一样。SQL 查询:CREATE Trigger Ttt AFTER INSERT ON tt
    FOR each
    ROW BEGIN UPDATE tt SET sname = concat( id, name ) ;MySQL 返回:文档
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 
      

  6.   

    create Trigger Ttt after  insert on  tt for each row begin update tt set sname = concat(id,name);end;delimiter;对了,这种写法,是不是每次新增一条。
    都是整个表update一次啊。
    那效率也太低了。
      

  7.   

    把实现触发器的SQL,发一下啊。
      

  8.   

    常用的一种设计方法是以ID为主键,并在其它需要的地方可以参照。 而在VIEW中显示 showname ,其它表中引用则直接引用 其主键 ID, 如果需要显示 showname 则可以做JOIN查询。只有当数据量极大,JOIN查询无法满足效率上要求的时候,可以考虑添加 showname  到其它表。
      

  9.   

    CREATE Trigger Ttt
    ON tt
    FOR insert
    begin
    update tt set sname = concat( id, name ) where id=(select @@Identity from tt)
    end
      

  10.   

    (select @@Identity from tt) 相当于表tt中id最大值,即为当前插入id值
      

  11.   

    同意楼上,这些在程序里好实现的很,如php的mysql_insert_id()方法可以拿到上次插入操作的id,这样再来个update什么的比触发器,存储过程等来的都有效率。甚至自增ID都会由于mysql内部锁机制影响并发效率,如果楼主想要精益求精,那就写id生成器类来生成id直接一个程序处理好这俩字段的内容然后连ID一起insert进去
      

  12.   

    ID是自增值,也就是唯一值了。完全可以INSERT后,再UPDATE一次,跑索引的效率还可以。不过你也可以在新增的时候,就获得ID值,提交时,就可以判断订单号了。如果考虑并发操作的话,也完全 可以在新增前获取ID值后插入。