[MYSQL] dubbele not null check

Pagina: 1
Acties:

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Hallo allemaal,

ik ben bezig met het opzetten van een kleine database waarin ordergegevens bijgehouden kunnen worden. Nu zit ik met het volgende probleem. In een vereenvoudigde versie heb ik drie tabellen.

In tabel "order" zit een foreign key naar de tabel "account" en een foreign key naar de tabel "adres". Wanneer een klant een order plaatst en in bezit is van een account dient de foreign key naar de tabel account ingevuld te worden. Wanneer de klant een john do zonder account is hoeft alleen het adres van deze persoon opgeslagen te worden.

Het probleem wat nu ontstaat dat ofwel de key naar de tabel "account" gelegd moet worden ofwel naar de tabel "adres". Wat ik nu bedacht had was de volgende checks te plaatsen:

SQL:
1
2
CHECK (account_number IS NOT NULL AND address_number IS NOT NULL);
CHECK(account_number IS NULL AND address_number IS NUKK);


De bedoeling is dat mysql het nu niet slikt dat beide kolommen of leeg of een verwijzing hebben hetgeen wat ik dus wil. Alleen mysql returned de volgende foutmelding:

code:
1
#1064 - You have an error in your SQL syntax near '(account_number IS NOT NULL AND address_number IS NOT NULL), CHECK (account' at line 12


Ik heb eigenlijk niet echt een idee wat er verkeerd is aan dit stukje script.

Iemand een idee hoe dit wel in mysql (versie 3) gemaakt kan worden?

Het totale create table statement wat ik gebruikt heb voor de volledige tabel:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE tbl_order(
   order_number INTEGER UNSIGNED NOT NULL AUTO_INCREMENT ,
   send_method_number INTEGER() NOT NULL ,
   STATUS ENUM( 'open', 'verzonden', 'aanbetaling ontvangen', 'afgebroken' ) NOT NULL DEFAULT 'open',
   account_number INTEGER UNSIGNED,
   address_number INTEGER UNSIGNED,
   CONSTRAINT PK_tbl_order PRIMARY KEY ( order_number, send_method_number ) ,
   KEY IDX_tbl_order1( send_method_number ) ,
   UNIQUE KEY IDX_tbl_order2( order_number ) ,
   KEY IDX_tbl_order3( account_number ) ,
   KEY IDX_tbl_order4( address_number ) ,
   CHECK (
      account_number IS NOT NULL AND address_number IS NOT NULL
   ),
   CHECK (
      account_number IS NULL AND account_number IS NULL
   )
) 

  • DP Kunst
  • Registratie: Juni 2003
  • Laatst online: 29-04 20:42
maak van:

code:
1
2
CHECK (account_number IS NOT NULL AND address_number IS NOT NULL);
CHECK(account_number IS NULL AND address_number IS NUKK);

eens:

code:
1
2
CHECK (account_number IS NOT NULL AND address_number IS NOT NULL);
CHECK(account_number IS NULL AND address_number IS NULL);


edit, lama, in het grote stuk staat het wel goed, maar k denk dat ie dit niet leuk vind:

code:
1
account_number IS NULL AND account_number IS NULL

[ Voor 23% gewijzigd door DP Kunst op 04-05-2005 23:46 ]

Mijn nieuwe portfolio (Under Construction) | Benieuwd wat Solar Team Twente gaat doen?


  • André
  • Registratie: Maart 2002
  • Laatst online: 06-05 11:13

André

Analytics dude

Moet dat niet "NOT IS NULL" zijn :?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

André schreef op woensdag 04 mei 2005 @ 23:47:
Moet dat niet "NOT IS NULL" zijn :?
Nee. :)

Je gebruikt
code:
1
veld IS NOT NULL
of als alternatief
code:
1
NOT IS_NULL(veld)

Althans, voor zover ik weet. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • HyperioN
  • Registratie: April 2003
  • Laatst online: 25-04 09:11
Modbreak:Erhm.. Ondanks het nachtelijke uur en misschien enige invloed van alcoholische dranken, probeer het enigszins serieus te houden :)

[ Voor 82% gewijzigd door gorgi_19 op 05-05-2005 00:28 ]


  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Ik heb de suggesties uit het topic even geprobeerd, helaas boden ze geen uitkomst. Op een lokale mysql versie 4.1 (innodb tabellen) runt het script wel zonder problemen. Kortom ik ga maar even zeuren bij mijn webhost om een update.

Iig bedankt voor de hulp.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Ah, dat zou inderdaad kunnen. Volgens mij ondersteunt MyISAM geen CHECKs. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1