В классе мы все «изучаем» базы данных, и все пользуются Access. Мне это надоело, и я пытаюсь делать то, что делает остальной класс, но с необработанными командами SQL с MySQL вместо использования Access.
Мне удалось создать базы данных и таблицы, но как теперь установить связь между двумя таблицами?
Если у меня есть две такие таблицы:
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 )
)
и
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 )
)
Как мне создать «связь» между двумя таблицами? Я хочу, чтобы каждой учетной записи был «назначен» один customer_id (чтобы указать, кому он принадлежит).
mysql
sql
foreign-keys
relational-database
Джош Хант
источник
источник
Ответы:
Если таблицы innodb, вы можете создать их так:
Вы должны указать, что таблицы являются innodb, потому что механизм myisam не поддерживает внешний ключ. Смотрите здесь для получения дополнительной информации.
источник
как сказал ehogue, поместите это в свою СОЗДАТЬ ТАБЛИЦУ
в качестве альтернативы, если у вас уже есть таблица, используйте команду ALTER TABLE:
Хороший способ начать изучение этих команд - использовать инструменты графического интерфейса пользователя MySQL , которые дают вам более «визуальный» интерфейс для работы с вашей базой данных. Реальное преимущество этого (по сравнению с методом Access) заключается в том, что после создания таблицы через графический интерфейс он показывает SQL, который будет запускаться, и, следовательно, вы можете извлечь из этого урок.
источник
Вы должны спросить себя, это отношения 1 к 1 или отношения 1 из многих. То есть, у каждой учетной записи есть клиент и у каждого клиента есть учетная запись. Или будут клиенты без счетов. Ваш вопрос подразумевает последнее.
Если вы хотите иметь строгое соотношение 1 к 1, просто объедините две таблицы.
В другом случае правильный способ создать связь между двумя таблицами - это создать таблицу отношений.
Затем, если у вас есть customer_id и вам нужна информация об учетной записи, вы присоединяетесь к своим клиентам и учетным записям:
Благодаря индексации это будет невероятно быстро.
Вы также можете создать VIEW, который даст вам эффект объединенной таблицы customersaccounts, сохраняя их раздельными
источник
ca.
нетac.
(3 места).PRIMARY KEY (customer_id, account_id)
после него без запятойДобавляя к комментарию ehogue, вы должны сделать так, чтобы размеры ключей в обеих таблицах совпадали. Скорее, чем
сделай это
и убедитесь, что ваш столбец int в таблице клиентов также имеет значение int (10).
источник
Некоторые механизмы MySQL поддерживают внешние ключи. Например, InnoDB может устанавливать ограничения на основе внешних ключей. Если вы попытаетесь удалить запись в одной таблице, которая имеет иждивенцев в другой, удаление не удастся.
Если вы используете в MySQL тип таблицы, такой как MyISAM, который не поддерживает внешние ключи, вы не связываете таблицы нигде, кроме ваших диаграмм и запросов.
Например, в запросе вы связываете две таблицы в операторе выбора с помощью соединения:
источник
Вот несколько ресурсов, которые помогут начать работу: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase и http://code.tutsplus.com/articles/sql-for-beginners-part- 3 отношения базы данных - net-8561
Также, как говорили другие, используйте графический интерфейс - попробуйте загрузить и установить Xampp (или Wamp), который запускает серверное программное обеспечение (Apache и mySQL) на вашем компьютере. Затем, когда вы перейдете к // localhost в браузере, выберите PHPMyAdmin, чтобы начать визуальную работу с базой данных mySQL. Как упоминалось выше, используется innoDB, чтобы вы могли устанавливать отношения по вашему запросу. Делает кучи проще увидеть, что вы делаете с таблицами базы данных. Просто не забудьте ОСТАНОВИТЬ службы Apache и mySQL по завершении - они могут открыть порты, которые могут подвергнуть вас взлому / вредоносным угрозам.
источник
Одно из правил, которое вы должны знать, - это то, что столбец таблицы, на который вы хотите сослаться, должен иметь тот же тип данных, что и ссылочная таблица. 2, если вы решите использовать mysql, вам необходимо использовать InnoDB Engine, потому что, согласно вашему вопросу, это движок, который поддерживает то, что вы хотите достичь в mysql.
Ниже приведен код, попробуйте его, хотя первые люди, ответившие на этот вопрос, на 100% дали отличные ответы и, пожалуйста, рассмотрите их все.
источник
источник