SQLite
 sql >> Baza danych >  >> RDS >> SQLite

5 sposobów na sprawdzenie typu danych kolumny w SQLite

W SQLite istnieje wiele sposobów patrzenia na strukturę tabeli. Dlatego istnieje wiele sposobów sprawdzenia typu danych kolumn w tej tabeli.

Dostępna jest również funkcja, która pozwala nam sprawdzić typ danych kolumny zwróconej w zapytaniu.

Oto pięć sposobów sprawdzenia typu danych kolumny w SQLite.

PRAGMA table_info() Oświadczenie

PRAGMA table_info() instrukcja zwraca informacje o określonej tabeli, w tym o jej kolumnach i typach danych.

Oto przykład zwracania informacji o tabeli o nazwie Album .

PRAGMA table_info(Album);

Wynik:

cid  name      type           notnull  dflt_value  pk
---  --------  -------------  -------  ----------  --
0    AlbumId   INTEGER        1                    1 
1    Title     NVARCHAR(160)  1                    0 
2    ArtistId  INTEGER        1                    0 

W tym przypadku kolumny zostały utworzone z wyraźnie zdefiniowanym typem danych.

Oto kolejny przykład:

PRAGMA table_info(Events);

Wynik:

cid  name       type     notnull  dflt_value  pk
---  ---------  -------  -------  ----------  --
0    EventId    INTEGER  0                    1 
1    EventName           0                    0 
2    StartDate           0                    0 
3    EndDate             0                    0 

W takim przypadku tylko pierwsza kolumna ma jawnie zdefiniowany typ danych.

SQLite używa innego podejścia do typów danych niż inne główne systemy RDBMS. SQLite używa dynamicznego systemu typowania, więc typ danych wartości jest powiązany z samą wartością, a nie z jej kontenerem.

To powiedziawszy, SQLite pozwala nam jawnie określić typ danych kolumn. W powyższych przykładach niektóre kolumny zostały utworzone z wyraźnie zdefiniowanym typem danych i możemy zobaczyć, jakie są te typy danych, uruchamiając powyższy PRAGMA oświadczenie.

PRAGMA table_xinfo() Oświadczenie

PRAGMA table_xinfo() instrukcja jest dokładnie taka sama jak PRAGMA table_info() z wyjątkiem tego, że zwraca również ukryte kolumny w wirtualnych tabelach:

PRAGMA table_xinfo(Album);

Wynik:

cid  name      type           notnull  dflt_value  pk  hidden
---  --------  -------------  -------  ----------  --  ------
0    AlbumId   INTEGER        1                    1   0     
1    Title     NVARCHAR(160)  1                    0   0     
2    ArtistId  INTEGER        1                    0   0     

Widzimy, że jest to w zasadzie to samo co table_info() , z wyjątkiem dodatkowej kolumny.

.schema Polecenie

Innym sposobem na pobranie struktury tabeli jest użycie .schema Komenda. Jest to jedna z kilku metod, których możesz użyć do zwrócenia kodu SQL użytego do utworzenia tabeli.

Przykład:

.schema Album

Wynik:

CREATE TABLE Chinook.[Album]
(
    [AlbumId] INTEGER  NOT NULL,
    [Title] NVARCHAR(160)  NOT NULL,
    [ArtistId] INTEGER  NOT NULL,
    CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
    FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX Chinook.[IFK_AlbumArtistId] ON [Album] ([ArtistId]);

Ta metoda pozwala nam na wygenerowanie kodu SQL wymaganego do odtworzenia tabeli – w tym określenie dowolnych typów danych.

sqlite_schema Tabela

Możesz użyć sqlite_schema tabeli do tego samego, co w poprzednim przykładzie.

Oto przykład przy użyciu tej samej tabeli.

SELECT sql 
FROM Chinook.sqlite_schema 
WHERE tbl_name = 'Album';

Wynik:

CREATE TABLE [Album]
(
    [AlbumId] INTEGER  NOT NULL,
    [Title] NVARCHAR(160)  NOT NULL,
    [ArtistId] INTEGER  NOT NULL,
    CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
    FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION
)
CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]) 

sqlite_schema dostęp do tabeli można również uzyskać za pomocą sqlite_master .

typeof() Funkcja

Możesz użyć typeof() funkcja, aby uzyskać typ danych kolumny zwróconej przez zapytanie. Dokładniej, zwraca typ danych danego wyrażenia.

Przykład:

SELECT typeof(Title) FROM Album
LIMIT 1;

Wynik:

text

Tutaj użyłem LIMIT klauzula ograniczająca wynik tylko do jednego wiersza, w przeciwnym razie zobaczylibyśmy ten sam wynik powtórzony dla każdego wiersza w tabeli.

Należy pamiętać, że ta metoda zwraca typ danych wyrażenia zwróconego przez zapytanie, a nie rzeczywisty typ danych przypisany do kolumny. Możliwe zwrócone typy to:

  • null
  • integer
  • real
  • text
  • blob

Każda kolumna w bazie danych SQLite ma przypisane jedno z powyższych powinowactw.

W rzeczywistości są one określane jako klasy pamięci. Klasa pamięci jest bardziej ogólna niż typ danych. Wszystkie wartości w instrukcjach SQL, niezależnie od tego, czy są to literały osadzone w tekście instrukcji SQL, czy parametry powiązane z prekompilowanymi instrukcjami SQL, mają niejawną klasę pamięci. Silnik bazy danych może konwertować wartości między numerycznymi klasami pamięci (INTEGER i REAL ) i TEXT podczas wykonywania zapytania.

Więcej informacji o typach danych w SQLite

Zobacz typy danych SQLite (dokumentacja SQLite) i zalety elastycznego pisania (dokumentacja SQLite), aby uzyskać więcej informacji o typach danych w SQLite.

Zobacz także STRICT tabele (dokumentacja SQLite), funkcja dodana w wersji 3.37.0 SQLite 27.11.2021, która pozwala nam odrzucić elastyczny system typowania i zamiast tego wymuszać tradycyjny, sztywny system typowania, który można znaleźć we wszystkich innych silnikach baz danych SQL oraz w standard SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z SQLiteOpenHelper na Androidzie 2.X i 3.X

  2. Utwórz kopię zapasową/przywróć bazę danych SQLlite do folderu aplikacji Dysk Google

  3. SQLite - Oświadczenia JOIN

  4. Jak stworzyć natywną aplikację na Androida działającą w trybie offline?

  5. Wyjątek wskaźnika zerowego podczas wywoływania metody getReadableDatabase()