ajo*_*jon 1 mysql transactions
我有几个插入语句,我只想在它们为真时执行。
这是我的例子:
START TRANSACTION;
INSERT INTO fields (field_name, control_type_id, needs_approval)
VALUES
('Array Photos', 3, 0);
INSERT INTO field_to_job_type (field_id, job_type_id, sequence_number, parent_id)
VALUES
(last_insert_id(), (SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'), 1, (SELECT field_id FROM fields where field_name = 'Photo Pack'));
COMMIT;
Run Code Online (Sandbox Code Playgroud)
现在,如果此查询只有 1 个结果,我真的只想运行第二个查询:
SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'.
如果该查询返回 2 个结果,我想放弃交易。
那可能吗?我试过的东西:
START TRANSACTION;
INSERT ...;
INSERT ...;
IF(SELECT count(job_type_name) FROM job_types WHERE job_type_name = 'Cash') = 1, 'COMMIT', 'ROLLBACK');
Run Code Online (Sandbox Code Playgroud)
哪个,显然没有用。
您可以WHERE为此使用子句。将您的 INSERT VALUES 转换为 INSERT SELECT 并添加WHERE子句。
例如,
INSERT INTO fields (field_name, control_type_id, needs_approval)
SELECT
'Array Photos', 3, 0
WHERE Condition;
Run Code Online (Sandbox Code Playgroud)
如果 Condition 为真,它将插入该行。如果 Condition 为 false,SELECT则将返回零行,因此 INSERT 将插入零行。
如果上面的查询由于语法错误而无法运行,您可以像@spencer7593 提到的那样,添加FROM DUAL.
INSERT INTO fields (field_name, control_type_id, needs_approval)
SELECT
'Array Photos', 3, 0
FROM DUAL
WHERE Condition;
Run Code Online (Sandbox Code Playgroud)
该DUAL表本质上是一个虚拟表,具有可预测的内容,并且可以依赖于始终至少有一行。
| 归档时间: |
|
| 查看次数: |
14944 次 |
| 最近记录: |