blob
(acronyme pour
binary large object
) ou parfois
clob
(acronyme pour
character large object
).
float
et le
double
des langages de programmation classiques.
La table suivante regroupe les types numériques entiers.
Tableau 5. Types numériques entiers
Type SQL | Codage |
---|---|
tinyint
|
8 bits |
smallint
|
16 bits |
integer ou
int
|
32 bits |
bigint
|
64 bits |
numeric
permet de fixer le nombre de digits des nombres que l'on veut stocker, et le nombre de chiffres après la virgule de ces chiffres. Ainsi
numeric(p, s)
(
p
comme précision et
s
comme scale) définit un nombre à
p
digits et
s
chiffres après la virgule. La valeur de
s
est facultative, elle vaut 0 par défaut.
Enfin, les types approchés sont
float
et
double
, de façon classique.
char
permet de stocker des chaînes de caractères de taille fixe, comprise entre 0 et 255. Si l'on enregistre une chaîne plus courte que la taille indiquée, alors le serveur ajoute des espaces automatiquement à la fin de la chaîne.
varchar
permet de stocker des chaînes de caractères de taille variable, comprise entre 0 et 65535. Aucun ajout d'espace n'est effectué si une chaîne plus courte que la taille indiquée est enregistrée.
text
permet de stocker des textes de grande taille. Il en existe quatre formes en MySQL :
TinyText
,
Text
,
MediumText
et
LongText
.
La table suivante donne les tailles de texte que l'on peut stocker dans ces différents champs. On remarquera que cette taille est donnée en octets et non en nombre de caractères. Suivant l'encodate utilisé, le nombre de caractères stockés pourra donc varier.
Tableau 6. Taille des types
text
pour MySQL
Type texte | taille |
---|---|
tinytext
|
2 8 octets |
text
|
2 16 octets |
mediumtext
|
2 24 octets |
longtext
|
2 32 octets |
time
,
date
et
timestamp
.
date
est composée de trois éléments :
date
permet de coder des dates de
'1000-01-01'
à
'9999-31-12'
.
time
est également composé de trois éléments :
time
permet de coder des dates sur une gamme beaucoup plus large, allant de
-838:59:59
à
838:59:59
. Effectivement ce type est utilisé pour coder à la fois les heures de la journée, mais aussi des intervalles temporels exprimés en heures.
date
et d'un
time
. Ils permettent donc de coder une date à la seconde près.
En MySQL, il existe une différence sournoise entre ces deux types :
datetime
permet de coder des dates de
1000-01-01 00:00:00
à
9999-12-31 23:59:59
;
timestamp
permet de coder des dates de
1970-01-01 00:00:01
à
2038-01-19 03:14:07
.
date()
: convertit une chaîne en
date
, ex :
date('1918-11-11')
time()
: convertit une chaîne en
time
, ex :
time('10:25:45')
timestamp()
: convertit une chaîne en
datetime
, ex :
timestamp('1918-11-11 10:25:45')
curdate()
: retourne l'instant présent sous forme de
date
;
curtime()
: retourne l'instant présent sous forme de
time
;
now()
: retourne l'instant présent sous forme de
datetime
.
select
, et utilisées comme argument d'un
insert
ou d'une
update
.
blob
(binary large object). En MySQL, il existe quatre types de blobs, correspondant aux quatre types de textes de grande taille, et de même taille :
Tableau 7. Taille des types
blob
pour MySQL
Type blob | taille |
---|---|
tinyblob
|
2 8 octets |
blob
|
2 16 octets |
mediumblob
|
2 24 octets |
longblob
|
2 32 octets |
text
, les
blob
ne peuvent pas être associés à des jeux de caractères, et ne sont comparables que numériquement. Les
blob
sont utilisés pour stocker des tableaux de
bytes
, comme des images, ou des volumes de données importants.
sequence
. Une colonne auto-incrémentale se déclare comme suit.
Exemple 30. Création d'une colonne auto-incrémentale dans MySQL
create table Marins ( id int auto_increment primary key, ... ) ;
SMALLINT
INT
BIGINT
GENERATED ALWAYS
, ou
GENERATED BY DEFAULT
. Dans le premier cas, il n'est pas possible d'insérer une valeur dans cette colonne ; c'est Derby qui se charge de la remplir. Dans le second cas, Derby autorise l'insertion manuelle de valeurs, et en génère une automatiquement si aucune valeur n'est fournie.
Il est de plus possible de spécifier la façon dont les valeurs générées sont produites : le pas d'incrémentation, etc...
Exemple 31. Création d'une colonne générée avec Derby
create table Marins ( id int primary key generated always as identity (start with 1000, increment by 100), ... ) ;
create sequence seq
, dans laquelle
seq
représente le nom de la séquence que l'on crée. On peut ainsi créer autant de séquences que l'on veut.
Une séquence entretient deux valeurs :
curval
: la valeur courante de cette séquence ;
nextval
: la valeur suivante de cette séquence ;
curval
retourne toujours la valeur retournée par le dernier appel à
nextval
;
nextval
retourne toujours une valeur nouvelle, en général obtenue en incrémentant la valeur courante.
nextval
ne retournent jamais la même valeur est très forte, et permet d'utiliser les séquences pour générer des clés primaires. Notons toutefois des appels successifs à
nextval
dans un même
select
retournent la même valeur.
L'intérêt des séquences par rapport aux colonnes auto-incrémentales est qu'il devient possible de créer des clés primaires uniques au sein, non plus d'une table, mais d'un ensemble de tables, voire d'une base de données complète. Cela permet de simplifier les choses lorsque l'on veut réorganiser une base, en fusionnant des tables notamment.
Notons enfin qu'Oracle n'expose pas la notion de colonne auto-incrémentale. Il est possible de simuler ce comportement au niveau d'une colonne en créant un
trigger
.
Exemple 32. Séquences sous Oracle
-- création d'une séquence create sequence marins_seq ; -- création d'une nouvelle valeur select marins_seq.nextval from dual ; -- lecture de la valeur courante select marins_seq.curval from dual ;