hey k krijg een fout bij het uitvoeren van de volgende query:

CREATE TABLE bestuur
(
bestid int AUTO_INCREMENT NOT NULL DEFAULT '',
voornaam char(30) NOT NULL DEFAULT '',
tussenvoegsel varchar(10) NOT NULL DEFAULT '',
achternaam char(30) NOT NULL DEFAULT '',
functie char(30) NOT NULL DEFAULT '',
postcode varchar(6) NOT NULL DEFAULT '',
huisnummer varchar(5) NOT NULL DEFAULT '',
telefoon int(10) NOT NULL DEFAULT '',
PRIMARY KEY (bestid)
)

en k krijg deze error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE bestuur
(
bestid int AUTO_INCREMENT NOT NULL,
vo

wat doe k fout??
En zo?
CREATE TABLE bestuur (
bestid int(11) NOT NULL AUTO_INCREMENT,
voornaam char(30) NOT NULL DEFAULT '',
tussenvoegsel varchar(10) NOT NULL DEFAULT '',
achternaam char(30) NOT NULL DEFAULT '',
functie char(30) NOT NULL DEFAULT '',
postcode varchar(6) NOT NULL DEFAULT '',
huisnummer varchar(5) NOT NULL DEFAULT '',
telefoon int(10) NOT NULL DEFAULT '',
PRIMARY KEY (bestid)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Van de mysql website:

So, if we are to create the customer table specified as above, we would type in

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)

Sometimes, we want to provide a default value for each column. A default value is used when you do not specify a column's value when inserting data into the table. To specify a default value, add "Default [value]" after the data type declaration. In the above example, if we want to default column "Address" to "Unknown" and City to "Mumbai", we would type in

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50) default 'Unknown',
City char(50) default 'Mumbai',
Country char(25),
Birth_Date date)



Tip: Ga normaliseren.

De kolom 'functie' gaat nu problemen opleveren, meerdere personen kunnen dezelfde functie hebben: vakkenvuller, vakenvuller, vakenvuler, etc. etc.

Hier kun je dus niets meer mee, zet dit dus in een aparte tabel en sla in de tabel 'bestuur' (rare naam, het begrip 'bestuur' is een eigenschap die bij een persoon hoort, sla je dus op in een record) het id van het bijbehorende record op. En je maakt uiteraard een foreignkey aan. Vergeet niet om de innoDB-engine te gebruiken, MyISAM heb je geen drol aan.
@ jurgen die '' zijn geen dubbele quotes dat is namelijk voor dat hij default leeg is..
@SanThe
ik zal het even proberen alvast bedankt
@frank
ik blijf normaliseren met dat gebeuren..
maar wel goed dat je het zegt want ten eerste is het veiliger en het is een informatica opdracht voor sql dus k moet uhm eigenlijk zo ver mogelijk normaliseren
[edit]
@SanThe thnq hij werkt..
maar ligt t nou alleen aan onderin auto_increment = 1 en die default weghaen??
Offtopic en man-on-a-mission-mode: Een informatica-opdracht in SQL en jullie lopen te prutsen met MySQL? Neem eens een echte database (lees: echte DBMS) en installeer vervolgens b.v. PostgreSQL.

In PostgreSQL kun je ook je eigen datatypes aanmaken, bv. het datatype 'postcode'. Wanneer je dit goed doet, zal PostgreSQL er zelf voor zorgen dat er uitsluitend een geldige postcode kan worden opgegeven. Wanneer je simpelweg een VARCHAR(6) gebruikt, kan er alle mogelijke onzin in worden gezet.

Tevens loop je met MySQL het risico dat je een deel van de data kwijt raakt, wanneer je '1234 AB' (dus met spatie) probeert op te slaan, raak je de B kwijt... MySQL zal je daar geen foutmelding op geven, je hebt dus geen flauw idee of een insert nu wel of niet is geslaagd.
maar zou k dan voor de rest wel gewoon deze database kunnen gebruiken??
dus dat k niet helemaal opnieuw moet schrijven??
hij moet namelijk volgende week af :P
en zou je me dan willen uitleggen hoe k dan die postcode ding kan maken enzo
Helemaal opnieuw schrijven lijkt mij overdreven, PostgreSQL is beter en uitgebreider dan MySQL. Heb je fouten in de queries zitten, bv. een onmogelijke GROUP BY, dan zal PostgreSQL de query afkeuren terwijl er een redelijke kans bestaat dat MySQL z'n schouders ophaalt en jouw data om zeep helpt of niet-bestaande resultaten retourneert.

Dan het aanmaken van een postcode-dataformaat in PostgreSQL:
Stap 1) Aanmaken van het domain

CREATE DOMAIN zip_code_nl
  AS varchar
   CONSTRAINT validate_zip_code_nl CHECK (((VALUE)::text ~ '^[0-9]{4}[a-zA-Z]{2}$'::text));

Nu wordt in het schema 'public' (er is tenslotte geen ander schema opgegeven) het datatype 'zip_code_nl' aangemaakt.

Stap 2) Aanmaken tabel 'test' in schema 'public'

CREATE TABLE test
(
  id serial NOT NULL,
  postcode zip_code_nl NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
) 
WITHOUT OIDS;

Stap 3) Invoeren van wat data

INSERT INTO
  test(postcode)
VALUES('1234')

Resultaat: gaat fout, is namelijk geen geldige postcode, zie de check in het domain.

INSERT INTO
  test(postcode)
VALUES('1234ab')

Resultaat: Ok! Precies wat je wilde hebben

Wil je ook een spatie in de postcode hebben, dan moet je de check even aanpassen.

Gebruik dan i.p.v. '^[0-9]{4}[a-zA-Z]{2}$' de regex
'^[0-9]{4}\\s{0,1}[a-zA-Z]{2}$' voor een optionele spatie of
'^[0-9]{4}\\s{1}[a-zA-Z]{2}$' voor een verplichte spatie.

Hoe je PostgreSQL installeert, kun je op www.postgresql.org vinden.
en mag k zo brutaal zijn waar dat CONSTRAINT op slaat en die WITHOUT OIDS
want k ken dat wel gaan invoeren maar k weet ook graag wat k doe :P
anders heb k er de volgende keer niks aan :P
en k denk dat je me hebt overtuigd om op PostgreSQL over te stappen want die format dingen aanmaken is best handig
Tja, ik kan het gaan voorkauwen, maar het staat allemaal in dé handleiding. Lijkt me handiger dat je die er even bijpakt. Deze is ook in pdf-vorm te verkrijgen.

Ik gebruik momenteel versie 8.1, hoewel versie 8.2 ook al beschikbaar is.

Reageren