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 Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
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