En classe, nous «étudions» tous les bases de données et tout le monde utilise Access. Lassé de cela, j'essaie de faire ce que le reste de la classe fait, mais avec des commandes SQL brutes avec MySQL au lieu d'utiliser Access.
J'ai réussi à créer des bases de données et des tables, mais maintenant comment établir une relation entre deux tables?
Si j'ai mes deux tables comme ceci:
CREATE TABLE accounts(
account_id INT NOT NULL AUTO_INCREMENT,
customer_id INT( 4 ) NOT NULL ,
account_type ENUM( 'savings', 'credit' ) NOT NULL,
balance FLOAT( 9 ) NOT NULL,
PRIMARY KEY ( account_id )
)
et
CREATE TABLE customers(
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(20) NOT NULL,
PRIMARY KEY ( customer_id )
)
Comment créer une «relation» entre les deux tables? Je souhaite que chaque compte se voit attribuer un identifiant client (pour indiquer à qui il appartient).
mysql
sql
foreign-keys
relational-database
Josh Hunt
la source
la source
Réponses:
Si les tables sont innodb, vous pouvez les créer comme ceci:
Vous devez spécifier que les tables sont innodb car le moteur myisam ne prend pas en charge la clé étrangère. Regardez ici pour plus d'informations.
la source
comme ehogue l'a dit, mettez ceci dans votre CREATE TABLE
Sinon, si vous avez déjà créé la table, utilisez une commande ALTER TABLE:
Une bonne façon de commencer à apprendre ces commandes est d'utiliser les outils d'interface graphique MySQL , qui vous offrent une interface plus «visuelle» pour travailler avec votre base de données. Le véritable avantage de cela (par rapport à la méthode Access), est qu'après avoir conçu votre table via l'interface graphique, cela vous montre le SQL qu'il va exécuter, et vous pouvez donc en tirer des leçons.
la source
Vous devez vous demander s'il s'agit d'une relation 1 à 1 ou 1 sur plusieurs. Autrement dit, est-ce que chaque compte a un client et chaque client a un compte. Ou y aura-t-il des clients sans compte. Votre question implique ce dernier.
Si vous souhaitez avoir une relation stricte de 1 à 1, fusionnez simplement les deux tables.
Dans l'autre cas, la manière correcte de créer une relation entre deux tables est de créer une table de relations.
Ensuite, si vous avez un customer_id et que vous voulez les informations de compte, vous vous inscrivez sur les comptes et comptes clients:
En raison de l'indexation, ce sera incroyablement rapide.
Vous pouvez également créer une VUE qui vous donne l'effet du tableau des comptes clients combinés tout en les gardant séparés
la source
ca.
nonac.
(3 endroits).PRIMARY KEY (customer_id, account_id)
sans virgule aprèsEn ajoutant au commentaire de ehogue, vous devez faire correspondre la taille des clés sur les deux tables. Plutôt que
fais-le
et assurez-vous que votre colonne int dans la table customers est également int (10).
la source
Certains moteurs MySQL prennent en charge les clés étrangères. Par exemple, InnoDB peut établir des contraintes basées sur des clés étrangères. Si vous essayez de supprimer une entrée dans une table qui a des dépendants dans une autre, la suppression échouera.
Si vous utilisez un type de table dans MySQL, tel que MyISAM, qui ne prend pas en charge les clés étrangères, vous ne liez les tables nulle part à l'exception de vos diagrammes et requêtes.
Par exemple, dans une requête, vous liez deux tables dans une instruction SELECT avec une jointure:
la source
Voici quelques ressources qui vous aideront à démarrer: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase et http://code.tutsplus.com/articles/sql-for-beginners-part- 3-relations-bases-de-données - net-8561
Aussi, comme d'autres l'ont dit, utilisez une interface graphique - essayez de télécharger et d'installer Xampp (ou Wamp) qui exécute le logiciel serveur (Apache et mySQL) sur votre ordinateur. Ensuite, lorsque vous accédez à // localhost dans un navigateur, sélectionnez PHPMyAdmin pour commencer à travailler visuellement avec une base de données mySQL. Comme mentionné ci-dessus, utilisé innoDB pour vous permettre d'établir des relations comme vous l'avez demandé. Permet de voir plus facilement ce que vous faites avec les tables de la base de données. N'oubliez pas d'arrêter les services Apache et mySQL lorsque vous avez terminé - ceux-ci peuvent ouvrir des ports qui peuvent vous exposer à des menaces de piratage / malveillant.
la source
L'une des règles que vous devez savoir est que la colonne de table à laquelle vous souhaitez faire référence doit être avec le même type de données que la table de référence. 2 si vous décidez d'utiliser mysql, vous devez utiliser InnoDB Engine car selon votre question, c'est le moteur qui prend en charge ce que vous voulez réaliser dans mysql.
Ci-dessous, le code, essayez-le bien que les premières personnes à répondre à cette question aient fourni à 100% d'excellentes réponses et veuillez les considérer toutes.
la source
la source