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 ;