Avatar billede long Nybegynder
14. juli 1999 - 17:18 Der er 6 kommentarer og
1 løsning

Sende SQL til mySQL : Problem med \g

Hvis jeg kører nedenstående siger den at den ikke kan forstå \g og heller ikke hvis jeg fjerner \g. Hvad gør man så ?

CREATE TABLE Abonnering
    (
    ID                  INT NOT NULL AUTO_INCREMENT,
    UserID              INT,
    KategoriID          INT,
    KEY (KategoriID),
    PRIMARY KEY (ID),
    KEY (UserID)
    )\g

CREATE TABLE CID
    (
    ID                  INT NOT NULL AUTO_INCREMENT,
    CID                  INT,
    BrugerID            INT,
    KEY (BrugerID),
    KEY (CID),
    KEY (ID),
    PRIMARY KEY (ID)
    )\g
Avatar billede jack_ekman Nybegynder
14. juli 1999 - 17:43 #1
I stedet for \g skal du prøve med et ";".  Det er standardmåden at afslutte en sql-forespørgsel på.

Venlg hilsen

Jack
Avatar billede long Nybegynder
14. juli 1999 - 17:53 #2
Så siger den :

parse error near ';

                      CREATE TABLE CID
                            (
  ' at line 9
Avatar billede guru Nybegynder
15. juli 1999 - 11:36 #3
Den eneste fejl i ovenstående er sådan set at du prøver at lave en KEY på BrugerID, uden at BrugerID er sat til NOT NULL. Det kan man ikke.

Den her virker (lige testet):

CREATE TABLE CID (
ID INT NOT NULL AUTO_INCREMENT,
CID INT NOT NULL,
BrugerID INT NOT NULL,
KEY (BrugerID),
KEY (CID),
KEY (ID),
PRIMARY KEY (ID) );

Du behøves heller ikke KEY (ID), den bliver jo bagefter defineret til den meget stærkere PRIMARY KEY, men det er ikke forbudt :-)

Avatar billede long Nybegynder
15. juli 1999 - 11:43 #4
Cool nok ! Mange tak.


Jeg har i øvrigt lavet denne i ASP hvis det har interesse for nogen :

<%
    SQL = Request("SQL")
    DBstr = Request("DBstr")
%>
<HTML>
<HEAD>
    <TITLE>SQL</TITLE>
</HEAD>
<BODY>

<FORM METHOD="get" ACTION="<%=SCRIPT_NAME%>">

<TABLE>
<TR>
  <TD><HR></TD>
  <TD><HR></TD>
</TR>
<TR>
  <TD>DB.Open</TD>
  <TD><INPUT TYPE="text" SIZE="88" NAME="DBstr" VALUE="<%=DBstr%>"></TD>
</TR>
<TR VALIGN="top">
  <TD>SQL</TD>
  <TD><TEXTAREA NAME="SQL" COLS="88" ROWS="10" WRAP><%=SQL%></TEXTAREA></TD>
</TR>
<TR>
  <TD>&nbsp;</TD>
  <TD ALIGN="right">Separer SQL sætninger med \g</TD>
</TR>
<TR>
  <TD>&nbsp;</TD>
  <TD><INPUT TYPE="submit"></TD>
</TR>
<TR>
  <TD><HR></TD>
  <TD><HR></TD>
</TR>
</TABLE>

</FORM>
<%
    On Error Resume Next
   
    SQL = Replace(SQL,vbCrLf," ")
    SQL = Trim(SQL)

    If Not DBstr = "" Then
        Set DB = Server.CreateObject("ADODB.Connection")
        DB.Open DBstr
        If Not SQL = "" Then
            'Split SQL ved \g
            SQLarray = Split(SQL,"\g")
            For N = 0 To UBound(SQLarray)
                If Not SQLarray(N) = "" And Not Left(SQLarray(N),1) = "#" Then
                    DB.Execute(SQLarray(N))
                    Response.Write(SQLarray(N))
                    If Err.number <> 0 Then   
                        %><BR>&nbsp;<I><B>Fejl :</B> <%=Err.description%></I><BR><%
                    Else
                        %> &nbsp;<I><B>: OK</B></I><BR><%
                    End If
                    Response.Write(vbCrLf)
                End If
            Next 'N
        End If
        DB.Close
        Set DB = Nothing
    End If
%>
</BODY>
</HTML>
Avatar billede long Nybegynder
15. juli 1999 - 11:45 #5
Hvad er en KEY ?
Avatar billede guru Nybegynder
15. juli 1999 - 14:22 #6
i mySql det samme som et INDEX, altså en indexering af feltet, så SELECT er hurtigere hvis du søger på det felt.

CREATE TABLE cpr (
    nummer INT....
    navn CHAR()...
    KEY(nummer)
);

~/> mysql cpr < danmarksbefolkning.sql

Uden KEY ville selects som:

SELECT navn from cpr where nummer=123456-7890

være MEGET langsomme fordi basen ville søge igennem sekventielt. Med index tager ovenstående vel ikke mere en et par millisekunder.

ALTID brug index på felter du søger på!

Avatar billede long Nybegynder
15. juli 1999 - 14:31 #7
Kanon ! Du har gjort mig meget klogere ! Takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester