Bonjour, je suis débutant en développement web, j'ai créé une base de donnée sur MYSQL avec deux tables. le soucis est que lorsque j'enregistre des données dans une table l'identifiant reste 0 or j'ai coché auto_incrémente. Aidez moi SVP.
Version imprimable
Bonjour, je suis débutant en développement web, j'ai créé une base de donnée sur MYSQL avec deux tables. le soucis est que lorsque j'enregistre des données dans une table l'identifiant reste 0 or j'ai coché auto_incrémente. Aidez moi SVP.
Bonjour,
Faute de boule de cristal en état de fonctionner, merci de communiquer le script de création de vos tables ainsi que la requête en question
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 create TABLE `categories` ( `id` int(20) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `code` text, `name` text, `name_en` text, `name_fr` text, `fk_parent_category` bigint(20) DEFAULT NULL ) -- -insert data for table `categories` -- INSERT INTO `categories` ( `created_at`, `updated_at`, `code`, `name`, `name_en`, `name_fr`, `fk_parent_category`) VALUES ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title Ii - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 14), ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title II - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 1613), ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title II - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 1623);
Votre table ne dispose pas de colonne auto_increment
Bien choisir les types de colonnes appropriés.
Exemple : assignez le type varchar sur code, name, name_en, name_fr tout en spécifiant la taille maximale de caractères.
Code:
1
2
3
4
5
6
7
8
9
10 create TABLE categories ( id bigint auto_increment primary key, created_at datetime NOT NULL, updated_at datetime NOT NULL, code varchar(50), name varchar(100), name_en varchar(100), name_fr varchar(100), fk_parent_category bigint DEFAULT NULL );
Code:
1
2
3
4 INSERT INTO categories ( created_at, updated_at, code, name, name_en, name_fr, fk_parent_category) VALUES ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title Ii - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 14), ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title II - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 1613), ( '2019-01-07 17:34:57', '2019-01-07 17:34:57', NULL, NULL, 'Title II - Tax Recovery', 'Titre II - Le recouvrement de l\'impot', 1623);
En l'occurrence, du varchar pour un code est rarement un bon choix : les codes étant le plus souvent de longueur maximale très courte et souvent tous de la même longueur, choisir du varchar est contre-performant, le char est préférable.
Exemples :
- codes pays iso 3166 : 3 normes char(2), char(3) et numérique(3) cf. https://fr.wikipedia.org/wiki/ISO_3166
- codes devises iso 4217 : char(3) cf. https://fr.wikipedia.org/wiki/ISO_4217
- codes incoterm de port : char(3) cf. https://fr.wikipedia.org/wiki/Incoterm
- codes communes insee : char(5) cf. https://public.opendatasoft.com/expl.../table/?flg=fr
etc
Pour rappel
- le varchar nécessite, selon les SGBD et la longueur maximale de l'attribut, 1 à 3 octets supplémentaires pour stocker la longueur effective, au contraire du char.
- le varchar provoque des déplacement de pages data et index lors des mises à jour avec modification de la longueur, ce qui pénalise les performances
- le varchar requiert un réalignement avant tri (order by, distinct, group by) ce qui pénalise aussi les performances
Donc le varchar, c'est très bien, mais il ne faut pas l'utiliser systématiquement au détriment du char
- attribut de longueur maximale réduite (moins de 20 caractères ~) ou dont la longueur effective ne varie pas ou très peu ==> préférer le char, quelques blancs inutiles coutent moins cher que des déplacements de pages data et index
- attribut de longueur maximale significative et dont la longueur varie fortement d'une ligne à l'autre ==> préférer le varchar
Pour le reste je suis d'accord ;)