sql fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicoow Unknown

Nicoow Unknown

09/03/2007 11:31:00
Quote Anchor link
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??
 
PHP hulp

PHP hulp

20/11/2024 10:14:47
 
Jurgen assaasas

Jurgen assaasas

09/03/2007 11:38:00
Quote Anchor link
die " zijn niet nodig.
 
- SanThe -

- SanThe -

09/03/2007 11:39:00
Quote Anchor link
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 ;
 
Jurgen assaasas

Jurgen assaasas

09/03/2007 11:42:00
Quote Anchor link
Van de mysql website:
Quote:
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)


 
Frank -

Frank -

09/03/2007 12:20:00
Quote Anchor link
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.
 
Nicoow Unknown

Nicoow Unknown

09/03/2007 13:25:00
Quote Anchor link
@ 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??
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
 
Frank -

Frank -

09/03/2007 13:33:00
Quote Anchor link
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.
 
Nicoow Unknown

Nicoow Unknown

09/03/2007 13:43:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
 
Frank -

Frank -

09/03/2007 14:38:00
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
INSERT INTO
  test(postcode)
VALUES('1234')

Resultaat: gaat fout, is namelijk geen geldige postcode, zie de check in het domain.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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.
 
Nicoow Unknown

Nicoow Unknown

09/03/2007 14:43:00
Quote Anchor link
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
 
Frank -

Frank -

09/03/2007 14:50:00
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.