---
title: "Endast köra om alla sql-satser kan utföras"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/170861-endast-köra-om-alla-sql-satser-kan-utföras"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Trankan"
published: "2008-04-17T14:06:31.000Z"
updated: "2008-04-19T22:58:31.000Z"
replies: 14
views: 797
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/170861-endast-köra-om-alla-sql-satser-kan-utföras"
---

# Endast köra om alla sql-satser kan utföras

## #1 — Trankan, 2008-04-17T14:06Z

Hej!

Jag har en funktion som flyttar en bestämd rad från en databastabell till en annan. Det innebär att jag måste ha tre sql-sater. Först hämtar jag den rad jag vill flytta, sedan lägger jag till raden i den andra tabellen och slutligen tar jag bort raden från den första tabellen. Jag vill att att denna funktion ska köras endast om alla tre sql-satserna kan utföras, för att undvika att till exempel raden tas bort utan att först läggas till i den andra tabellen. Går det här att lösa?

Permalänk: https://www.webforum.nu/p/170861

## #2 — colione, 2008-04-17T14:42Z

Kör du mysql bör du titta på att använda InnoDB som motor då den har stöd för transaktioner. Då kan du utföra alla dina frågor och om något går fel så gör du en rollback annars en commit.

Permalänk: https://www.webforum.nu/p/2101588

## #3 — LarsG, 2008-04-17T14:44Z

Använd transaktioner. 

```
begin
     declare exit handler for sqlexception rollback;
     start transaction;
     insert into t2 select <kolumner> from t1 where <villkor>;
     delete from t1 where <villkor>;
     commit;
end
```

Permalänk: https://www.webforum.nu/p/2101589

## #4 — Trankan, 2008-04-17T14:52Z

Finns det någonstans där man kan läsa mer om transaktioner? Har inte använt det tidigare.

Permalänk: https://www.webforum.nu/p/2101594

## #5 — colione, 2008-04-17T14:56Z

<http://www.databasejournal.com/features/mysql/article.php/3382171>

Permalänk: https://www.webforum.nu/p/2101598

## #6 — Trankan, 2008-04-17T15:20Z

Tack för länken. Allra helst skulle jag vilja fortsätta med MyISAM som jag använt hittills, men då går problemet inte att lösa kanske?

Permalänk: https://www.webforum.nu/p/2101603

## #7 — colione, 2008-04-17T15:24Z

MyISAM har inte transaktionsstöd. Du förlorar egentligen inget på att gå över tilll InnoDB heller. Då du även får stöd för foreign keys. Vill du prompt göra det i MyISAM får du skriva logiken själv vilket kommer vara jobbigt, svårt och onödigt.

Permalänk: https://www.webforum.nu/p/2101604

## #8 — Trankan, 2008-04-17T15:40Z

Okej, med det räcker väl med att använda InnoDB för just de tabeller som jag vill ska ha stöd för transaktioner? Har tittat lite i phpMyAdmin, men i listan där man väljer lagringsmotor för en tabell finns inte InnoDB med. Känner någon igen det här och vet vad det kan bero på?

Permalänk: https://www.webforum.nu/p/2101609

## #9 — dreas, 2008-04-17T15:45Z

Om jag inte misstar mig så ska väl även MyISAM ha stöd för FK? Eller är det jag som är ute och cyklar? Vill minnas att jag har använt FK i MyISAM..

Permalänk: https://www.webforum.nu/p/2101611

## #10 — LarsG, 2008-04-17T15:55Z

Du misstar dig.

Det går att ange foreign key när man skapar tabellen men den appliceras inte.

Permalänk: https://www.webforum.nu/p/2101612

## #11 — Trankan, 2008-04-17T16:27Z

Kom på en sak nu som jag glömde att nämna tidigare. Förrutom att de tre sql-satserna ska köras så ska även en mapp på FTP:n skapas, och om inte allt detta kan utföras så ska inte funktionen köras. Det måste ju göra allting mycket krångligare.  :l

Permalänk: https://www.webforum.nu/p/2101616

## #12 — dreas, 2008-04-17T16:28Z

Ok, du har säkert rätt. Är väl det jag gjort, applicera FK i MyISAM innan jag gick över till innoDB av andra anledningar.
Då har man lärt sig något nytt idag med, sicken grej! :)

Permalänk: https://www.webforum.nu/p/2101617

## #13 — aasah, 2008-04-18T17:47Z

> **Trankan skrev:**
>
> Kom på en sak nu som jag glömde att nämna tidigare. Förrutom att de tre sql-satserna ska köras så ska även en mapp på FTP:n skapas, och om inte allt detta kan utföras så ska inte funktionen köras. Det måste ju göra allting mycket krångligare.  :l

Ja, det blir det. För så vitt jag förstår kan inte databasen veta om FTP:andet funkat eller ej. Och då löser inte transaktioner problemet.

Permalänk: https://www.webforum.nu/p/2101849

## #14 — colione, 2008-04-18T18:55Z

Det är ju bara att skapa den innan du ska köra sql-satserna, går inte mappan att skapa så hoppar du bara över det hela.

Permalänk: https://www.webforum.nu/p/2101857

## #15 — Trankan, 2008-04-19T22:58Z

Jo det förstås, men då skapas ju mappen oavsett om sql-satserna körs eller inte.

Permalänk: https://www.webforum.nu/p/2102063

---

Tråden på webben: https://www.webforum.nu/amne/php/170861-endast-köra-om-alla-sql-satser-kan-utföras
