18 个解决方案
#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
试了一下的确不行
#4
我按照相应做法试了下,发现不行啊,总是出现语法错误,在mysql命令台不行,在phpmyadmin中也不行,是怎么回事?
#5
mysql> select auto_increment from information_schema.tables where table_name='e'
;
+----------------+
| auto_increment |
+----------------+
| 10 |
+----------------+
1 row in set (0.00 sec)
#6
原因很简单你的语句没写正确!不过你不贴出你的语句,别人也猜不出你错在哪儿。
#7
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
#8
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> 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 ;
建议你能象这样贴你的代码,否则猜不出你错在哪儿。
#9
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'
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'
#10
我的数据库可是5.1.30的啊
#11
好像是不支持在一个表中操作啊
#12
This version of MySQL doesn't yet support 'multiple triggers
你的表上已经有了一个触发器了,删除。
你的表上已经有了一个触发器了,删除。
#13
可以了,真是太谢谢了!又学到了一招
不过还有一个问题,因为我的id是自动增加的,所以我每次插入时没有管id这个字段,这样的话,name字段也没有值,必须要指定id的值,name才能生效,有没有什么办法实现全自动?
#14
按照我的想法,每次插入记录的时候,不理会id和name,只插入其他字段,但是这样操作的结果是:id仍然递增,但是name却一直为0,我估计是插入前触发造成的,这个时候id并没有值,因此name也读不到值,我想改为after触发,发现有语法错误“Updating of NEW row is not allowed in after trigger”,这种情况该怎么实现?
#15
试了n次,还是无法将id的值给name
#16
为什么一开始你不说明你的表结构?!
如果是auto_increment 则没有办法,只能在before insert 中 select max(id) 得到。
如果是auto_increment 则没有办法,只能在before insert 中 select max(id) 得到。
#17
学习
#18
最终是怎么样啊,
我现在也要实现这样的功能。
我现在也要实现这样的功能。
#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
试了一下的确不行
#4
我按照相应做法试了下,发现不行啊,总是出现语法错误,在mysql命令台不行,在phpmyadmin中也不行,是怎么回事?
#5
mysql> select auto_increment from information_schema.tables where table_name='e'
;
+----------------+
| auto_increment |
+----------------+
| 10 |
+----------------+
1 row in set (0.00 sec)
#6
原因很简单你的语句没写正确!不过你不贴出你的语句,别人也猜不出你错在哪儿。
#7
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
#8
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> 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 ;
建议你能象这样贴你的代码,否则猜不出你错在哪儿。
#9
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'
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'
#10
我的数据库可是5.1.30的啊
#11
好像是不支持在一个表中操作啊
#12
This version of MySQL doesn't yet support 'multiple triggers
你的表上已经有了一个触发器了,删除。
你的表上已经有了一个触发器了,删除。
#13
可以了,真是太谢谢了!又学到了一招
不过还有一个问题,因为我的id是自动增加的,所以我每次插入时没有管id这个字段,这样的话,name字段也没有值,必须要指定id的值,name才能生效,有没有什么办法实现全自动?
#14
按照我的想法,每次插入记录的时候,不理会id和name,只插入其他字段,但是这样操作的结果是:id仍然递增,但是name却一直为0,我估计是插入前触发造成的,这个时候id并没有值,因此name也读不到值,我想改为after触发,发现有语法错误“Updating of NEW row is not allowed in after trigger”,这种情况该怎么实现?
#15
试了n次,还是无法将id的值给name
#16
为什么一开始你不说明你的表结构?!
如果是auto_increment 则没有办法,只能在before insert 中 select max(id) 得到。
如果是auto_increment 则没有办法,只能在before insert 中 select max(id) 得到。
#17
学习
#18
最终是怎么样啊,
我现在也要实现这样的功能。
我现在也要实现这样的功能。