Vincolgi di integrità generici.

Qualcuno mi saprebbe dire come funziona la clausola check,che serve per specificare ulteriori vincoli?

Per essere + chiara faccio un esempio:

create table sala(

                 Codsala decimal(5) CHECK((Codsala IS NOT NULL) AND (Codsala >0)),

                 primary key(Codsala)

)

Quello che io mi aspetto come risultato e che Codsala sia non nullo,e che il codice numerico di Codsala sia maggiore di 0.

Invece:

1) quando con l'istruzione show fields from codsala vado a vedere di che tipo sono gli attributi della tabella,Codsala risulta NULL(dopo che ho chiesto il contrario,cioè non nullo), 

1) quando faccio un inserimento,ad esempio inserisco in  Codsala il valore 0,invece di darmi errore,lo accetta.

CIAO

inviato 10 anni fa
flaky
X 0 X

Stai usando MySQL? Allora non c'è speranza, la clausola CHECK non è supportata. Basta andare sulla documentazione ufficiale:

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

C'è scritto:

The CHECK  clause is parsed but ignored by all storage engines

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Come non è supportata?Ed ora come faccio ad esperimere i vincoli? :'( :'(

Ma io son andata all'indirizzo che mi hai dato,e allinizio fa vedere,anzi ci son alcuni esmepi in cui usa CHECK.

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

Per prima cosa dubito che tu abbia trovato degli esempi di utilizzo della clausola CHECK.

  column_definition

  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)

  | KEY [index_name] [index_type] (index_col_name,...)

  | INDEX [index_name] [index_type] (index_col_name,...)

  | [CONSTRAINT [symbol]] UNIQUE [INDEX]

        [index_name] [index_type] (index_col_name,...)

  | [FULLTEXT|SPATIAL] [INDEX] [index_name] (index_col_name,...)

  | [CONSTRAINT [symbol]] FOREIGN KEY

        [index_name] (index_col_name,...) [reference_definition]

  | CHECK (expr)

Questo non è un esempio ma indica la sintassi accettata. Il fatto che sia accettato non significa però che sia preso in considerazione! Infatti come ti ho riportato nel precedente messaggio, continuando a leggere la documentazione si trova:

The CHECK  clause is parsed but ignored by all storage engines

Per risolvere il problema puoi realizzare in PHP quel controllo prima di inserire o aggiornare un record nella tabella.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Infatti c'è scritto che :

La clausola del CONTROLLO è analizzata ma ignorata da tutti i motori di immagazzinaggio.

E se invece io inserisco prima di creare il codice php,i dtai nella tabella direttamente dal rpomp dei comandi?

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

Allora stai attento ad inserirli bene!  :dunno:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ti chiedo un parere.

Visto che il progetto che sto facendo deve essere valutato dal professore,anche se Check viene analizzato,ma nn preso in considerazione,secondo te glielo devo mettere lo stesso nella documentazione,anche se non lo scrivo nel prompt dei comandi MySQL nel momento della creazione?   

risposto 10 anni fa
flaky
X 0 X

Dipende dal compito, dalla traccia, dal professore. Non è una questione tecnica, è "psicologica"...

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda