En clase, todos estamos 'estudiando' bases de datos y todos usan Access. Aburrido de esto, estoy tratando de hacer lo que el resto de la clase está haciendo, pero con comandos SQL sin procesar con MySQL en lugar de usar Access.
He logrado crear bases de datos y tablas, pero ahora, ¿cómo hago una relación entre dos tablas?
Si tengo mis dos tablas como esta:
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 )
)
y
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 )
)
¿Cómo creo una 'relación' entre las dos tablas? Quiero que a cada cuenta se le "asigne" un ID de cliente (para indicar quién es el propietario).
mysql
sql
foreign-keys
relational-database
Josh Hunt
fuente
fuente
Respuestas:
Si las tablas son innodb, puede crearlas así:
Debe especificar que las tablas son innodb porque el motor myisam no admite claves externas. Busque aquí más información.
fuente
como dijo ehogue, pon esto en tu CREAR TABLA
alternativamente, si ya ha creado la tabla, use un comando ALTER TABLE:
Una buena forma de comenzar a aprender estos comandos es utilizando las herramientas GUI de MySQL , que le brindan una interfaz más "visual" para trabajar con su base de datos. El beneficio real de eso (sobre el método de Access) es que después de diseñar su tabla a través de la GUI, le muestra el SQL que se ejecutará y, por lo tanto, puede aprender de eso.
fuente
Tienes que preguntarte si esta es una relación 1 a 1 o una relación 1 entre muchos. Es decir, ¿cada cuenta tiene un cliente y cada cliente tiene una cuenta? O habrá clientes sin cuentas. Tu pregunta implica lo último.
Si desea tener una relación estricta de 1 a 1, simplemente combine las dos tablas.
En el otro caso, la forma correcta de crear una relación entre dos tablas es crear una tabla de relaciones.
Luego, si tiene un customer_id y desea la información de la cuenta, se une a cuentas de clientes y cuentas:
Debido a la indexación, esto será increíblemente rápido.
También puede crear una VISTA que le brinde el efecto de la tabla de cuentas de clientes combinada mientras las mantiene separadas
fuente
ca.
noac.
(3 lugares).PRIMARY KEY (customer_id, account_id)
sin una coma despuésAgregando al comentario por ehogue, debe hacer coincidir el tamaño de las claves en ambas tablas. Más bien que
hazlo
y asegúrese de que su columna int en la tabla de clientes también sea int (10).
fuente
Algunos motores MySQL admiten claves externas. Por ejemplo, InnoDB puede establecer restricciones basadas en claves externas. Si intenta eliminar una entrada en una tabla que tiene dependientes en otra, la eliminación fallará.
Si está utilizando un tipo de tabla en MySQL, como MyISAM, que no admite claves externas, no vincula las tablas en ningún lugar excepto en sus diagramas y consultas.
Por ejemplo, en una consulta, vincula dos tablas en una declaración de selección con una combinación:
fuente
Aquí hay un par de recursos que lo ayudarán a comenzar: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase y http://code.tutsplus.com/articles/sql-for-beginners-part- 3-relaciones-de-base de datos - net-8561
Además, como dijeron otros, use una GUI: intente descargar e instalar Xampp (o Wamp) que ejecutan software de servidor (Apache y mySQL) en su computadora. Luego, cuando navegue a // localhost en un navegador, seleccione PHPMyAdmin para comenzar a trabajar con una base de datos mySQL visualmente. Como se mencionó anteriormente, utilizamos innoDB para permitirle establecer las relaciones que solicitó. Hace que sea mucho más fácil ver lo que está haciendo con las tablas de la base de datos. Solo recuerde DETENER los servicios Apache y mySQL cuando termine; estos pueden abrir puertos que pueden exponerlo a piratería / amenazas maliciosas.
fuente
Una de las reglas que debe conocer es que la columna de la tabla a la que desea hacer referencia debe tener el mismo tipo de datos que la tabla de referencia. 2 si decide usar mysql, debe usar InnoDB Engine porque, según su pregunta, ese es el motor que respalda lo que desea lograr en mysql.
A continuación se muestra el código. Pruébelo, aunque las primeras personas en responder esta pregunta, proporcionaron respuestas excelentes al 100% y, por favor, considérelas todas.
fuente
fuente