Toon posts:

[MYSQL] Syntax error?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik draai de volgende SQL query:

CREATE TABLE message (
id int(11) NOT NULL auto_increment,
read char(3) NOT NULL default '',
show char(3) NOT NULL default '',
from varchar(50) NOT NULL default '',
to varchar(50) NOT NULL default '',
subject varchar(50) NOT NULL default '',
msg tinytext NOT NULL,
time timestamp(14) NOT NULL,
readconfirm char(3) NOT NULL default '',
sr char(1) NOT NULL default '',
linkid varchar(32) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY id (id),
KEY id_2 (id)
) TYPE=MyISAM;


Waarop PHPMyAdmin zegt: You have an error in your SQL syntax near 'read char(3) NOT NULL default '', SHOW char(3) NOT NULL default '', FROM varchar' at line 1

Kan iemand me vertellen waar hier de fout zit? :?

Verwijderd

Topicstarter
Het ziet er naar uit dat ik het probleem al gevonden heb: "read" "show" "from" zijn gereserveerde SQL-namen die je niet voor je kolommen mag gebruiken... dan maar read666, show666 en from666...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:58

gorgi_19

Kruimeltjes zijn weer op :9

idd. Zie voor de volledige lijst:
http://www.mysql.com/doc/en/Reserved_words.html

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik zou ze logischere namen geven...
En het is natuurlijk wel hardstikke logisch dat from een gereserveerd woord is :P

Dan kan je queries krijgen ala:
select from from message; En wat bedoel je dan?
Heeeel vies en ik raad het je ten strengste af:
code:
1
2
3
create table message (
`from` varchar(50),
`read` char(3));

Etc, mijn voorkeur heeft het iig altijd om betere namen te verzinnen, want in andere databases zal het ook niet werken mocht je die ooit gebruiken.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

ACM schreef op 25 november 2002 @ 00:20:Etc, mijn voorkeur heeft het iig altijd om betere namen te verzinnen, want in andere databases zal het ook niet werken mocht je die ooit gebruiken.
Je hebt in principe gewoon gelijk hoor, maar toch. Is het niet eigenlijk een zwakte van de SQL-grammatica? Persoonlijk vind ik in het geval van een message (bijv e-mail) de namen "from" en "read" niet echt slecht gekozen.

|_____vakje______|


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Da's geen zwakte van SQL, aangezien de taal ze wel gewoon toelaat, door ze op de juiste manier te quoten. In het geval van MySQL is dat met backtick-quotes, zoals ACM al aangaf :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »


[way offtopic]
[code]
select `select` from `from` where `where` = 'where' order by `order`;
[/code]

dit vind ik toch een duidelijke query! 8)7
[/way offtopic]

[ Voor 5% gewijzigd door thomaske op 25-11-2002 14:04 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

iig vindt MS Access dit niet leuk en je krijgt daar hele vage foutmeldingen (duurde een dag voordat ik er achter kwam wat het probleem was ;) maar is al weer 1,5 jaar terug of zo)...

Cogito Ergo Credo


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

thomaske:

[way offtopic]
[code]
select `select` from `from` where `where` = 'where' order by `order`;
[/code]

dit vind ik toch een duidelijke query! 8)7
[/way offtopic]
kijk, dat lijkt tenminste ergens op :+

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

thomaske schreef op 25 November 2002 @ 14:04:
code:
1
select `select` from `from` where `where` = 'where' order by `order`;

dit vind ik toch een duidelijke query! 8)7
Het ging mij meer om het idee. Als je achter je bureautje een syntax aan het verzinnen bent voor queries bedenk je volgens mij zoiets van:
Hé.. een SELECT query. Dan moet ik weten welke velden uit welke tabellen ik moet halen en aan welke voorwaarde ze moeten voldoen. Dus wil je een lijstje veldnamen en een lijstje voorwaarden. Dus bedenk je:
SELECT (veld1, veld2, ...)
FROM (tabel1, tabel2, ...)
WHERE [(voorwaarde1) [OP (voorwaarde2) ...]]
En je zegt: veldnamen en tabelnamen mogen alleen uit die-en-die karakters bestaan.

Maar goed, ik denk waarschijnlijk te simpel, er zullen vast heel goede redenen zijn om SQL zo te maken dat het lekker onhandig parsed.

|_____vakje______|


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Het is helemaal niet raar om bij de creatie van een tabel een soort tabel-alias als eerste letters van de kolomnamen te nemen. dan ben je van alle reserved words af.
Dus:
code:
1
2
3
4
5
CREATE TABLE GoT_Message
(gm_from varchar(20)
,gm_read varchar(20)
,gm_message_text varchar(2000)
)


Ik heb dus nooit last van reserved words
Bovendien kan je FK verwijzingen zo ook heel gemakkelijk al in de kolomnaam duidelijk maken, door de FK-kolom of de PK-naam van de tabel verwezen tabel te geven of ook dit veld nog weer extra te prefixen met de eigen tabel alias. dus:
code:
1
2
3
4
5
6
CREATE TABLE GoT_Message
(gm_from varchar(20)
,gm_read varchar(20)
,gm_message_text varchar(2000)
,gf_forum_id number(8)         of         gm_gf_forum_id
)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Goodielover schreef op 26 November 2002 @ 11:19: een goed stukje over naamgevingen

code:
1
2
3
4
5
6
CREATE TABLE GoT_Message
(gm_from varchar(20)
,gm_read varchar(20)
,gm_message_text varchar(2000)
,gf_forum_id number(8)         of         gm_gf_forum_id
)
die laatste (gm_gf_forum_id) is natuurlijk nog beter, bij het joinen van tabellen hoef je nooit meer tabel aliassen te gebruiken, omdat alle velden van alle tabellen van je database uniek zijn!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Laatste is wel beter, maar ook lastiger als je al lange kolomnamen gebruikt.
Door de toevoeging kan je over de maximale lengte gaan.

Het gebruik van aliassen raad ik toch wel aan.
De query analyser hoeft dan geen zoekwerk in de DD te doen naar de tabel waar de kolom bij hoort. Kortom je performance van de verwerking van het statement zal toenemen.
Dit geldt natuurlijk vooral in die situaties waar je SQL-statements niet al gecompileerd klaar staan, zoals bijvoorbeeld in een stored procedure.
Pagina: 1