Datatyper brugt i SQL server. SQLite database management system

DEFINITION AF DATASTRUKTUR

Spørgsmål:

1. SQL-datatyper defineret af standarden... 1

2. Datatyper brugt i SQL-serveren. 3

3. Udtryk og variable. 5

4. SQL-kontrolkonstruktioner... 6

5. Grundlæggende objekter i SQL-serverens databasestruktur. 7

SQL-datatyper defineret af standarden

Data er aggregerede oplysninger lagret i en database som en af ​​flere forskellige typer. Datatyper definerer grundreglerne for de data, der er indeholdt i en bestemt tabelkolonne, inklusive mængden af ​​hukommelse, der er allokeret til dem.

Der er seks skalære datatyper i SQL, defineret af standarden. Deres korte beskrivelse er præsenteret i tabellen.

Karakterdata

Tegndata består af en sekvens af tegn, der er inkluderet i et sæt tegn, defineret af skaberne af DBMS. Fordi tegnsæt er specifikke for forskellige dialekter i SQL-sproget, er listen over tegn, der kan inkluderes i tegndataværdier, også implementeringsspecifik. De mest almindeligt anvendte tegnsæt er ASCII og EBCDIC. Følgende format bruges til at definere tegndata:

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

( KARAKTER [ VARIERENDE][længde] | [længde])

Når du definerer en kolonne med en tegndatatype, bruges længdeparameteren til at angive det maksimale antal tegn, der kan placeres i kolonnen (standard er 1). En tegnstreng kan defineres som at have en fast eller VARIERENDE længde. Hvis en streng er defineret med en fast længde af værdier, når der indtastes færre tegn i den, udfyldes værdien til den angivne længde med mellemrum tilføjet til højre. Hvis en streng er defineret med en værdi med variabel længde, så hvis du indtaster færre tegn i den, vil kun de indtastede tegn blive gemt i databasen, hvilket vil give dig mulighed for at opnå nogle besparelser i ekstern hukommelse.

Bit data

Bit type data bruges til at definere bitstrenge, dvs. sekvenser af binære cifre (bits), som hver kan have værdien enten 0 eller 1. Bittypedata defineres ved hjælp af følgende format:

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

BIT [længde]

Præcise tal

Præcis numerisk datatype bruges til at bestemme tal, der har en nøjagtig repræsentation, dvs. tal består af cifre, et valgfrit decimaltegn og et valgfrit tegn. Nøjagtige numeriske typedata bestemmes af nøjagtigheden og længden af ​​brøkdelen. Præcision angiver det samlede antal signifikante decimalcifre i et tal, som inkluderer længden af ​​både heltals- og brøkdelene, men eksklusive selve decimaltegnet. Skalaen angiver antallet af brøkdecimaler i et tal.

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

(NUMERISK[nøjagtighed[,skala]]|(DECIMAL|DEC)

[præcision[, skala]]

| (HELTTAL |INT)| SMALLINT)

Typer NUMERISK Og DECIMAL er designet til at gemme tal i decimalformat. Som standard er længden af ​​brøkdelen nul, og standardpræcisionen er implementeringsafhængig. INTEGER (INT) typen bruges til at gemme store positive eller negative heltal. SMALLINT type – til lagring af små positive eller negative heltal; i dette tilfælde reduceres forbruget af ekstern hukommelse betydeligt.

Afrundede tal

Type af afrundede tal bruges til at beskrive data, der ikke kan repræsenteres nøjagtigt af en computer, især reelle tal. Afrundede eller flydende kommatal er repræsenteret i videnskabelig notation, hvor tallet er skrevet ved hjælp af mantissen ganget med en vis potens af ti (eksponent), for eksempel: 10E3, +5,2E6, -0,2E-4. For at definere data af en reel type, bruges følgende format:

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

( FLOAT [præcision] | ÆGTE |

DOBBELT PRÆCISION)

Parameter nøjagtighed angiver antallet af signifikante cifre i mantissen. Præcisionen af ​​REAL og DOUBLE PRECISION typerne er implementeringsafhængig.

dato og tid

Dato/tid datatype bruges til at bestemme tidspunkter med en vis nøjagtighed. SQL-standarden understøtter følgende format:

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

(DATO | TID[præcision]|

TIMESTAMP[præcision])

DATE-datatypen bruges til at gemme kalenderdatoer, der inkluderer felterne ÅR, MÅNED og DAG. TIME-datatypen er til lagring af tidsstempler, inklusive felterne HOUR (timer), MINUTE (minutter) og SECOND (sekunder). TIMESTAMP datatype – til lagring af dato og klokkeslæt sammen. Præcisionsparameteren angiver antallet af brøkdecimaler, der bestemmer nøjagtigheden af ​​lagring af værdien i feltet SECOND. Hvis denne parameter udelades, er den som standard TIME-kolonner lig med nul(dvs. hele sekunder lagres), mens det for felter af typen TIMESTAMP antages at være lig med 6. Tilstedeværelsen af ​​nøgleordet WITH TIME ZONE bestemmer brugen af ​​felterne TIMEZONE HOUR og TIMEZONE MINUTE, og indstiller derved time- og minutter af zonetidsforskydningen i forhold til den universelle koordinattid (Greenwich Time).

INTERVAL-data bruges til at repræsentere tidsperioder.

Domæne koncept

Domæne– dette er et sæt acceptable værdier for en eller flere attributter. Hvis en databasetabel eller flere tabeller har kolonner, der har de samme karakteristika, kan du beskrive kolonnens type og adfærd i form af et domæne og derefter tildele hver af de samme kolonner et domænenavn. Domænet definerer alle potentielle værdier, der kan tildeles en attribut.

SQL-standarden giver dig mulighed for at definere et domæne ved hjælp af følgende sætning:

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

OPRET DOMÆNE domænenavn

datatype

[Standard værdi]

[CHECK (valid_values)]

Hvert domæne, der oprettes, tildeles et navn, en datatype, en standardværdi og et sæt tilladte værdier. Det skal bemærkes, at det givne erklæringsformat er ufuldstændigt. Nu, når du opretter en tabel, kan du angive et domænenavn i stedet for en datatype.

Fjernelse af domæner fra databasen udføres ved hjælp af operatoren:

SLIP DOMÆNE domænenavn [ RESTRICT |

Hvis du angiver nøgleordet CASCADE, vil eventuelle tabelkolonner, der er oprettet ved hjælp af det domæne, der slettes, automatisk blive ændret til at indeholde data af den type, der blev angivet i definitionen af ​​det domæne, der slettes.

Et alternativ til domæner i miljøet SQL Server er tilpassede datatyper.

Datatyper brugt i SQL server

Systemdatatyper

Et af hovedpunkterne i tabeloprettelsesprocessen er at bestemme datatyperne for dets felter. Datatypen for et tabelfelt bestemmer typen af ​​information, der placeres i det pågældende felt. Konceptet med en datatype i SQL Server svarer fuldstændig til konceptet med en datatype i moderne sprog programmering. SQL server understøtter et stort antal forskellige datatyper: tekst, numerisk, binær (se tabel).

Her er et hurtigt overblik over SQL Server-datatyper.

De bruges til at gemme symbolsk information karakterdatatyper, som omfatter CHAR (længde), VARCHAR (længde), NCHAR (længde), NVARCHAR (længde). De sidste to er til lagring af Unicode-tegn. Den maksimale længde er begrænset til 8000 tegn (4000 for Unicode-tegn).

Stort volumen tegndata (op til 2 GB) gemmes ved hjælp af tekstdatatyperne TEXT og NTEXT.

TIL heltals datatyper inkludere INT (INTEGER), SMALLINT, TINYINT, BIGINT. For at gemme heltalsdata er 4 bytes (interval fra -231 til 231-1), 2 bytes (interval fra -215 til 215-1), 1 byte (interval fra 0 til 255) eller 8 bytes (interval fra -263) bruges henholdsvis til 263-1). Heltalsobjekter og -udtryk kan bruges i enhver matematisk operation.

Tal, der indeholder et decimaltegn, kaldes ikke-heltal. Ikke-heltalsdata er opdelt i to typer - decimal Og omtrentlig.

TIL decimal Datatyper omfatter DECIMAL [(præcision[,skala])] eller DEC og NUMERISK [(præcision[,skala])]. Datatyperne DECIMAL og NUMERIC giver dig mulighed for uafhængigt at definere præcisionsformatet for et flydende kommatal. Præcisionsparameteren angiver det maksimale antal cifre for inputdata af denne type (før og efter decimaltegnet i totalen), og skalaparameteren angiver det maksimale antal cifre placeret efter decimaltegnet. I normal tilstand giver serveren dig mulighed for at indtaste maksimalt 28 cifre, der bruges i typerne DECIMAL og NUMERISK (fra 2 til 17 bytes).

TIL omtrentlig Datatyper omfatter FLOAT (præcision op til 15 cifre, 8 bytes) og REAL (præcision op til 7 cifre, 4 bytes). Disse typer repræsenterer data i flydende kommaformat, dvs. en mantisse og eksponent bruges til at repræsentere tal, hvilket sikrer den samme præcision i beregninger, uanset hvor lille eller stor værdien er.

Til at gemme oplysninger om dato og tid Datatyper såsom DATETIME og SMALLDATETIME er beregnet, som bruger 8 og 4 bytes til at repræsentere henholdsvis dato og klokkeslæt.

MONEY og SMALLMONEY datatyper gøre det muligt at opbevare information af monetær art; de giver værdipræcision til 4 decimaler og bruger henholdsvis 8 og 4 bytes.

BIT datatype giver dig mulighed for at gemme en bit, der kan tage værdierne 0 eller 1.

SQL Server-miljøet implementerer en række særlige datatyper.

Datatype TIDSSTEMPEL bruges som en indikator for en rækkeversionsændring i en database.

Datatype UNIK IDENTIFIKATION bruges til at gemme globalt unikke identifikationsnumre.

Datatype SYSNAME beregnet til objektidentifikatorer.

Datatype SQL_VARIANT giver dig mulighed for at gemme værdier af enhver af de datatyper, der understøttes af SQL Server med undtagelse af TEKST, NTEXT, BILLEDE og TIMESTAMP.

Datatype BORD, ligesom midlertidige tabeller, giver opbevaring til et sæt rækker beregnet til efterfølgende behandling. TABLE-datatypen kan kun bruges til at definere lokale variabler og returnere brugerdefinerede funktioner værdier.

Datatype CURSOREN nødvendig for at arbejde med objekter såsom markører, og kan kun bruges til variabler og parametre for lagrede procedurer. SQL Server-markører er en mekanisme til udveksling af data mellem en server og en klient. En markør gør det muligt for klientapplikationer ikke at arbejde med et komplet sæt data, men med kun én eller nogle få rækker.


©2015-2019 websted
Alle rettigheder tilhører deres forfattere. Dette websted gør ikke krav på forfatterskab, men giver gratis brug.
Sidens oprettelsesdato: 2016-08-08

I moderne verden Der er et stort antal værktøjer og teknologier designet til lagring af information. En af de mest almindelige metoder er databaser, til at arbejde med, hvor der bruges forskellige ledelsessystemer. Denne lagringsmetode forudsætter, at alle data er klart strukturerede og indtastet i specielle tabeller. De består til gengæld af attributkolonner af en bestemt datatype.

Datatype - hvad er det?

I dag er der flere definitioner, der forklarer begrebet "datatype". Men hver af dem har en generel betydning. Derfor kan det konventionelt defineres som en gruppe af data, der er karakteriseret ved dens værdier (symbolske, numeriske osv.), samt de operationer, der anvendes på de pågældende værdier.

Anvendelsesområdet for datatyper er mangefacetteret. De bruges ikke kun til lagring af information, men også i programmering til at løse forskellige opgaver. Når du designer programmer, er det almindelig praksis at udvikle og bruge dine egne datatyper med et specifikt sæt operationer. Brugerdefinerede er dog altid baseret på grundlæggende datatyper. SQL-standarden er også baseret på brugen af ​​de mest almindelige grundtyper, men med en række specifikke tilføjelser.

Klassificering af datatyper

Gruppering af data efter type opstod for længe siden og var forårsaget af behovet for flere bekvem behandling. I øjeblikket grundlaget eksisterende typer Der er to typer data: symbolsk og numerisk.

Baseret på dem blev det udviklet moderne klassifikation, som inkluderer datatyperne pointer, boolean, heltal, float og streng. SQL - klassificeringen dækker fuldt ud alle ovenstående. For nogle moderne DBMS'er er der dog yderligere tilføjelser. Disse omfatter Oracle og MySQL.

Grundlæggende datatyper

De, der bruges til at oprette tabelattributter, der opfylder sprogstandarder, er opdelt i 4 klasser:

  • strengværdier;
  • fraktioner;
  • heltalsværdier;
  • dato og klokkeslæt værdier.

Streng datatype

Den første gruppe af værdier giver dig mulighed for at gemme alle data repræsenteret som tegn.

Disse kan være specialtegn, tal og bogstaver, som tilsammen vil blive behandlet som strenge i alle datatyper, tabellisten, som præsenteres nedenfor, danner den første gruppe.

Bruges til at opbevare strenge. Parameteren i parentes giver dig mulighed for at fastsætte længden af ​​den lagrede streng. Den maksimale størrelse i bytes, der kan angives for en streng, er 255.

I lighed med den tidligere type giver den dig mulighed for at gemme strenge på op til 255 tegn lange. Forskellen fra CHAR er dog, at den nødvendige mængde hukommelse er allokeret til at lagre en værdi af denne type. Det vil sige, at en streng bestående af 5 tegn vil kræve 6 bytes hukommelse. I det første tilfælde vil hukommelsen for værdien blive tildelt i henhold til den angivne parameter.

Bruges til at gemme strengdata på op til 255 tegn.

Bruges til at gemme tekstinformation, hvis størrelse ikke overstiger 65.535 bogstaver.

Den pågældende datatype ligner TEXT-typen og giver dig mulighed for at gemme den i databasen tekstoplysninger, hvis volumen kan nå op på 65.535 tegn. Men i praksis bruges det til at opbevare lyddata, tegninger, elektronisk dokumentation mv.

Den er udviklet på basis af typen TEXT, men giver dig mulighed for at gemme flere data på grund af dens øgede størrelse op til 16.777.215 bogstaver eller symboler.

Bruges til at gemme elektroniske dokumenter i databasen, hvis størrelse ikke overstiger 16.777.215 tegn.

Funktionelt ligner tidligere typer, men med øget hukommelseskapacitet op til 4 gigabyte.

Giver dig mulighed for at placere store mængder data i databasen (4.294.967.295 tegn).

ENUM (a, b, c osv.)

En speciel datatype, der bruges til at angive en liste over mulige værdier. Giver dig mulighed for at angive 65535 værdier. Strenge af den pågældende type kan tage en enkelt værdi fra dem, der er angivet i sættet. I tilfælde af at der tilføjes værdier, som ikke er til stede på den givne liste, vil tomme værdier blive skrevet til tabellen.

Angiver et sæt gyldige værdier. I modsætning til den tidligere type, bruges den til at indeholde 64 parametre, der kan initialiseres af et hvilket som helst eller flere elementer fra de givne argumenter.

Tabel med brøkdatatyper

Fraktionerede SQL-datatyper bruges til at gemme flydende kommatal. I praksis opstilles der som udgangspunkt forskellige finansielle indikatorer. Afhængigt af den nødvendige nøjagtighed bruges en af ​​de tre præsenterede:

For eksempel når nøjagtigheden af ​​brøkdelen i bankberegninger 8 eller 10 cifre. De to første typer kan ikke bruges på dette område.

Lagring af finansielle indikatorer i form af strenge forenkler i høj grad løsningen af ​​mange problemer. Men når man håndterer økonomiske problemer eller udfører forskellige SQL-operationer, er datatypekonvertering af stor betydning. Udviklere skal være sikre på at overveje typen af ​​lagring og behandlingsmetoder for at sikre, at dataene altid forbliver uændrede.

Heltalsdatatype

Heltal er en separat gruppe af tal, der udgør en af ​​hovedklasserne. Heltal SQL datatyper er baseret på brugen af ​​en grundlæggende med en vis udvidelse af dens egenskaber.

Ved at vælge den rigtige datatype kan du spare betydelig hukommelse og reducere serverens tid brugt på at køre de nødvendige SQL-forespørgsler. Datatyperne, eller rettere deres rækkevidde, bestemmer mængden af ​​krævet lagerplads.

Derfor er det vigtigt for udviklere at huske at bruge store intervaller for attributter medfører en stigning i hukommelsesomkostninger. Det er nødvendigt klart at analysere de problemer, der løses, og identificere tilfælde, hvor det omtrentlige interval er kendt, og betingelsen for at bruge signerede tal er defineret. Hvis rækken af ​​anvendte argumenter er lille, og alle tal er positive, ville det være mere korrekt at bruge den usignerede type, der dannes af UNSIGNED-attributten.

Dato og tid Datatyper

Når du lærer det grundlæggende i SQL, er datatyperne for dato og klokkeslæt af særlig interesse.

Brug af følgende typer giver yderligere fordele ved udvikling af systemer, der afhænger af timing.

Hovedformålet er at gemme datoen i formatet ÅR-MÅNED-DAG ("ÅÅÅÅ-MM-DD" eller "uuuu-mm-dd"). Typisk er værdier adskilt af "-", men ethvert tegn undtagen tal kan bruges som separator.

Giver dig mulighed for at indtaste midlertidige værdier i en tabelcelle. Alle værdier er angivet i formatet "tt:mm:ss"

Kombinerer funktionerne fra de to foregående typer. Lagringsformatet præsenteres som følger: "uuuu-mm-dd tt:mm:ss".

Gemmer dato og klokkeslæt, beregnet ved antallet af sekunder, der er gået siden midnat den 1. januar 1970, indtil den angivne værdi.

Bruges til at gemme årlige værdier i to- eller firecifret format.

Hvad skal du ellers vide?

Alle disse datatyper er systematiseret i detaljer af Microsoft. Hun udviklede SQL-datatyper mere detaljeret.

For eksempel beskriver virksomheden i detaljer, hvor meget hukommelse i bytes der tildeles ved brug af hver type. Efter at have studeret de tilgængelige oplysninger er det lettere for udviklere at designe strukturen af ​​tabeller og hele databasen baseret på serverens hardwarefunktioner.

Speciel pointer - NULL

Nogle gange, når du udfylder en database, opstår der en situation, hvor der ikke er behov for at indtaste oplysninger i alle kolonner, når du tilføjer en post til en tabel. Til dette bruges en speciel tom værdipointer - NUL, som bruger SQL-sproget som en hjælp. Når der oprettes tabeller, specificeres datatyperne for kolonner, der ikke skal udfyldes, med en sætning, der tillader medtagelse af nulværdier. I et andet tilfælde operatøren NUL Med ekstra vedhæftning IKKE kan bruges til at angive, at alle værdier skal udfyldes.

Pointer NUL har ingen type, men peger blot på en tom værdi i databasetabeller. Derfor kan den kombineres med enhver af ovenstående typer.

Alle værdier i en kolonne skal være af samme datatype. (Den eneste undtagelse fra denne regel er værdier af datatypen SQL_VARIANT.) Datatyperne, der bruges i Transact-SQL, kan opdeles i følgende kategorier:

    numeriske typer;

    tegntyper;

    midlertidige typer (datoer og/eller tidspunkter);

    andre datatyper.

Numeriske datatyper

Som du kunne forvente af deres navn, bruges numeriske datatyper til at repræsentere tal. Disse typer og deres korte beskrivelser er angivet i tabellen nedenfor:

T-SQL numeriske datatyper
Datatype Beskrivelse
HELTAL

Repræsenterer 4-byte heltalsværdier i området -2 32 til 2 32 - 1. INT er en kort form for INTEGER.

SMALLINT

Repræsenterer 2-byte heltalværdier i området -32.768 til 32.767

TINYINT

Repræsenterer 1-byte heltalværdier i området 0 til 255

STORT

Repræsenterer 8 byte lange heltalværdier i området -2 63 til 2 63 - 1

DECIMAL(p;[s])

Repræsenterer værdier med fast punkt. Argumentet p (præcision) angiver det samlede antal cifre, og argumentet s (skala) angiver antallet af cifre til højre for decimaltegnet. Afhængigt af værdien af ​​p-argumentet gemmes decimalværdier i 5 til 17 bytes. DEC er en kort form for DECIMAL.

NUMERISK(p;[s])

Synonym for DECIMAL.

ÆGTE

Bruges til at repræsentere flydende kommaværdier. Rækken af ​​positive værdier strækker sig fra cirka 2,23E -308 til -1,18E -38. En nulværdi kan også repræsenteres.

FLYDE[(p)]

Ligesom den REAL type, repræsenterer flydende komma værdier [(p)]. P-argumentet bestemmer præcisionen. Ved p-værdi< 25 представляемые значения имеют одинарную точность (требуют 4 байта для хранения), а при значении p >= 25 - dobbelt præcision (kræver 8 bytes til lagring).

PENGE

Bruges til at repræsentere pengeværdier. MONEY-værdier svarer til 8-byte DECIMAL-værdier, afrundet til fire decimaler

SMÅPENGE

Repræsenterer de samme værdier som MONEY-typen, men 4 bytes lang

Karakterdatatyper

Der er to generelle typer karakterdatatyper. Strenge kan repræsenteres som enkeltbyte-tegn eller Unicode-tegn. (Unicode bruger flere bytes til at repræsentere et enkelt tegn.) Derudover kan strenge være af forskellig længde. Tabellen nedenfor viser kategorierne af karakterdatatyper med deres korte beskrivelser.

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

Bruges til at repræsentere strenge med fast længde bestående af n enkeltbyte-tegn. Den maksimale værdi af n er 8000. CHARACTER(n) er en alternativ ækvivalent form af CHAR(n). Hvis n ikke er eksplicit angivet, antages dens værdi at være 1.

VARCHAR[(n)]

Bruges til at repræsentere en streng af variabel længde enkelt-byte-tegn (0< n < 8 000). В отличие от типа данных CHAR, количество байтов для хранения значений типа данных VARCHAR равно их действительной длине. Этот тип данных имеет два синонима: CHAR VARYING и CHARACTER VARYING.

NCHAR[(n)]

Bruges til at gemme strenge med fast længde bestående af Unicode-tegn. Den største forskel mellem CHAR- og NCHAR-datatyper er, at en NCHAR-streng kræver 2 bytes for at gemme hvert tegn, mens en CHAR-streng kræver 1 byte. Derfor kan en NCHAR-datatypestreng højst indeholde 4000 tegn. NCHAR-typen kan bruges til at gemme for eksempel tegn i det russiske alfabet, fordi enkeltbyte-kodninger tillader ikke dette.

NVARCHAR[(n)]

Bruges til at gemme strenge med variabel længde af Unicode-tegn. Hvert tegn i en NVARCHAR-datatypestreng kræver 2 bytes at gemme, så en NVARCHAR-datatypestreng kan højst indeholde 4000 tegn.

VARCHAR-datatypen er identisk med CHAR-datatypen, bortset fra én forskel: Hvis indholdet af en CHAR(n)-streng er kortere end n tegn, er resten af ​​strengen udfyldt med mellemrum. Og antallet af bytes optaget af en VARCHAR-streng er altid lig med antallet af tegn i den.

Tidsdatatyper

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

Datatyper DATO TID Og SMALLDATETIME bruges til at gemme dato og klokkeslæt som heltalværdier på henholdsvis 4 og 2 bytes i længden. Værdier af typen DATETIME og SMALLDATETIME gemmes internt som to separate numeriske værdier. Datokomponenten af ​​værdier af typen DATETIME lagres i intervallet fra 01/01/1753 til 31/12/9999, og den tilsvarende komponent af værdier af typen SMALLDATETIME lagres i området fra 01/01/1900 til 06/06/2079. Tidskomponenten gemmes i et andet 4-byte (2-byte for SMALLDATETIME-værdier) felt som antallet af tre hundrededele af et sekund (for DATETIME) eller antallet af minutter (for SMALLDATETIME), der er gået siden midnat.

Hvis du kun ønsker at gemme dato- eller tidskomponenten, er det noget ubelejligt at bruge DATETIME eller SMALLDATETIME værdier. Af denne grund blev datatyper introduceret i SQL Server DATO Og TID, som kun gemmer dato- og tidskomponenterne for henholdsvis DATETIME-værdier. DATE-værdier optager 3 bytes, der repræsenterer datointervallet fra 01/01/0001 til 31/12/9999. TIME-værdier optager 3-5 bytes og repræsenterer tid med en nøjagtighed på 100 ns.

Datatype DATOTIME2 bruges til at repræsentere dato- og tidsværdier med høj præcision. Afhængigt af kravene kan værdier af denne type defineres i forskellige længder, og de optager fra 6 til 8 bytes. Tidskomponenten repræsenterer tid til nærmeste 100 ns. Denne datatype understøtter ikke sommertid.

Alle midlertidige datatyper, der er diskuteret indtil videre, understøtter ikke tidszoner. Datatype DATOTIMEOFFSET har en komponent til at gemme tidszoneforskydningen. Af denne grund fylder værdier af denne type 6 til 8 bytes. Alle andre egenskaber for denne datatype er de samme som dem for datatypen DATETIME2.

Datoværdier i Transact-SQL er som standard defineret som en streng i formatet "mmm dd åååå" (f.eks. "10. januar 1993") omgivet af enkelte eller dobbelte anførselstegn. (Men den relative rækkefølge af komponenterne måned, dag og år kan ændres ved hjælp af instruktionen SÆT DATOFORMAT. Derudover understøtter systemet numeriske værdier for månedskomponenten og afgrænsningerne / og -.) På samme måde er tidsværdien angivet i 24-timers format som "tt:mm" (f.eks. "22:24") .

Transact-SQL understøtter forskellige formater til indtastning af DATETIME-værdier. Som nævnt er hver komponent defineret separat, så dato- og tidsværdier kan angives i enhver rækkefølge eller separat. Hvis en af ​​komponenterne ikke er angivet, bruger systemet standardværdien for den. (Standardtidspunktet er 12:00 AM (før middag).)

Binære og bitdatatyper

Der er to typer binære datatyper: BINARY og VARBINARY. Disse datatyper beskriver dataobjekter i systemets interne format og bruges til at gemme bitstrenge. Af denne grund indtastes værdier af disse typer ved hjælp af hexadecimale tal.

Værdier af bittypen indeholder kun én bit, så op til otte værdier af denne type kan gemmes i én byte. En kort beskrivelse af egenskaberne for binære og bitdatatyper er givet i nedenstående tabel:

LOB-datatype

Type LOB data(Stort objekt - stort objekt) bruges til at gemme dataobjekter op til 2 GB i størrelse. Sådanne objekter bruges typisk til at gemme store mængder tekstdata og til at indlæse plug-ins og lyd- og videofiler. Transact-SQL sprog understøtter følgende typer LOB-data:

Fra og med SQL Server 2005 bruges den samme programmeringsmodel til at få adgang til værdier af standarddatatyper og værdier af LOB-datatyper. Med andre ord kan du bruge praktiske systemfunktioner og strengoperatorer til at arbejde med LOB-objekter.

I databasemotoren MAX parameter bruges sammen med datatyperne VARCHAR, NVARCHAR og VARBINARY til at definere kolonneværdier med variabel længde. Når standardlængdeværdien MAX bruges i stedet for eksplicit at angive længden af ​​en værdi, analyserer systemet længden specifik linje og beslutter, om denne streng skal gemmes som en almindelig værdi eller som en LOB-værdi. MAX-parameteren angiver, at størrelsen af ​​kolonneværdier kan være op til systemets maksimale LOB-størrelse.

Selvom systemet bestemmer, hvordan LOB-objekter gemmes, kan standardindstillingerne tilsidesættes ved at bruge sp_tableoption-systemproceduren med LARGE_VALUE_TYPES_OUT_OF_ROW-argumentet. Hvis dette argument er sat til 1, vil data i kolonner, der er erklæret ved hjælp af MAX-parameteren, blive lagret adskilt fra andre data. Hvis argumentet er 0, gemmer Database Engine alle værdier op til 8.060 bytes i tabelrækken som normale data, og gemmer større værdier off-row i LOB-lagerområdet.

Fra og med SQL Server 2008 kan du bruge VARBINARY(MAX) til kolonner af typen FILESTREAM-attribut at gemme data BLOB (Binært stort objekt) direkte i filen NTFS system. Den største fordel ved denne attribut er, at størrelsen af ​​det tilsvarende LOB-objekt kun er begrænset af størrelsen på filsystemets volumen.

UNIQUEIDENTIFIER datatype

Som navnet antyder, er datatypen UNIQUEIDENTIFIER enkeltværdi identifikationsnummer, som er gemt som en 16-byte binær streng. Denne datatype er tæt forbundet med identifikatoren GUID (Globally Unique Identifier - globalt unik identifikator), som garanterer unikhed på globalt plan. Denne datatype tillader således data og objekter at blive entydigt identificeret i distribuerede systemer.

Initialiser en kolonne eller type variabel UNIQUEIDENTIFIER er muligt ved at bruge funktionen NEWID eller NEWSEQUENTIALID, såvel som ved at bruge strengkonstant et særligt format bestående af hexadecimale cifre og bindestreger. Disse funktioner diskuteres i den næste artikel.

En kolonne med værdier af datatypen UNIQUEIDENTIFIER kan tilgås ved hjælp af en forespørgsel søgeord ROWGUIDCOL for at angive, at kolonnen indeholder ID-værdier. (Dette nøgleord genererer ingen værdier.) En tabel kan indeholde flere UNIQUEIDENTIFIER-kolonner, men kun én af dem kan have nøgleordet ROWGUIDCOL.

Datatype SQL_VARIANT

SQL_VARIANT-datatypen kan bruges til at gemme værdier forskellige typer samtidigt, såsom numeriske værdier, strenge og datoer. (Undtagelsen er TIMESTAMP-værdier.) Hver SQL_VARIANT-kolonneværdi består af to dele: selve værdien og oplysninger, der beskriver denne værdi. Disse oplysninger indeholder alle egenskaberne for den faktiske værdi datatype, såsom længde, skala og præcision.

For at få adgang til og vise information om værdierne af en kolonne af typen SQL_VARIANT, skal du bruge funktionen SQL_VARIANT_PROPERTY.

Du bør kun erklære en kolonnetype som SQL_VARIANT, hvis det virkelig er nødvendigt. For eksempel, hvis kolonnen er beregnet til at gemme værdier af forskellige datatyper, eller hvis typen af ​​data, der vil blive gemt i denne kolonne, er ukendt, når tabellen oprettes.

Datatype HIERARCHYID

HIERARCHYID-datatypen bruges til at gemme et komplet hierarki. For eksempel kan en værdi af denne type gemme et hierarki af alle medarbejdere eller et hierarki af mapper. Denne type er implementeret som en CLR brugerdefineret type, der dækker flere systemfunktioner til at skabe og arbejde med hierarkiske noder. Følgende funktioner hører blandt andet til metoder af denne datatype: GetLevel(), GetAncestor(), GetDescendant(), Read() og Write().

TIMESTAMP datatype

Datatypen TIMESTAMP angiver en kolonne, der er defineret som VARBINARY(8) eller BINARY(8) , afhængigt af kolonnens nulstilling. For hver database vedligeholder systemet en tæller, der stiger hver gang en række, der indeholder en TIMESTAMP-celle, indsættes eller opdateres, og tildeler denne værdi til den pågældende celle. Ved hjælp af TIMESTAMP-celler kan du således bestemme den relative tid for den sidste ændring af de tilsvarende tabelrækker. ( ROWVERSION er et synonym for TIMESTAMP.)

I sig selv er værdien, der er gemt i en TIMESTAMP-kolonne, ikke vigtig. Denne kolonne bruges typisk til at bestemme, om specifik streng tabellen siden sidste gang, den blev åbnet.

Opbevaringsmuligheder

Fra og med SQL Server 2008 er der to forskellige muligheder storage, som hver især giver dig mulighed for at gemme LOB-objekter og gemme diskplads. Disse er følgende muligheder:

    lagring af data af typen FILESTREAM;

    opbevaring ved hjælp af sparsomme søjler.

Disse opbevaringsmuligheder diskuteres i de følgende underafsnit.

Lagring af FILESTREAM-data

Som tidligere nævnt understøtter SQL Server store objekt (LOB) lagring gennem datatypen VARBINARY(MAX). Egenskaben ved denne datatype er, at binære store objekter (BLOB'er) er gemt i databasen. Dette kan forårsage ydeevneproblemer ved lagring af meget store filer, såsom lyd- eller videofiler. I sådanne tilfælde lagres disse data uden for databasen i eksterne filer.

FILESTREAM datalagring understøtter håndteringen af ​​LOB-objekter, der er gemt i filsystem NTFS. Den største fordel ved denne type lagring er, at selvom dataene er lagret uden for databasen, administreres de af databasen. Denne lagertype har således følgende egenskaber:

    FILESTREAM-data kan gemmes vha OPRET udsagn TABEL, og for at arbejde med disse data kan du bruge instruktioner til at ændre dataene (SELECT, INSERT, UPDATE og DELETE);

    Databasestyringssystemet giver samme sikkerhedsniveau for FILESTREAM-data som for data, der er gemt i databasen.

Sparsomme søjler

Formålet med lagringsmuligheden fra sparsomme kolonner er væsentligt forskelligt fra formålet med FILESTREAM-lagringstypen. Mens formålet med FILESTREAM-lagring er at gemme LOB-objekter uden for databasen, er formålet med sparsomme kolonner at minimere den diskplads, der forbruges af databasen.

Kolonner af denne type giver dig mulighed for at optimere lagringen af ​​kolonner, hvis majoritetsværdier er nul. Når du bruger sparsomme kolonner, kræver lagring af null-værdier ikke diskplads, men på den anden side kræver lagring af ikke-null-værdier yderligere 2 til 4 bytes, afhængigt af deres type. Af denne grund anbefaler Microsoft kun at bruge sparsomme kolonner i tilfælde, hvor der forventes mindst 20 % af den samlede diskpladsbesparelse.

Sparsomme kolonner er defineret på samme måde som andre tabelkolonner; det samme gælder for at adressere dem. Det betyder, at du kan bruge SELECT-, INSERT-, UPDATE- og DELETE-sætninger til at få adgang til sparsomme kolonner på samme måde, som du får adgang til almindelige kolonner. Den eneste forskel vedrører oprettelsen af ​​sparsomme kolonner: for at definere en specifik kolonne som sparsom, brug SPARST argument efter kolonnenavnet, som vist i dette eksempel:

kolonnenavn datatype SPARSE

Flere sparsomme tabelkolonner kan grupperes i et kolonnesæt. Dette sæt ville være en alternativ måde at gemme og få adgang til værdier i alle sparsomme kolonner i en tabel.

NULL værdi

Null er en speciel værdi, der kan tildeles en tabelcelle. Denne værdi bruges typisk, når informationen i en celle er ukendt eller ikke anvendelig. For eksempel hvis nummeret er ukendt hjemmetelefon virksomhedsmedarbejder, anbefales det at indstille den tilsvarende celle i kolonnen home_telephone til null.

Hvis værdien af ​​en operand af enhver aritmetisk udtryk er null, vil værdien af ​​resultatet af evalueringen af ​​dette udtryk også være null. Derfor i unær aritmetiske operationer hvis værdien af ​​udtryk A er nul, så returnerer både +A og -A null. I binære udtryk, hvis værdien af ​​en eller begge operander A og B er nul, så vil resultatet af at addere, subtrahere, multiplicere, dividere og modulere disse operander også være nul.

Hvis et udtryk indeholder en sammenligningsoperator, og en eller begge dets operander er null, vil resultatet af denne operation også være null.

Værdien null skal være forskellig fra alle andre værdier. Til numeriske typer dataværdi 0 og null er ikke det samme. Det samme gælder for tom linje og null for tegndatatyper.

Nullværdier kan kun gemmes i en tabelkolonne, hvis det udtrykkeligt er tilladt i kolonnedefinitionen. På den anden side er null-værdier ikke tilladt for en kolonne, medmindre dens definition udtrykkeligt angiver IKKE NULL. Hvis en kolonne med en datatype (andre end TIMESTAMP) ikke udtrykkeligt er angivet som NULL eller NOT NULL, tildeles følgende værdier:

    NULL hvis parameterværdien ANSI_NULL_DFLT_ON SET-instruktionen er tændt.

    NOT NULL, hvis parameteren ANSI_NULL_DFLT_OFF i SET-sætningen er slået til.

Hvis set-sætningen ikke er aktiveret, vil kolonnen som standard være NOT NULL. (Nul-værdier er ikke tilladt for TIMESTAMP-kolonner.)

Lad os først se på, hvad "datatyper" er.
Datatyper bestemmer, hvilke værdier der kan gemmes i en kolonne, og hvor meget hukommelse de vil optage. Når du opretter en tabel, skal du angive en specifik datatype for alle dens kolonner.
De vigtigste typer, der bruges i SQL, kan opdeles i flere kategorier:

  • Heltalstyper;
  • Fraktionelle typer;
  • Karaktertyper;
  • Pengetyper;
  • Tidsmæssige typer (dato/tid);

Heltalsdatatyper

Fraktionerede datatyper

Karakterdatatype

DatatypeBeskrivelse
CHAR(størrelse)Bruges til at opbevare strenge. Parameteren i parentes giver dig mulighed for at fastsætte længden af ​​den lagrede streng. Den maksimale størrelse i bytes, der kan angives for en streng, er 255.
VARCHAR (størrelse)I lighed med den tidligere type giver den dig mulighed for at gemme strenge på op til 255 tegn lange. Forskellen fra CHAR er dog, at den nødvendige mængde hukommelse er allokeret til at lagre en værdi af denne type. Det vil sige, at en streng bestående af 5 tegn vil kræve 6 bytes hukommelse. I det første tilfælde vil hukommelsen for værdien blive tildelt i henhold til den angivne parameter.
NCHAR(størrelse)Strengdata med konstant længde i Unicode. n angiver længden af ​​strengen og skal være en værdi mellem 1 og 4000. Lagerstørrelsen er dobbelt så stor som størrelsen i bytes. Det anbefales at bruge nchar, hvis størrelsen af ​​dataelementerne i kolonnerne forventes at være ens.
NVARCHAR
(størrelse|maks.)
Strengdata med variabel længde i Unicode. Størrelse angiver længden af ​​strengen og kan have en værdi fra 1 til 4000. Den maksimale værdi angiver, at den maksimale lagerstørrelse er 2^31-1 tegn (2 GB). Det anbefales at bruge nvarchar, hvis størrelsen af ​​dataelementerne i kolonnerne forventes at være anderledes.
TEKSTData med variabel længde er ikke i Unicode i serverens tegntabel og med maksimal længde linje 2^31-1 (2.147.483.647).
NTEXTVariabel længde Unicode-kodede data med en maksimal linjelængde på 2^30 - 1 (1.073.741.823) bytes.

Valutadatatype

Tidstyper (dato/tid)

DatatypeBeskrivelse
DATOHovedformålet er at gemme datoen i formatet ÅR-MÅNED-DAG ("ÅÅÅÅ-MM-DD" eller "uuuu-mm-dd").
TIDGiver dig mulighed for at indtaste midlertidige værdier i en tabelcelle. Alle værdier er angivet i formatet "tt:mm:ss".
DATO TIDKombinerer funktionerne fra de to foregående typer. Lagringsformatet præsenteres som følger: "uuuu-mm-dd tt:mm:ss".
TIDSSTEMPELGemmer dato og klokkeslæt, beregnet ved antallet af sekunder, der er gået siden midnat den 1. januar 1970, indtil den angivne værdi.

Eksempler på brug af datatyper

Lad os se på et eksempel på, hvordan man bruger datatyper i SQL.

Et eksempel på brug af 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 tæller (den gemmer det enkelte checknummer), derfor hører den til heltalstype data, så vi gør det INT eller HELTAL. IKKE NULL angiver, at variablen ikke må være tom.
I Navn Vi gemmer navnet på produktet. Da kolonnen vil gemme tegn, vi bruger VARCHAR. Efter at have specificeret typen, tildeler vi hukommelse til navnet (i vores tilfælde er det (50) ).
Følgende tabelkolonner er oprettet på lignende måde.