A表先 生成一条记录 ,提交
提交后得到A表此记录的字段S的值
用字段S的值做关键字生成B表记录
如果不生成,所有都回滚这个用什么办法做?我现在可以想到的办法是触发器,A表insert后触发生成B表的事务
如果有错误就都回滚用事物试了一下,没能试成功
加上事务START TRANSACTION:提示错误如下:
[Err] 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 ':
INSERT INTO doc_head
(serial,client_nam' at line 13请问怎么可以实现我的需求?请问我这个错误是个什么意思?
有没有什么好的办法
提交后得到A表此记录的字段S的值
用字段S的值做关键字生成B表记录
如果不生成,所有都回滚这个用什么办法做?我现在可以想到的办法是触发器,A表insert后触发生成B表的事务
如果有错误就都回滚用事物试了一下,没能试成功
加上事务START TRANSACTION:提示错误如下:
[Err] 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 ':
INSERT INTO doc_head
(serial,client_nam' at line 13请问怎么可以实现我的需求?请问我这个错误是个什么意思?
有没有什么好的办法
解决方案 »
- mysql字符集测试中的若干疑问
- MYSQL中新增一条记录时,字段值得处理方法
- mysql函数 加分100
- 求教mysql一个存储过程的问题
- mysql外键问题(各位大哥务必帮忙啊)
- 救急!!!有哪位做成功过?在一台已经运行了mysql数据库的机器上安装一个新的数据库?
- 系统突然断电后再重启发现mysql无法自动启动,需要再次正常关机后mysql才能正常起动,请大侠帮忙看看
- 如何在www.f2s.net的网站上申请一个免费的php+mysql的主页空间呀!小弟英文不好,急用...急用..急用.急用
- 问一下各位大神sql的问题
- mysql concat函数怎么用
- 文本字段如何建立分区
- mysql把所有表的ID设置主键
#12楼 的例子
Query OK, 0 rows affected (0.09 sec)mysql> create table b (s int primary key);
Query OK, 0 rows affected (0.06 sec)mysql>
mysql> delimiter |
mysql>
mysql> CREATE TRIGGER tr_a_bi BEFORE INSERT ON a
-> FOR EACH ROW BEGIN
-> INSERT INTO b SET s = NEW.s;
-> END;
-> |
Query OK, 0 rows affected (0.08 sec)mysql>
mysql> delimiter ;
mysql>
mysql> insert into a values (1,1);
Query OK, 1 row affected (0.05 sec)mysql> select * from a;
+------+------+
| id | s |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)mysql> select * from b;
+---+
| s |
+---+
| 1 |
+---+
1 row in set (0.00 sec)mysql>
mysql> insert into a values (2,1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select * from a; -- 记录未插入。如果不生成,所有回滚
+------+------+
| id | s |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)mysql> select * from b;
+---+
| s |
+---+
| 1 |
+---+
1 row in set (0.00 sec)mysql>
想的是就用INCREMENT()得到一个唯一整数,做为关键字
我没有用触发器啊,我的代码如下:DROP FUNCTION IF EXISTS `proc_doc_insert`;CREATE DEFINER = `root`@`localhost` FUNCTION `proc_doc_insert`( serial INT(7),
client_name CHAR(20),
asset_code CHAR(10),
machine_type CHAR(50),
machine_seria CHAR(40),
sort TINYINT(1),
sort_other CHAR(20),
open_time INT(10),
come_time INT(10))
RETURNS tinyint(1)
BEGIN START TRANSACTION:
INSERT INTO doc_head
(serial,client_name,asset_code,machine_type,machine_serial,sort,sort_other,open_time,come_time)
VALUES( serial,client_name,asset_code,machine_type,machine_seria,sort,sort_other,open_time,come_time);
COMMIT:
RETURN 1;
END;
谢谢,但是还是有些不解的地方:
1。你用的是触发器吧?
2。可以同时回滚A表增加的记录吗?
3。我还有个C表,那个C表也是用A.S来生成记录,不过是1对多,C表detail会可能发生多条记录,这个怎么办?
LAST_INSERT_ID()得到刚插入的值,在SP中START TRANSACTION:->START TRANSACTION;
client_name CHAR(20),
asset_code CHAR(10),
machine_type CHAR(50),
machine_seria CHAR(40),
sort TINYINT(1),
sort_other CHAR(20),
open_time INT(10),
come_time INT(10))
RETURNS tinyint(1)
BEGIN START TRANSACTION;
INSERT INTO doc_head
(serial,client_name,asset_code,machine_type,machine_serial,sort,sort_other,open_time,come_time)
VALUES( serial,client_name,asset_code,machine_type,machine_seria,sort,sort_other,open_time,come_time);
COMMIT;
RETURN 1;
END;
//delimiter ;你的是语法错误! MYSQL中语句是用; 结束而不是:START TRANSACTION:
COMMIT:
1。你用的是触发器吧?
是2。可以同时回滚A表增加的记录吗?
试验中的例子已经清晰显示了!
-- 记录未插入。如果不生成,所有回滚3。我还有个C表,那个C表也是用A.S来生成记录,不过是1对多,C表detail会可能发生多条记录,这个怎么办?
举例说明。
问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)学会提问,就象这个贴子中的问题,你不贴出你的
START TRANSACTION:
另外怎么去猜你的语法错误呢?
下面例子中已经清楚的显示了,记录全部回滚了。表A,表B中这条 insert into a values (2,1);记录都没有插入。
建议楼主能仔细阅读回复。mysql> insert into a values (2,1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select * from a; -- 记录未插入。如果不生成,所有回滚
+------+------+
| id | s |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)mysql> select * from b;
+---+
| s |
+---+
| 1 |
+---+
1 row in set (0.00 sec)mysql>