在mysql数据库中,加入一个数据表table。其中有两个字段id和name,其中id为主键,自动增长,现在我想把name字段的默认值改为与id一样,也就是说当我插入一条记录的时候,默认name与id是一样的,请问该怎么实现?

解决方案 »

  1.   

    仅用设置无法实现。不过可以使用触发器来实现这个功能。mysql> create table t_rwxdfbb(id varchar(10),name varchar(10));
    Query OK, 0 rows affected (0.38 sec)mysql> delimiter |
    mysql>
    mysql> CREATE TRIGGER tr_rwxdfbb_bi BEFORE INSERT ON t_rwxdfbb
        ->   FOR EACH ROW BEGIN
        ->     if new.name is null then
        ->          set new.name=new.id;
        ->     end if;
        ->   END;
        -> |
    Query OK, 0 rows affected (0.20 sec)mysql>
    mysql> delimiter ;
    mysql>
    mysql> insert into t_rwxdfbb (id) values ('rwxdfbb');
    Query OK, 1 row affected (0.33 sec)mysql> select * from t_rwxdfbb;
    +---------+---------+
    | id      | name    |
    +---------+---------+
    | rwxdfbb | rwxdfbb |
    +---------+---------+
    1 row in set (0.00 sec)mysql> insert into t_rwxdfbb (id,name) values ('rwxdfbb2','xxxxxx');
    Query OK, 1 row affected (0.06 sec)mysql> select * from t_rwxdfbb;
    +----------+---------+
    | id       | name    |
    +----------+---------+
    | rwxdfbb  | rwxdfbb |
    | rwxdfbb2 | xxxxxx  |
    +----------+---------+
    2 rows in set (0.00 sec)mysql>
      

  2.   

    id是主键, 自增insert into table(name) values ('LAST_INSERT_ID()');莫非这样不行 ?
      

  3.   

    我按照相应做法试了下,发现不行啊,总是出现语法错误,在mysql命令台不行,在phpmyadmin中也不行,是怎么回事?
      

  4.   

    mysql> select auto_increment from information_schema.tables where table_name='e'
    ;
    +----------------+
    | auto_increment |
    +----------------+
    |             10 |
    +----------------+
    1 row in set (0.00 sec)
      

  5.   


    CREATE TRIGGER tr_xinhong_bi BEFORE INSERT ON phome_ecms_audio
    FOR EACH  ROW BEGIN 
    SET new.name = new.id;
    end;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 3 
      

  6.   

    mysql> delimiter |
    mysql>
    mysql> CREATE TRIGGER tr_rwxdfbb_bi BEFORE INSERT ON t_rwxdfbb
        ->   FOR EACH ROW BEGIN
        ->     if new.name is null then
        ->          set new.name=new.id;
        ->     end if;
        ->   END;
        -> |
    Query OK, 0 rows affected (0.20 sec)mysql>
    mysql> delimiter ;
    建议你能象这样贴你的代码,否则猜不出你错在哪儿。
      

  7.   

    mysql> use empirecms
    Database changed
    mysql> delimiter |
    mysql> CREATE TRIGGER tr_xinhong_bi BEFORE INSERT ON phome_ecms_audio
        -> FOR EACH
        -> ROW BEGIN
        -> SET new.filename = new.id;
        -> end;
        -> |
    ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers
     with the same action time and event for one table'
      

  8.   

    This version of MySQL doesn't yet support 'multiple triggers你的表上已经有了一个触发器了,删除。
      

  9.   

    可以了,真是太谢谢了!又学到了一招
    不过还有一个问题,因为我的id是自动增加的,所以我每次插入时没有管id这个字段,这样的话,name字段也没有值,必须要指定id的值,name才能生效,有没有什么办法实现全自动?
      

  10.   

    按照我的想法,每次插入记录的时候,不理会id和name,只插入其他字段,但是这样操作的结果是:id仍然递增,但是name却一直为0,我估计是插入前触发造成的,这个时候id并没有值,因此name也读不到值,我想改为after触发,发现有语法错误“Updating of NEW row is not allowed in after trigger”,这种情况该怎么实现?
      

  11.   

    试了n次,还是无法将id的值给name
      

  12.   

    为什么一开始你不说明你的表结构?!如果是auto_increment 则没有办法,只能在before insert 中 select max(id) 得到。