/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL - eksistenstjek på et index
Fra : Jens Gyldenkærne Cla~


Dato : 21-06-06 11:15

Hej gruppe. MySQL har nogle meget praktiske muligheder for
eksistenstjek i DDL-sætninger - altså mulighed for at lade
databasen oprette et objekt hvis det ikke findes i forvejen, eller
omvendt slette det såfremt det eksisterer (CREATE TABLE IF NOT
EXISTS tabelnavn, DROP TABLE IF EXISTS tabelnavn).

Det virker desværre bare ikke med INDEX. Jeg ville gerne kunne
skrive:

DROP INDEX IF EXISTS idxnavn (ON tblnavn)

eller

CREATE INDEX IF NOT EXISTS idxnavn ...

- men det er ikke muligt.

Er der en alternativ måde man i et script kan oprette et index hvis
det ikke eksisterer i forvejen (eller droppe det hvis det
eksisterer)?

Det er version 4.1.14 det drejer sig om.

Jeg bruger det til nogle opgaveløsninger hvor det er rart at kunne
køre hele filen igennem uden at tænke på om det er første eller
andet gennemløb.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

 
 
YJ (21-06-2006)
Kommentar
Fra : YJ


Dato : 21-06-06 18:29


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns97E97C9EBA847jcdmfdk@gyrosmod.cybercity.dk...


> Er der en alternativ måde man i et script kan oprette et index hvis
> det ikke eksisterer i forvejen (eller droppe det hvis det
> eksisterer)?


Ja, opret indexet uden at checke på fejl eller undertryk fejl.

YJ



Jens Gyldenkærne Cla~ (21-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-06-06 22:41

YJ skrev:

> Ja, opret indexet uden at checke på fejl eller undertryk fejl.

- og hvordan gøres det i MySQL?

--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information

YJ (21-06-2006)
Kommentar
Fra : YJ


Dato : 21-06-06 23:09


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns97E9F0DD1C0A2jcdmfdk@gyrosmod.dtext.news.tele.dk...
> YJ skrev:
>
> > Ja, opret indexet uden at checke på fejl eller undertryk fejl.
>
> - og hvordan gøres det i MySQL?

Jeg tror vi taler forbi hinanden.

Når jeg hører script tænker jeg php/asp/perl/.NET og der ved du selv,
hvordan man undertrykker fejl.

Snakker vi et rent SQL-script kan du jo bare afvikle kommandoen og ignorere
den fejler.

YJ



Jens Gyldenkærne Cla~ (22-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-06-06 00:00

YJ skrev:

> Når jeg hører script tænker jeg php/asp/perl/.NET og der ved
> du selv, hvordan man undertrykker fejl.

Ja.

> Snakker vi et rent SQL-script kan du jo bare afvikle
> kommandoen og ignorere den fejler.

Problemet er at den ligger i et længere sql-script, og mysql
stopper når den når fejlen.
Jeg vil helst ikke have fejlmeddelelser når scriptet kører, men
hvis det skal virke, skal jeg kunne tjekke om et index findes.

Jeg kan muligvis klare det ved at droppe hele tabellen i starten af
scriptet, men hvis det er muligt at tjekke på indekset (eller fx på
et felt i en tabel), vil det gøre scriptet pænere.

Jeg kender godt til SHOW ... -kommandoerne, men så vidt jeg kan se
kan man ikke få felter og index m.v. ud som en enkelt række på
denne måde.


--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information

Martin (22-06-2006)
Kommentar
Fra : Martin


Dato : 22-06-06 00:58

Jens Gyldenkærne Clausen wrote:
> Hej gruppe. MySQL har nogle meget praktiske muligheder for
> eksistenstjek i DDL-sætninger - altså mulighed for at lade
> databasen oprette et objekt hvis det ikke findes i forvejen, eller
> omvendt slette det såfremt det eksisterer (CREATE TABLE IF NOT
> EXISTS tabelnavn, DROP TABLE IF EXISTS tabelnavn).
>
> Det virker desværre bare ikke med INDEX. Jeg ville gerne kunne
> skrive:
>
> DROP INDEX IF EXISTS idxnavn (ON tblnavn)
>
> eller
>
> CREATE INDEX IF NOT EXISTS idxnavn ...
>
> - men det er ikke muligt.
>
> Er der en alternativ måde man i et script kan oprette et index hvis
> det ikke eksisterer i forvejen (eller droppe det hvis det
> eksisterer)?
>
> Det er version 4.1.14 det drejer sig om.
>
> Jeg bruger det til nogle opgaveløsninger hvor det er rart at kunne
> køre hele filen igennem uden at tænke på om det er første eller
> andet gennemløb.

Nu har jeg ikke læst det igennem, men hvad mon du siger til
<http://dev.mysql.com/doc/refman/5.0/en/handler.html> ?

HANDLER tbl_name OPEN [ AS alias ]
HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE

eller
<http://dev.mysql.com/doc/refman/5.0/en/show-index.html>
SHOW INDEX FROM tbl_name [FROM db_name]

Jens Gyldenkærne Cla~ (22-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-06-06 12:49

Martin skrev:

> Nu har jeg ikke læst det igennem, men hvad mon du siger til
> <http://dev.mysql.com/doc/refman/5.0/en/handler.html> ?


Så vidt jeg kan se kan det ikke bruges til eksistenstjek.


> <http://dev.mysql.com/doc/refman/5.0/en/show-index.html>
> SHOW INDEX FROM tbl_name [FROM db_name]

Show-kommandoen er tættere på, men jeg skal kunne tilgå den som en
tabel (noget a la

IF EXISTS (SELECT 1 FROM systemtabelmedindexoplysninger WHERE
objNavn = 'idx_test') THEN
DROP INDEX idx_test


I MySQL 5 kan man benytte INFORMATION_SCHEMA-views - og her er der
tilsyneladende noget der kan bruges:

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = 'tbl_name'
AND table_schema = 'db_name'
AND INDEX_NAME = 'idx_test'

- men desværre kører systemet kun 4.1
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Martin (22-06-2006)
Kommentar
Fra : Martin


Dato : 22-06-06 21:02

Jens Gyldenkærne Clausen wrote:
> I MySQL 5 kan man benytte INFORMATION_SCHEMA-views - og her er der
> tilsyneladende noget der kan bruges:

Det er også det eneste jeg er kommet frem til.

> - men desværre kører systemet kun 4.1

og du har ikke mulighed for at få systemet opgraderet vel?

Jeg må indrømme jeg ikke har brugt index før mysql 5, så hvordan det
virker i mysql 4, det må jeg lade være usagt.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste