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
Annonceindlæg fra Computerworld
Geopolitik i cyberspace
Mark Fiedel i Styrelsen for Samfundssikkerhed påpeger behovet for, at Danmark kigger kritisk på leverandørafhængighed.
13. juni 2025
I stedet for \g skal du prøve med et ";". Det er standardmåden at afslutte en sql-forespørgsel på. Venlg hilsen Jack
Så siger den : parse error near '; CREATE TABLE CID ( ' at line 9
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 :-)
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> </TD> <TD ALIGN="right">Separer SQL sætninger med \g</TD> </TR> <TR> <TD> </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> <I><B>Fejl :</B> <%=Err.description%></I><BR><% Else %> <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>
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å!
Kanon ! Du har gjort mig meget klogere ! Takker :)
Computerworld tilbyder specialiserede kurser i database-management