Quand devriez-vous choisir d'utiliser MyISAM dans MySQL?
Je suis un peu confus par le mal-mongering ici.
Je sais comment faire, voir ci-dessous, mais aucune idée de pourquoi? Quels sont-ils?
create table orders (order_no int not null auto_increment, FK_cust_no int not null,
foreign key(FK_cust_no) references customer(cust_no), primary key(order_no)) type=MyISAM;
create table orders (order_no int not null auto_increment, FK_cust_no int not null,
foreign key(FK_cust_no) references customer(cust_no), primary key(order_no));
source d'informationauteur Léo Léopold Hertz 준영 | 2009-07-04
Vous devez vous connecter pour publier un commentaire.
MyISAM est un le moteur de stockage de MySQL. Il existe assez peu d'entre eux, et ils ont tous leurs avantages et leurs inconvénients. MyISAM ses plus grands atouts sont:
Toujours. Sauf si vous avez besoin d'utiliser MySQL de recherche en texte intégral ou MyISAM est désactivé dans votre partagée hébergeur.
Je pense que vous êtes confus au sujet de deux questions différentes, quand utiliser MyISAM au lieu de MyISAM, et lors de l'utilisation de la clé étrangère (FK) contraintes.
Comme pour la première question, il y a eu beaucoup de réponses qui font un bon travail en expliquant les différences entre MyISAM et MyISAM. Je vais juste rappeler que, dans tvanfosson de citation d'un article, MyISAM est mieux adapté pour le système, avec la plupart de lit. C'est parce qu'il utilise un verrouillage de niveau table au lieu de niveau ligne comme MyISAM, de sorte que MyISAM ne peut pas gérer la simultanéité ainsi, en plus il manque des fonctionnalités qui aident à l'intégrité des données, tels que les transactions et les clés étrangères (encore une fois, déjà mentionné par d'autres).
Vous n'avez pas à utiliser contraintes FK dans votre modèle de données. Si vous savez ce que les relations entre vos tables et votre application est exempt de bugs, alors vous aurez sans FKs l'amende juste. Cependant, l'utilisation de FKs vous donne une assurance supplémentaire à la couche de base de données, car alors MySQL de ne pas laisser votre demande d'insérer les données de mauvaise qualité basé sur les contraintes que vous avez créé.
Dans le cas où vous n'êtes pas clair sur pourquoi utiliser des clés primaires (PK), en faisant une colonne
id_order
par exemple le PK de laorders
tableau signifie que MySQL ne vous laisse pasINSERT
la même valeur deid_order
plus d'une fois parce que chaque ligne dans un PK de la colonne doit être unique.Un FK serait utilisé sur une table qui a une dépendance à une autre table, par exemple,
order_items
aurait une dépendance surorders
(ci-dessous).id_order_items
est le PK deorder_items
et vous pourriez faireid_order_items
la FK de laorders
table d'établir une relation avec plusieursorders
etorder_items
. De même,id_item
pourrait être un FK dans leorder_items
table et un penalty dans leitems
table d'établir une relation avec plusieursorder_items
etitems
.**Puis, ce que la FK contrainte n'est de vous empêcher d'ajouter un
id_item value to the
order_itemstable that isn't in the
élémentstable, or from adding a
id_order_itemsto
commandesthat isn't in the
order_items table.Tous un FK n'est de garantir l'intégrité des données, et il permet également de transmettre les relations entre vos tables à d'autres développeurs qui n'ont pas écrire le système (et vous-même des mois plus tard, quand vous oubliez!), mais surtout c'est pour l'intégrité des données.**
Un crédit supplémentaire: alors, pourquoi utiliser des transactions? Eh bien vous l'avez déjà mentionné une citation qui dit qu'ils sont utiles pour le système bancaire, mais ils sont utiles dans le chemin des situations plus que cela.
Pour l'essentiel, dans une base de données relationnelle, surtout si c'est normaliséune opération de routine telles que l'ajout d'une commande, la mise à jour d'une commande, ou de la suppression d'une commande touche souvent plus de 1 table et/ou en plus d'une instruction SQL. Vous pourriez même finir par toucher la même table plusieurs fois (comme l'exemple ci-dessous). Btw Langage de Manipulation de Données (DML) (
INSERT
/UPDATE
/DELETE
) seulement entraîner une table à la fois.Un exemple d'ajout d'une commande:
Je recommande un
orders
table et unorder_items
table. De ce fait, il peut donc vous pouvez avoir un PK sur leid_order
dans leorders
table, ce qui signifieid_order
ne peut pas être répétées dansorders
. Sans la 1-to-manyorders
-order_items
relation, vous devez avoir plusieurs lignes dans laorders
table pour chaque commande de plusieurs articles associés (vous avez besoin d'unitems
table trop pour ce système de e-commerce, en passant). Cet exemple va ajouter une commande et touch 2 tables avec 4 différentsINSERT
consolidés.(pas de contraintes de clés à des fins d'illustration)
Alors que faire si la insérer #1 et insérer #2 les requêtes exécutées avec succès, mais le insérer #3 déclaration n'a pas? Vous finirais avec une commande qui manquait un élément, et qui pourraient être supprimés de la mémoire de données. Si, dans ce cas, vous souhaitez reprendre toutes les requêtes de la base de données est dans le même état où il était avant ajout de la commande et puis recommencer, eh bien, c'est exactement ce que les transactions sont pour. **Vous regrouper les requêtes que vous voulez tous faire, ou dans le cas d'une exception, alors rien du tout, dans une transaction.
Donc, comme PK/FK contraintes, les transactions aider à assurer l'intégrité des données.**
Partout! Railler myisam, innodb est le chemin à parcourir. Ce n'est pas seulement la performance, mais l'intégrité des données et de l'acide transactions.
Dans votre exemple, vous créer des clés étrangères. Les clés étrangères sont pris en charge uniquement pour les tables MyISAM, pas pour les tables MyISAM.
Vous pouvez être intéressé par cet article de Journal de Base de données qui décrit le type de table MyISAM en MySQL.
Extrait:
Je ne voudrais pas être rebutés par l'autre question. Conserver les sauvegardes de votre base de données, de n'importe quel type -- et ne pas tomber tables par accident 😉 -- et vous serez ok quel que soit le type de table que vous choisissez.
MyISAM:
Le le moteur de stockage MyISAM en MySQL.
MyISAM est une haute fiabilité et haute performance, le moteur de stockage de MySQL. Les avantages principaux de la MyISAM comprennent:
MyISAM Limitations:
Pas de l'indexation de texte intégral (en Dessous de 5.6 de mysql version)
Ne peut pas être comprimé pour être rapide, lecture seule
Plus De Détails:
Renvoyer cette lien
En général pour moi le point le plus important est que MyISAM offre par le verrouillage de ligne, tandis que MyISAM ne regarde par table. Sur de grandes tables avec beaucoup de écrit cela pourrait faire un gros problème de performances.
A l'inverse MyISAM tableau plus facile de la structure du fichier, la copie et la réparation de tableau de fichier de niveau est beaucoup plus facile.
Un commentaire a une commande pour convertir vos bases de données MyISAM ici.
Un supplément à Machine et knoopx's réponse sur les transactions:
La définition de la transaction et une de services bancaires exemple
Source des citations