SQLite Not Null

poruka: 9
|
čitano: 7.627
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
odjavljen
offline
SQLite Not Null
Imadem jedan problem opet oko SQLitea. Dakle, u već postojeću SQLite tablicu sam dodao jedan field i postavio sam ga na integrer, default vrijednost mu je 0 a kad pritisnem na NOT NULL, izbaci mi dijalog i kaže
''There is at least one row with this field set to NULL. This makes it impossible to set this flag. Please change the table dana frist.''
Jel mi možete pojasniti šta je program mislio s tim? Pod postavkama tablice imam neku opciju bez row IDa(Without rowid). Kad čekiram to, izbaci mi
'' Okease add a field which meets the following criteria before setting the without rowid flag:
- Primary key set
- Auto incremenct disabled
- Type INTEGER''
Na toj tablici gdje sam dodao taj field nemam čekiranu tu opciju(Without rowid). Dali mi možete ikako pomoći oko ovoga? Zahvaljujem
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: SQLite Not Null

U SQLiteu nije trivijalno dodati NOT NULL stupac na postojeće podatke. Default se koristi samo za nove zapise i prethodno unesenim retcima vrijednost novog stupca se postavlja na NULL - zbog čega ti puca constraint.

 

U drugim bazama taj problem je trivijalan: 1) dodaj novi NULL stupac, 2) ažuriraj taj stupac svih redaka na neku NOT NULL vrijednost, 3) dodaj NOT NULL constraint.

 

SQLite nema ovu mogućnost pa se složeniji zahvati ovog tipa rade kopiranjem podataka.

12 godina
odjavljen
offline
Re: SQLite Not Null
Bobobo-bo Bo-bobo kaže...

U SQLiteu nije trivijalno dodati NOT NULL stupac na postojeće podatke. Default se koristi samo za nove zapise i prethodno unesenim retcima vrijednost novog stupca se postavlja na NULL - zbog čega ti puca constraint.

 

U drugim bazama taj problem je trivijalan: 1) dodaj novi NULL stupac, 2) ažuriraj taj stupac svih redaka na neku NOT NULL vrijednost, 3) dodaj NOT NULL constraint.

 

SQLite nema ovu mogućnost pa se složeniji zahvati ovog tipa rade kopiranjem podataka.

 

Radim sa SQLiteom zbog SAMP servera i sad dolazim do problema. Recimo da ja napravim ažuriranje skripte i dodam naredbe da sustav još mora očitati recimo 10 novih podataka. Hmmm, eh sad mi nije jasno kako da napravim da kad dodam u SQLite browseru tih 10 fieldova da mi odmah upiše u field default vrijednost(za sve rowove). Jer recimo ako ja kod tog ažuriranja budem imao 1000 korisnika, ja za svakog korisnika moram upisivati vrijednosti(znači trebalo bi mi jako puno vremena). 

Nadam se da me razumiješ šta želim postići, hvala  

11 godina
neaktivan
offline
Re: SQLite Not Null

Za trebat će ti dvije naredbe.

 

Prva naredba dodaje novi stupac (sa defaultom, ali bez NOT NULL constrainta):

ALTER TABLE ime_tablice
ADD COLUMN novi_stupac INTEGER DEFAULT 0

 

Druga naredba ažurira to polje svim postojećim retcima:

UPDATE ime_tablice
SET novi_stupac = 0

 

Ovo je polovično dobro jer polje novi_stupac i dalje nema NOT NULL pa je moguće eksplicitno unijeti tu vrijednost u bazu.

12 godina
odjavljen
offline
Re: SQLite Not Null
Bobobo-bo Bo-bobo kaže...

Za trebat će ti dvije naredbe.

 

Prva naredba dodaje novi stupac (sa defaultom, ali bez NOT NULL constrainta):

ALTER TABLE ime_tablice
ADD COLUMN novi_stupac INTEGER DEFAULT 0

 

Druga naredba ažurira to polje svim postojećim retcima:

UPDATE ime_tablice
SET novi_stupac = 0

 

Ovo je polovično dobro jer polje novi_stupac i dalje nema NOT NULL pa je moguće eksplicitno unijeti tu vrijednost u bazu.

 

 

Stupce dodajem preko managera za SQLite, znači to mi je trenutno beskorisno. A ova druga opcija mi je već poznata ali sad to više nije bitno... Ako mi miožeš još obasniti kada koristim NOT NULL a kada DEFAULT X

11 godina
neaktivan
offline
Re: SQLite Not Null

DEFAULT zadaje vrijednost stupca ako INSERT INTO ne navede vrijednost tog stupca, a NOT NULL koristiš kad želiš zabraniti NULL u nekom polju.

 

Tvoj problem je što prilikom dodavanja NOT NULL stupca na tablicu koja nije prazna SQLite ne koristi ponuđeni DEFAULT - jer ALTER TABLE ADD COLUMN nije INSERT.

12 godina
odjavljen
offline
SQLite Not Null
A Null je šta?
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: SQLite Not Null

SQL-ov NULL je posebna oznaka vrijednosti koja nije poznata ili je nema - NULL nije isto što i broj nula, False ili prazan string. Tu vrijednost može poprimiti bilo koji tip polja (string, broj, datum itd.) kojem nisu eksplicitno zabranjene takve vrijednosti.

 

Npr. ako imaš tablicu Osobe sa stupcima Ime(string), Prezime(string) i Datum_rođenja(date), koristiš NULL kao datum rođenja osobama kojima taj podatak nije poznat:

 

Ime    Prezime  Datum_rođenja
Eva    Ević    1.1.1980.
Ivo    Ivić    4.2.1999.
Pero   Perić    NULL

12 godina
odjavljen
offline
SQLite Not Null
I kako onda SQLite očita taj NULL? Meni se SAMP Server sruši jer je prazno polje, to mi i stvara problem...
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice