[MySQL] If Exists Select

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Bjornski
  • Registratie: September 2002
  • Laatst online: 29-07 14:59
Beste Medetweakers,

Ik ben bezig met het ontwikkelen van een update voor een website die ik beheer. De website heeft 4 omgevingen (OTAP). Daarom is het handig om de database bij te werken met scripts.

Om fouten te voorkomen wil ik met een scriptversion tabel werken. Ik probeer in mijn SQL scripts het volgende te doen, maar krijg het niet voor elkaar. Ik heb veel gegoogled maar veel verder dan "het kan niet" kom ik niet.

Wat ik probeer te doen is dit:
SQL:
1
2
3
4
IF NOT EXISTS(SELECT * FROM SCRIPTVERSION WHERE SCRIPTVERSION_ID = 10) THEN
  ALTER TABLE enzovoorts;
  UPDATE iets SET nog='meer statements';
END IF


Alvast bedankt voor het meedenken!

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:29

BCC

Kun je niet beter gebruik gaan maken van een bestaande database migratie tool?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Bjornski
  • Registratie: September 2002
  • Laatst online: 29-07 14:59
Het gaat in principe niet om een migratie, maar gewoon het doorontwikkelen van een draaiende site.
De makkelijkste oplossing leek mij om de database gewoon via de command line te updaten.
Welke tools zit jij aan te denken dan?

Acties:
  • 0 Henk 'm!

Verwijderd

Bjornski schreef op vrijdag 31 juli 2009 @ 19:37:
Het gaat in principe niet om een migratie, maar gewoon het doorontwikkelen van een draaiende site.
De makkelijkste oplossing leek mij om de database gewoon via de command line te updaten.
Welke tools zit jij aan te denken dan?
Het is maar wat je onder "migratie" verstaat. In principe is het een migratie van een oude versie naar de nieuwste, daar is zo'n tool voor gemaakt toch? Heb verder geen ervaring met migratietools, dus welke je zou moeten hebben weet ik niet.

Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Waarom zou het niet kunnen?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `ScriptVersion` (
  `version` INT UNSIGNED NOT NULL
);

INSERT INTO `ScriptVersion` VALUES (1), (2);

DELIMITER //

CREATE PROCEDURE P_Update()
BEGIN
IF NOT EXISTS (SELECT * FROM `ScriptVersion` WHERE `version` = 10) THEN
  SELECT 1;
END IF;
END//

DELIMITER ;

CALL P_Update();


code:
1
2
3
4
5
6
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.01 sec)

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:29

BCC

Het kan prima, maar je bent opnieuw het wiel aan het uitvinden. Is het PHP? Kijk dan eens naar bijvoorbeeld de migration tools van CakePHP.

Dan kun je dit soort grappen doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
UP:
  create_table:
    posts:
      user_id: type: integer
      title: type: text
      length: 255
      body: type: text
      highlighted: type: boolean default: false
      flagged: type: boolean default: false
      resolved: type: boolean default: false

DOWN:
  drop_table: [posts]

[ Voor 56% gewijzigd door BCC op 04-08-2009 08:23 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Bjornski
  • Registratie: September 2002
  • Laatst online: 29-07 14:59
Bedankt voor jullie beide reacties (en sorry voor de late reactie voor mijn kant).

Ik ga naar CakePHP kijken en ook naar de truuc met de stored procedure. Bedankt!
Pagina: 1