Datatyper brukt i SQL-server. SQLite databasestyringssystem

DEFINISJON AV DATASTRUKTUR

Spørsmål:

1. SQL-datatyper definert av standarden... 1

2. Datatyper som brukes i SQL-serveren. 3

3. Uttrykk og variabler. 5

4. SQL-kontrollkonstruksjoner... 6

5. Grunnleggende objekter i SQL-serverens databasestruktur. 7

SQL-datatyper definert av standarden

Data er aggregert informasjon lagret i en database som en av flere forskjellige typer. Datatyper definerer grunnreglene for dataene i en bestemt tabellkolonne, inkludert mengden minne som er tildelt for den.

Det er seks skalardatatyper i SQL, definert av standarden. Deres korte beskrivelse er presentert i tabellen.

Karakterdata

Tegndata består av en sekvens av tegn inkludert i et sett med tegn definert av skaperne av DBMS. Fordi tegnsett er spesifikke for forskjellige dialekter i SQL-språket, er listen over tegn som kan inkluderes i tegndataverdier også implementeringsspesifikk. De mest brukte tegnsettene er ASCII og EBCDIC. Følgende format brukes til å definere tegndata:

<символьный_тип>::=

( KARAKTER [ VARIERER][lengde] | [lengde])

Når du definerer en kolonne med en tegndatatype, brukes lengdeparameteren til å spesifisere maksimalt antall tegn som kan plasseres i kolonnen (standard er 1). En tegnstreng kan defineres som å ha en fast eller VARIERENDE lengde. Hvis en streng er definert med en fast lengde på verdier, vil verdien fylles til den angitte lengden med mellomrom til høyre når færre tegn legges inn i den. Hvis en streng er definert med en variabel lengdeverdi, så hvis du skriver inn færre tegn i den, vil bare de angitte tegnene bli lagret i databasen, noe som vil tillate deg å oppnå noen besparelser i eksternt minne.

Bitdata

Bittype data brukes til å definere bitstrenger, dvs. sekvenser av binære sifre (biter), som hver kan ha verdien enten 0 eller 1. Bittypedata er definert ved hjelp av følgende format:

<битовый_тип>::=

BIT [lengde]

Nøyaktige tall

Nøyaktig numerisk datatype brukes til å bestemme tall som har en eksakt representasjon, dvs. tall består av sifre, et valgfritt desimaltegn og et valgfritt tegn. Nøyaktige numeriske typedata bestemmes av presisjonen og lengden til brøkdelen. Presisjon spesifiserer det totale antallet signifikante desimaler i et tall, som inkluderer lengden på både heltalls- og brøkdelene, men ekskluderer selve desimaltegnet. Skalaen spesifiserer antall brøkdesimalplasser for et tall.

<фиксированный_тип>::=

(NUMERISK[nøyaktighet[,skala]]|(DESIMALT|DES)

[presisjon[, skala]]

| (INTEGER |INT)| SMALLINT)

Typer NUMERISK Og DESIMAL er laget for å lagre tall i desimalformat. Standardlengden på brøkdelen er null, og standardpresisjonen er implementeringsavhengig. INTEGER (INT)-typen brukes til å lagre store positive eller negative heltall. SMALLINT type – for lagring av små positive eller negative heltall; i dette tilfellet reduseres forbruket av eksternt minne betydelig.

Avrundede tall

Type avrundede tall brukes til å beskrive data som ikke kan representeres nøyaktig av en datamaskin, spesielt reelle tall. Avrundede eller flytende kommatall er representert i vitenskapelig notasjon, der tallet er skrevet med mantissen multiplisert med en viss potens av ti (eksponent), for eksempel: 10E3, +5.2E6, -0.2E-4. For å definere data av en reell type, brukes følgende format:

<вещественный_тип>::=

( FLYTTE [presisjon] | EKTE |

DOBBEL PRESISJON)

Parameter nøyaktighet angir antall signifikante sifre i mantissen. Presisjonen til REAL og DOUBLE PRESISION-typene er implementeringsavhengig.

Dato og tid

Dato/klokkeslett datatype brukes til å bestemme tidspunkter med en viss nøyaktighet. SQL-standarden støtter følgende format:

<тип_даты/времени>::=

(DATO | TID[presisjon]|

TIMESTAMP[presisjon])

DATE-datatypen brukes til å lagre kalenderdatoer som inkluderer feltene ÅR, MÅNED og DAG. Datatypen TIME er for lagring av tidsstempler, inkludert feltene HOUR (timer), MINUTE (minutter) og SECOND (sekunder). TIMESTAMP datatype – for lagring av dato og klokkeslett sammen. Presisjonsparameteren spesifiserer antall brøkdesimalplasser som bestemmer nøyaktigheten for lagring av verdien i SECOND-feltet. Hvis denne parameteren utelates, er den som standard TIME-kolonner lik null(dvs. hele sekunder lagres), mens det for felt av typen TIMESTAMP antas å være lik 6. Tilstedeværelsen av nøkkelordet WITH TIME SONE bestemmer bruken av feltene TIMESONE HOUR og TIMESONE MINUTE, og setter dermed timen og minutter av sonetidsforskyvningen i forhold til den universelle koordinattiden (Greenwich Time).

INTERVAL-data brukes til å representere tidsperioder.

Domenekonsept

Domene– dette er et sett akseptable verdier for en eller flere attributter. Hvis en databasetabell eller flere tabeller har kolonner som har de samme egenskapene, kan du beskrive kolonnens type og virkemåte i form av et domene, og deretter tildele hver av de samme kolonnene et domenenavn. Domenet definerer alle potensielle verdier som kan tilordnes et attributt.

SQL-standarden lar deg definere et domene ved å bruke følgende setning:

<определение_домена>::=

OPPRETT DOMENE domenenavn

datatype

[STANDARDverdi]

[SJEKK (gyldige_verdier)]

Hvert domene som opprettes er tildelt et navn, en datatype, en standardverdi og et sett med tillatte verdier. Det skal bemerkes at det gitte erklæringsformatet er ufullstendig. Nå, når du oppretter en tabell, kan du spesifisere et domenenavn i stedet for en datatype.

Fjerning av domener fra databasen gjøres ved å bruke setningen:

DROPPE DOMENE domenenavn [ RESTRICT |

Hvis du spesifiserer nøkkelordet CASCADE, vil eventuelle tabellkolonner som er opprettet med domenet som slettes, automatisk endres og beskrives som å inneholde data av typen som ble spesifisert i definisjonen av domenet som slettes.

Et alternativ til domener i miljøet SQL Server er tilpassede datatyper.

Datatyper brukt i SQL-server

Systemdatatyper

Et av hovedpunktene i tabellopprettingsprosessen er å bestemme datatypene for feltene. Datatypen til et tabellfelt bestemmer typen informasjon som skal plasseres i det feltet. Konseptet med en datatype i SQL Server er fullstendig ekvivalent med konseptet med en datatype i moderne språk programmering. SQL-serveren støtter et stort antall forskjellige datatyper: tekst, numerisk, binær (se tabell).

Her er en rask oversikt over SQL Server-datatyper.

Brukes til å lagre symbolsk informasjon karakterdatatyper, som inkluderer CHAR (lengde), VARCHAR (lengde), NCHAR (lengde), NVARCHAR (lengde). De to siste er for lagring av Unicode-tegn. Maksimal lengde er begrenset til 8000 tegn (4000 for Unicode-tegn).

Stort volum tegndata (opptil 2 GB) lagres ved bruk av tekstdatatyper TEXT og NTEXT.

TIL heltallsdatatyper inkludere INT (INTEGER), SMALLINT, TINYINT, BIGINT. For å lagre heltallsdata er 4 byte (område fra -231 til 231-1), 2 byte (område fra -215 til 215-1), 1 byte (område fra 0 til 255) eller 8 byte (område fra -263) brukt til henholdsvis 263-1). Heltallsobjekter og uttrykk kan brukes i enhver matematisk operasjon.

Tall som inneholder et desimaltegn kalles ikke-heltall. Ikke-heltallsdata er delt inn i to typer - desimal Og tilnærmet.

TIL desimal Datatyper inkluderer DESIMAL [(presisjon[,skala])] eller DEC og NUMERISK [(presisjon[,skala])]. Datatypene DESIMAL og NUMERISK lar deg uavhengig definere presisjonsformatet til et flyttall. Presisjonsparameteren spesifiserer maksimalt antall sifre for inngangsdataene av denne typen (før og etter desimaltegnet i summen), og skalaparameteren spesifiserer maksimalt antall sifre plassert etter desimaltegnet. I normal modus lar serveren deg ikke skrive inn mer enn 28 sifre, brukt i typene DESIMAL og NUMERISK (fra 2 til 17 byte).

TIL tilnærmet Datatyper inkluderer FLOAT (presisjon opptil 15 sifre, 8 byte) og REAL (presisjon opptil 7 sifre, 4 byte). Disse typene representerer data i flyttallformat, dvs. en mantisse og eksponent brukes til å representere tall, og sikrer samme beregningsnøyaktighet uansett hvor liten eller stor verdien er.

For å lagre informasjon om dato og klokkeslett Datatyper som DATETIME og SMALLDATETIME er ment, som bruker 8 og 4 byte for å representere henholdsvis dato og klokkeslett.

MONEY og SMALLMONEY datatyper gjøre det mulig å lagre informasjon av pengetype; de gir verdipresisjon til 4 desimaler og bruker henholdsvis 8 og 4 byte.

BIT-datatype lar deg lagre en bit som kan ta verdiene 0 eller 1.

SQL Server-miljøet implementerer en rekke spesielle datatyper.

Datatype TIDSSTIMPEL brukes som en indikator på en radversjonsendring i en database.

Datatype UNIK IDENTIFIKASJON brukes til å lagre globalt unike identifikasjonsnumre.

Datatype SYSNAME beregnet på objektidentifikatorer.

Datatype SQL_VARIANT lar deg lagre verdier av hvilken som helst av datatypene som støttes av SQL Server med unntak av TEKST, NTEXT, IMAGE og TIMESTAMP.

Datatype BORD, som midlertidige tabeller, gir lagring av et sett med rader beregnet for påfølgende behandling. Datatypen TABLE kan bare brukes til å definere lokale variabler og returnere tilpassede funksjoner verdier.

Datatype MARKØR nødvendig for å jobbe med objekter som markører, og kan bare brukes for variabler og parametere for lagrede prosedyrer. SQL Server-pekere er en mekanisme for å utveksle data mellom en server og en klient. En markør lar klientapplikasjoner ikke fungere med et komplett sett med data, men med bare én eller noen få rader.


©2015-2019 nettsted
Alle rettigheter tilhører deres forfattere. Dette nettstedet krever ikke forfatterskap, men gir gratis bruk.
Opprettelsesdato for side: 2016-08-08

I moderne verden Det finnes et stort antall verktøy og teknologier designet for å lagre informasjon. En av de vanligste metodene er databaser, for å arbeide med hvilke ulike styringssystemer brukes. Denne lagringsmetoden forutsetter at all data er tydelig strukturert og lagt inn i spesielle tabeller. De består på sin side av attributtkolonner av en bestemt datatype.

Datatype - hva er det?

I dag er det flere definisjoner som forklarer konseptet med begrepet "datatype". Imidlertid har hver av dem en generell betydning. Derfor kan det konvensjonelt defineres som en gruppe data preget av dens verdier (karakter, numerisk, etc.), samt operasjonene som brukes på de aktuelle verdiene.

Anvendelsesområdet for datatyper er mangefasettert. De brukes ikke bare til å lagre informasjon, men også i programmering for å løse ulike oppgaver. Når du designer programmer, er det en vanlig praksis å utvikle og bruke dine egne datatyper med et spesifikt sett med operasjoner. Egendefinerte er imidlertid alltid basert på grunnleggende datatyper. SQL-standarden er også basert på bruk av de vanligste grunntypene, men med en rekke spesifikke tillegg.

Klassifisering av datatyper

Gruppering av data etter type oppsto for lenge siden og var forårsaket av behovet for flere praktisk behandling. Foreløpig grunnlaget eksisterende typer Det er to typer data: symbolsk og numerisk.

Basert på dem ble den utviklet moderne klassifisering, som inkluderer datatyper for peker, boolsk, heltall, flytende og streng. SQL - klassifiseringen dekker fullt ut alle de ovennevnte. For noen moderne DBMS-er finnes det imidlertid tilleggsprogrammer. Disse inkluderer Oracle og MySQL.

Grunnleggende datatyper

De som brukes til å lage tabellattributter som oppfyller språkstandarder er delt inn i 4 klasser:

  • strengverdier;
  • fraksjoner;
  • heltallsverdier;
  • dato- og klokkeslettverdier.

Datatype streng

Den første gruppen med verdier lar deg lagre data representert som tegn.

Dette kan være spesialtegn, tall og bokstaver, som sammen vil bli behandlet som strenger i alle datatyper, tabelllisten som presenteres nedenfor, utgjør den første gruppen.

Brukes til å lagre strenger. Parameteren i parentes lar deg fikse lengden på den lagrede strengen. Maksimal størrelse i byte som kan spesifiseres for en streng er 255.

I likhet med den forrige typen lar den deg lagre strenger på opptil 255 tegn. Forskjellen fra CHAR er imidlertid at den nødvendige mengden minne er tildelt for å lagre en verdi av denne typen. Det vil si at en streng bestående av 5 tegn vil kreve 6 byte minne. I det første tilfellet vil minne for verdien tildeles i henhold til den angitte parameteren.

Brukes til å lagre strengdata på opptil 255 tegn.

Brukes til å lagre tekstinformasjon hvis størrelse ikke overstiger 65 535 bokstaver.

Den aktuelle datatypen ligner på TEXT-typen og lar deg lagre den i databasen tekstinformasjon, hvis volum kan nå 65 535 tegn. Men i praksis brukes det til å lagre lyddata, tegninger, elektronisk dokumentasjon m.m.

Den ble utviklet på grunnlag av typen TEXT, men lar deg lagre mer data på grunn av den økte størrelsen opp til 16 777 215 bokstaver eller symboler.

Brukes til å lagre elektroniske dokumenter i databasen, hvis størrelse ikke overstiger 16 777 215 tegn.

Funksjonelt lik tidligere typer, men med økt minnekapasitet på opptil 4 gigabyte.

Lar deg plassere store mengder data i databasen (4 294 967 295 tegn).

ENUM (a, b, c osv.)

En spesiell datatype som brukes til å spesifisere en liste over mulige verdier. Lar deg spesifisere 65535 verdier. Strenger av den aktuelle typen kan ta en enkelt verdi fra de som er spesifisert i settet. I tilfelle det legges til verdier som ikke er til stede i den gitte listen, vil tomme verdier bli skrevet til tabellen.

Angir et sett med gyldige verdier. I motsetning til den forrige typen, brukes den til å inneholde 64 parametere som kan initialiseres av et eller flere elementer fra de gitte argumentene.

Tabell med brøkdatatyper

Fraksjonerte SQL-datatyper brukes til å lagre flyttall. I praksis settes det som regel ulike økonomiske indikatorer. Avhengig av nødvendig nøyaktighet, brukes en av de tre presenterte:

For eksempel, i bankberegninger når nøyaktigheten til brøkdelen 8 eller 10 sifre. De to første typene kan ikke brukes i dette området.

Lagring av økonomiske indikatorer i form av strenger forenkler løsningen av mange problemer. Men når du håndterer økonomiske problemer eller utfører ulike SQL-operasjoner, er datatypekonvertering av stor betydning. Utviklere må være sikre på å vurdere typen lagring og behandlingsmetoder for å sikre at dataene alltid forblir uendret.

Heltallsdatatype

Heltall er en egen gruppe tall som utgjør en av hovedklassene. Heltall SQL datatyper er basert på bruk av en grunnleggende med en viss utvidelse av egenskapene.

Ved å velge riktig datatype kan du spare betydelig minne og redusere servertiden som brukes til å kjøre de nødvendige SQL-spørringene. Datatypene, eller snarere deres rekkevidde, bestemmer mengden lagringsplass som kreves.

Derfor er det viktig for utviklere å huske at bruk store rekkevidder for attributter innebærer en økning i minnekostnader. Det er nødvendig å tydelig analysere problemene som løses og identifisere tilfeller der det omtrentlige området er kjent og betingelsen for bruk av signerte tall er definert. Hvis utvalget av argumenter som brukes er lite og alle tallene er positive, vil det være mer riktig å bruke den usignerte typen som dannes av UNSIGNED-attributtet.

Datatyper for dato og klokkeslett

Når du lærer det grunnleggende om SQL, er datatypene for dato og klokkeslett av spesiell interesse.

Bruk av følgende typer gir ekstra fordeler når du utvikler systemer som er avhengig av timing.

Hovedformålet er å lagre datoen i formatet ÅR-MÅNED-DAG ("ÅÅÅÅ-MM-DD" eller "uuuu-mm-dd"). Vanligvis er verdier atskilt med "-", men alle tegn unntatt tall kan brukes som skilletegn.

Lar deg legge inn midlertidige verdier i en tabellcelle. Alle verdier er spesifisert i formatet "tt:mm:ss"

Kombinerer funksjonene til de to foregående typene. Lagringsformatet presenteres som følger: "uuuu-mm-dd tt:mm:ss".

Lagrer dato og klokkeslett, beregnet av antall sekunder som har gått siden midnatt 1. januar 1970, til den angitte verdien.

Brukes til å lagre årlige verdier i to- eller firesifret format.

Hva annet trenger du å vite?

Alle disse datatypene er systematisert i detalj av Microsoft. Hun utviklet SQL-datatyper mer detaljert.

For eksempel beskriver selskapet i detalj hvor mye minne i byte som tildeles ved bruk av hver type. Etter å ha studert den tilgjengelige informasjonen, er det lettere for utviklere å designe strukturen til tabeller og hele databasen basert på maskinvarefunksjonene til serveren.

Spesialpeker - NULL

Noen ganger, når du fyller en database, oppstår det en situasjon når det ikke er nødvendig å legge inn informasjon i alle kolonner når du legger til en post i en tabell. For dette brukes en spesiell tom verdipeker - NULL, som bruker SQL-språket som hjelpemiddel. Når tabeller opprettes, spesifiseres datatypene for kolonner som ikke må fylles ut med en setning som tillater inkludering av nullverdier. I et annet tilfelle, operatøren NULL Med ekstra vedlegg IKKE kan brukes til å indikere at alle verdier må fylles ut.

Peker NULL har ingen type, men peker ganske enkelt på en tom verdi i databasetabeller. Derfor kan den kombineres med hvilken som helst av de ovennevnte typene.

Alle verdier i en kolonne må være av samme datatype. (Det eneste unntaket fra denne regelen er verdier av datatypen SQL_VARIANT.) Datatypene som brukes i Transact-SQL kan deles inn i følgende kategorier:

    numeriske typer;

    karaktertyper;

    midlertidige typer (datoer og/eller klokkeslett);

    andre datatyper.

Numeriske datatyper

Som du kanskje forventer av navnet deres, brukes numeriske datatyper for å representere tall. Disse typene og deres korte beskrivelser er gitt i tabellen nedenfor:

T-SQL numeriske datatyper
Datatype Beskrivelse
HELTAL

Representerer 4-byte heltallsverdier i området -2 32 til 2 32 - 1. INT er en kort form av INTEGER.

SMALLINT

Representerer 2-byte heltallsverdier i området -32 768 til 32 767

TINYINT

Representerer 1-byte heltallsverdier i området 0 til 255

STORT

Representerer 8 byte lange heltallsverdier i området -2 63 til 2 63 - 1

DESIMAL(p;[s])

Representerer verdier med fast punkt. Argumentet p (presisjon) spesifiserer totalt antall sifre, og argumentet s (skala) spesifiserer antall sifre til høyre for desimaltegnet. Avhengig av verdien til p-argumentet, lagres desimalverdier i 5 til 17 byte. DEC er en kort form for DESIMAL.

NUMERISK(p;[s])

Synonym for DESIMAL.

VIRKELIG

Brukes til å representere flyttallverdier. Utvalget av positive verdier strekker seg fra omtrent 2,23E -308 til -1,18E -38. En nullverdi kan også representeres.

FLYTTE[(p)]

I likhet med REAL-typen, representerer flyttallverdier [(p)]. P-argumentet bestemmer presisjonen. Ved p-verdi< 25 представляемые значения имеют одинарную точность (требуют 4 байта для хранения), а при значении p >= 25 - dobbel presisjon (krever 8 byte for lagring).

PENGER

Brukes til å representere pengeverdier. MONEY-verdier tilsvarer 8-byte DESIMAL-verdier, avrundet til fire desimaler

SMÅPENGER

Representerer de samme verdiene som typen MONEY, men 4 byte lang

Karakterdatatyper

Det er to generelle typer karakterdatatyper. Strenger kan representeres som enkeltbyte-tegn eller Unicode-tegn. (Unicode bruker flere byte for å representere et enkelt tegn.) I tillegg kan strenger ha forskjellig lengde. Tabellen nedenfor viser kategoriene for tegndatatyper med deres korte beskrivelser.

T-SQL-tegndatatyper
Datatype Beskrivelse
CHAR[(n)]

Brukes til å representere strenger med fast lengde som består av n enkeltbyte-tegn. Den maksimale verdien av n er 8000. CHARACTER(n) er en alternativ ekvivalent form av CHAR(n). Hvis n ikke er eksplisitt spesifisert, antas verdien å være 1.

VARCHAR[(n)]

Brukes til å representere en streng med enkeltbyte-tegn med variabel lengde (0< n < 8 000). В отличие от типа данных CHAR, количество байтов для хранения значений типа данных VARCHAR равно их действительной длине. Этот тип данных имеет два синонима: CHAR VARYING и CHARACTER VARYING.

NCHAR[(n)]

Brukes til å lagre strenger med fast lengde som består av Unicode-tegn. Hovedforskjellen mellom CHAR- og NCHAR-datatyper er at en NCHAR-streng krever 2 byte for å lagre hvert tegn, mens en CHAR-streng krever 1 byte. Derfor kan en NCHAR-datatypestreng inneholde maksimalt 4000 tegn. NCHAR-typen kan brukes til å lagre for eksempel tegn i det russiske alfabetet, fordi enkeltbyte-kodinger tillater ikke dette.

NVARCHAR[(n)]

Brukes til å lagre strenger med variabel lengde med Unicode-tegn. Hvert tegn i en NVARCHAR-datatypestreng krever 2 byte å lagre, så en NVARCHAR-datatypestreng kan inneholde maksimalt 4000 tegn.

VARCHAR-datatypen er identisk med CHAR-datatypen, bortsett fra én forskjell: hvis innholdet i en CHAR(n)-streng er kortere enn n tegn, er resten av strengen utfylt med mellomrom. Og antall byte okkupert av en VARCHAR-streng er alltid lik antall tegn i den.

Tidsdatatyper

Transact-SQL støtter følgende midlertidige datatyper:

Datatyper DATETIME Og SMALLDATETIME brukes til å lagre dato og klokkeslett som heltallsverdier på henholdsvis 4 og 2 byte lange. Verdier av typen DATETIME og SMALLDATETIME lagres internt som to separate numeriske verdier. Datokomponenten til verdier av typen DATETIME lagres i området fra 01/01/1753 til 31/12/9999, og den tilsvarende komponenten av verdier av typen SMALLDATETIME lagres i området fra 01/01/1900 til 06.06.2079. Tidskomponenten lagres i et andre 4-byte (2-byte for SMALLDATETIME-verdier)-felt som antall tre hundredeler av et sekund (for DATETIME) eller antall minutter (for SMALLDATETIME) som har gått siden midnatt.

Hvis du bare vil lagre dato- eller klokkeslettkomponenten, er det litt upraktisk å bruke DATETIME eller SMALLDATETIME-verdier. Av denne grunn ble datatyper introdusert i SQL Server DATO Og TID, som bare lagrer dato- og klokkeslettkomponentene til henholdsvis DATETIME-verdier. DATE-verdier opptar 3 byte, som representerer datoområdet fra 01/01/0001 til 31/12/9999. TIME-verdier opptar 3-5 byte og representerer tid med en nøyaktighet på 100 ns.

Datatype DATOTIME2 brukes til å representere dato- og tidsverdier med høy presisjon. Avhengig av kravene, kan verdier av denne typen defineres i forskjellige lengder, og de opptar fra 6 til 8 byte. Tidskomponenten representerer tid til nærmeste 100 ns. Denne datatypen støtter ikke sommertid.

Alle midlertidige datatyper som er diskutert så langt støtter ikke tidssoner. Datatype DATOTIMEOFFSET har en komponent for å lagre tidssoneforskyvningen. Av denne grunn tar verdier av denne typen opp 6 til 8 byte. Alle andre egenskaper for denne datatypen er de samme som for datatypen DATETIME2.

Datoverdier i Transact-SQL er definert som standard som en streng i formatet "mmm dd åååå" (for eksempel "10. januar 1993") omsluttet av enkle eller doble anførselstegn. (Men den relative rekkefølgen av måneds-, dag- og årskomponentene kan endres ved hjelp av instruksjonen ANGI DATOFORMAT. I tillegg støtter systemet numeriske verdier for månedskomponenten og skilletegnene / og -.) På samme måte er tidsverdien spesifisert i 24-timers format som "tt:mm" (for eksempel "22:24") .

Transact-SQL støtter ulike formater for å angi DATETIME-verdier. Som nevnt er hver komponent definert separat, så dato- og tidsverdier kan spesifiseres i hvilken som helst rekkefølge eller separat. Hvis en av komponentene ikke er spesifisert, bruker systemet standardverdien for den. (Standardtiden er 12:00 AM (før middag).)

Binære og bitdatatyper

Det finnes to typer binære datatyper: BINARY og VARBINARY. Disse datatypene beskriver dataobjekter i systemets interne format og brukes til å lagre bitstrenger. Av denne grunn legges verdier av disse typene inn ved hjelp av heksadesimale tall.

Verdier av bittypen inneholder bare én bit, så opptil åtte verdier av denne typen kan lagres i én byte. En kort beskrivelse av egenskapene til binære og bitdatatyper er gitt i tabellen nedenfor:

LOB-datatype

Type LOB-data(Stort objekt - stort objekt) brukes til å lagre dataobjekter på opptil 2 GB. Slike objekter brukes vanligvis til å lagre store mengder tekstdata og til å laste inn plug-ins og lyd- og videofiler. Transact-SQL-språk støtter følgende typer LOB-data:

Fra og med SQL Server 2005 brukes den samme programmeringsmodellen for å få tilgang til verdier for standard datatyper og verdier for LOB-datatyper. Du kan med andre ord bruke praktiske systemfunksjoner og strengoperatorer for å jobbe med LOB-objekter.

I databasemotoren MAX parameter brukes med datatyper VARCHAR, NVARCHAR og VARBINARY for å definere kolonneverdier med variabel lengde. Når standardlengdeverdien MAX brukes i stedet for å spesifisere lengden på en verdi eksplisitt, analyserer systemet lengden spesifikk linje og bestemmer om denne strengen skal lagres som en vanlig verdi eller som en LOB-verdi. MAX-parameteren spesifiserer at størrelsen på kolonneverdier kan være opp til den maksimale LOB-størrelsen til systemet.

Selv om systemet bestemmer hvordan LOB-objekter skal lagres, kan standardinnstillingene overstyres ved å bruke sp_tableoption-systemprosedyren med LARGE_VALUE_TYPES_OUT_OF_ROW-argumentet. Hvis dette argumentet er satt til 1, vil data i kolonner som er deklarert ved hjelp av MAX-parameteren lagres separat fra andre data. Hvis argumentet er 0, lagrer databasemotoren alle verdier opp til 8 060 byte i tabellraden som normale data, og lagrer større verdier utenfor rad i LOB-lagringsområdet.

Fra og med SQL Server 2008 kan du bruke VARBINARY(MAX) for kolonner av typen FILESTREAM-attributt for å lagre data BLOB (Binært stort objekt) direkte i filen NTFS-system. Hovedfordelen med dette attributtet er at størrelsen på det tilsvarende LOB-objektet kun begrenses av størrelsen på filsystemvolumet.

UNIQUEIDENTIFIER datatype

Som navnet antyder, er datatypen UNIQUEIDENTIFIER enkeltverdi identifikasjonsnummer, som er lagret som en 16-byte binær streng. Denne datatypen er nært knyttet til identifikatoren GUID (Globally Unique Identifier - globalt unik identifikator), som garanterer unikhet på global skala. Dermed lar denne datatypen data og objekter identifiseres unikt i distribuerte systemer.

Initialiser en kolonne eller type variabel UNIQUEIDENTIFIER er mulig ved å bruke funksjonen NEWID eller NEWSEQUENTIALID, i tillegg til å bruke strengkonstant et spesielt format som består av heksadesimale sifre og bindestreker. Disse funksjonene diskuteres i neste artikkel.

En kolonne med verdier av datatypen UNIQUEIDENTIFIER kan nås ved å bruke i en spørring søkeord ROWGUIDCOL for å indikere at kolonnen inneholder ID-verdier. (Dette nøkkelordet genererer ingen verdier.) En tabell kan inneholde flere UNIQUEIDENTIFIER-kolonner, men bare én av dem kan ha nøkkelordet ROWGUIDCOL.

Datatype SQL_VARIANT

Datatypen SQL_VARIANT kan brukes til å lagre verdier ulike typer samtidig, for eksempel numeriske verdier, strenger og datoer. (Unntaket er TIMESTAMP-verdier.) Hver SQL_VARIANT-kolonneverdi består av to deler: selve verdien og informasjon som beskriver denne verdien. Denne informasjonen inneholder alle egenskapene til datatypen for faktisk verdi, for eksempel lengde, skala og presisjon.

For å få tilgang til og vise informasjon om verdiene til en kolonne av typen SQL_VARIANT, bruk SQL_VARIANT_PROPERTY-funksjonen.

Du bør bare erklære en kolonnetype som SQL_VARIANT hvis det virkelig er nødvendig. For eksempel, hvis kolonnen er ment å lagre verdier av forskjellige datatyper, eller hvis typen data som vil bli lagret i denne kolonnen er ukjent når du oppretter tabellen.

Datatype HIERARCHYID

HIERARCHYID-datatypen brukes til å lagre et komplett hierarki. For eksempel kan en verdi av denne typen lagre et hierarki av alle ansatte eller et hierarki av mapper. Denne typen er implementert som en CLR brukerdefinert type som dekker flere systemfunksjoner for å lage og arbeide med hierarkienoder. Følgende funksjoner hører blant annet til metoder av denne datatypen: GetLevel(), GetAncestor(), GetDescendant(), Read() og Write().

TIMESTAMP datatype

Datatypen TIMESTAMP spesifiserer en kolonne som er definert som VARBINARY(8) eller BINARY(8) , avhengig av kolonnens nullbarhet. For hver database opprettholder systemet en teller som øker hver gang en rad som inneholder en TIMESTAMP-celle settes inn eller oppdateres, og tildeler den verdien til den cellen. Ved å bruke TIMESTAMP-celler kan du derfor bestemme den relative tiden for den siste endringen av de tilsvarende tabellradene. ( ROWVERSJON er et synonym for TIMESTAMP.)

I seg selv er ikke verdien som er lagret i en TIMESTAMP-kolonne viktig. Denne kolonnen brukes vanligvis til å avgjøre om spesifikk streng tabellen siden forrige gang den ble åpnet.

Oppbevaringsalternativer

Fra og med SQL Server 2008 er det to ulike alternativer lagring, som hver lar deg lagre LOB-objekter og lagre diskplass. Dette er følgende alternativer:

    lagring av data av typen FILESTREAM;

    lagring ved bruk av sparsomme søyler.

Disse lagringsalternativene diskuteres i de følgende underavsnittene.

Lagre FILESTREAM-data

Som nevnt tidligere, støtter SQL Server lagring av store objekter (LOB) gjennom datatypen VARBINARY(MAX). Egenskapen til denne datatypen er at binære store objekter (BLOBs) lagres i databasen. Dette kan forårsake ytelsesproblemer ved lagring av svært store filer, for eksempel lyd- eller videofiler. I slike tilfeller lagres disse dataene utenfor databasen i eksterne filer.

FILESTREAM-datalagring støtter administrasjon av LOB-objekter som er lagret i filsystemet NTFS. Den største fordelen med denne typen lagring er at selv om dataene er lagret utenfor databasen, administreres de av databasen. Dermed har denne lagringstypen følgende egenskaper:

    FILESTREAM-data kan lagres ved hjelp av LAG utsagn TABELL, og for å jobbe med disse dataene kan du bruke instruksjoner for å endre dataene (VELG, INSERT, OPPDATER og SLETT);

    Databasestyringssystemet gir samme sikkerhetsnivå for FILESTREAM-data som for data som er lagret i databasen.

Sparsomme søyler

Hensikten med lagringsalternativet gitt av sparsomme kolonner er vesentlig forskjellig fra formålet med FILESTREAM-lagringstypen. Mens hensikten med FILESTREAM-lagring er å lagre LOB-objekter utenfor databasen, er hensikten med sparsomme kolonner å minimere diskplassen som forbrukes av databasen.

Kolonner av denne typen lar deg optimere lagringen av kolonner hvis majoritetsverdier er null. Når du bruker sparsomme kolonner, krever lagring av nullverdier ikke diskplass, men på den annen side krever lagring av ikke-nullverdier ytterligere 2 til 4 byte, avhengig av typen. Av denne grunn anbefaler Microsoft å bruke sparsomme kolonner kun i tilfeller der det forventes minst 20 % av den totale diskplassbesparelsen.

Sparsomme kolonner er definert på samme måte som andre tabellkolonner; det samme gjelder å adressere dem. Dette betyr at du kan bruke SELECT-, INSERT-, UPDATE- og DELETE-setninger for å få tilgang til sparsomme kolonner på samme måte som du får tilgang til vanlige kolonner. Den eneste forskjellen gjelder opprettelsen av sparsomme kolonner: for å definere en spesifikk kolonne som sparsom, bruk SPARST argument etter kolonnenavnet, som vist i dette eksemplet:

kolonnenavn datatype SPARSE

Flere sparsomme tabellkolonner kan grupperes i et kolonnesett. Dette settet ville være en alternativ måte å lagre og få tilgang til verdier i alle sparsomme kolonner i en tabell.

NULL-verdi

Null er en spesiell verdi som kan tilordnes en tabellcelle. Denne verdien brukes vanligvis når informasjonen i en celle er ukjent eller ikke aktuelt. For eksempel hvis nummeret er ukjent hjemmetelefon bedriftsansatt, anbefales det å sette den tilsvarende cellen i home_telephone-kolonnen til null.

Hvis verdien av en operand av noen aritmetisk uttrykk er null, vil verdien av resultatet av å evaluere dette uttrykket også være null. Derfor i unær aritmetiske operasjoner hvis verdien av uttrykk A er null, returnerer både +A og -A null. I binære uttrykk, hvis verdien av en eller begge operandene A og B er null, vil resultatet av å addere, subtrahere, multiplisere, dele og modulere disse operandene også være null.

Hvis et uttrykk inneholder en sammenligningsoperator og én eller begge operandene er null, vil resultatet av den operasjonen også være null.

Verdien null må være forskjellig fra alle andre verdier. Til numeriske typer dataverdi 0 og null er ikke det samme. Det samme gjelder for tom linje og null for tegndatatyper.

Nullverdier kan bare lagres i en tabellkolonne hvis det er eksplisitt tillatt i kolonnedefinisjonen. På den annen side er nullverdier ikke tillatt for en kolonne med mindre definisjonen eksplisitt sier IKKE NULL. Hvis en kolonne med en datatype (unntatt TIMESTAMP) ikke er eksplisitt spesifisert som NULL eller NOT NULL, blir følgende verdier tildelt:

    NULL hvis parameterverdien ANSI_NULL_DFLT_ON SET-instruksjonen er på.

    NOT NULL hvis ANSI_NULL_DFLT_OFF-parameteren til SET-setningen er på.

Hvis set-setningen ikke er aktivert, vil kolonnen som standard være NOT NULL. (Nullverdier er ikke tillatt for TIMESTAMP-kolonner.)

La oss først se på hva "datatyper" er.
Datatyper bestemmer hvilke verdier som kan lagres i en kolonne og hvor mye plass de vil ta opp i minnet. Når du oppretter en tabell, må du spesifisere en bestemt datatype for alle kolonnene.
Hovedtypene som brukes i SQL kan deles inn i flere kategorier:

  • Heltallstyper;
  • Brøktyper;
  • Karaktertyper;
  • Pengetyper;
  • Tidsmessige typer (dato/klokkeslett);

Heltallsdatatyper

Fraksjonerte datatyper

Karakterdatatype

DatatypeBeskrivelse
CHAR(størrelse)Brukes til å lagre strenger. Parameteren i parentes lar deg fikse lengden på den lagrede strengen. Maksimal størrelse i byte som kan spesifiseres for en streng er 255.
VARCHAR (størrelse)I likhet med den forrige typen lar den deg lagre strenger på opptil 255 tegn. Forskjellen fra CHAR er imidlertid at den nødvendige mengden minne er tildelt for å lagre en verdi av denne typen. Det vil si at en streng bestående av 5 tegn vil kreve 6 byte minne. I det første tilfellet vil minne for verdien tildeles i henhold til den angitte parameteren.
NCHAR(størrelse)Unicode strengdata med konstant lengde. n angir lengden på strengen og må være en verdi mellom 1 og 4000. Lagringsstørrelsen er dobbelt så stor som størrelsen i byte. Det anbefales å bruke nchar hvis størrelsen på dataelementene i kolonnene forventes å være like.
NVARCHAR
(størrelse|maks)
Strengdata med variabel lengde i Unicode. Størrelse angir lengden på strengen og kan ha en verdi fra 1 til 4000. Maksverdien indikerer at maksimal lagringsstørrelse er 2^31-1 tegn (2 GB). Det anbefales å bruke nvarchar hvis størrelsen på dataelementene i kolonnene forventes å være forskjellige.
TEKSTData med variabel lengde er ikke i Unicode i serverkodesiden og med maksimal lengde linje 2^31-1 (2.147.483.647).
NTEXTVariabel lengde Unicode-kodede data med en maksimal linjelengde på 2^30 - 1 (1 073 741 823) byte.

Datatype for valuta

Tidstyper (dato/klokkeslett)

DatatypeBeskrivelse
DATOHovedformålet er å lagre datoen i formatet ÅR-MÅNED-DAG ("ÅÅÅÅ-MM-DD" eller "uuuu-mm-dd").
TIDLar deg legge inn midlertidige verdier i en tabellcelle. Alle verdier er spesifisert i formatet "tt:mm:ss".
DATETIMEKombinerer funksjonene til de to foregående typene. Lagringsformatet presenteres som følger: "uuuu-mm-dd tt:mm:ss".
TIDSSTIMPELLagrer dato og klokkeslett, beregnet av antall sekunder som har gått siden midnatt 1. januar 1970, til den angitte verdien.

Eksempler på bruk av datatyper

La oss se på et eksempel på hvordan du bruker datatyper i SQL.

Et eksempel på bruk av datatyper

MySQL

CREATE TABLE Checks(id INT NOT NULL, Name VARCHAR (50) NOT NULL, DataToDay DATE NOT NULL, Cost FLOAT NOT NULL);

id er en teller (den lagrer det individuelle sjekknummeret), derfor tilhører den heltallstype data, så vi gjør det INT eller HELTAL. IKKE NULL indikerer at variabelen ikke kan være tom.
I Navn Vi vil lagre navnet på produktet. Siden kolonnen vil lagre tegn vi bruker VARCHAR. Etter å ha spesifisert typen, tildeler vi minne for navnet (i vårt tilfelle er det (50) ).
Følgende tabellkolonner er opprettet på lignende måte.