mysql中表之间的关系

时间:2013-11-08 12:10:21

标签: php mysql database relationship

我正在学习SQL。我发现很少有关于网络命令行的信息。在我在网上看到的每个教程中,他们都会使用create / drop / select命令,然后传递给phpmyadmin。

我想知道如何通过命令行执行以下操作: - 我有3张桌子,想象一下:用户,汽车,燃料; - 每个用户都有一辆车(来自汽车桌),每辆车都有燃料(来自燃料表)。

我想在他们之间建立关系。不仅用户只能从汽车表中选择汽车,而且我可以检查(通过加入命令)谁拥有该汽车类型以及每个用户花费该汽车燃料的费用。

我只想通过命令行学习如何做到这一点,这是一个能够解决更大问题的自制练习,因为关系是数据库中最重要的事情之一,我不知道如何使用它并且无法在任何地方找到它。

1 个答案:

答案 0 :(得分:0)

如果您喜欢在命令行中工作,可以通过

完成
shell> mysql --user=[user_name] --password=[your_password db_name]

这将启动mysql命令行工具。它看起来像这样:

mysql>

现在您可以执行以下查询:

mysql> show databases; // to list all your dbs
mysql> use [db_name]; // to change to your db
mysql> show tables; // to list all tables of your db

请参阅手册:http://dev.mysql.com/doc/refman/5.6/en/mysql.html

你可以在命令行中做你想做的事情,但使用像sqlyog,heidisql或基于web的phpmyadmin工具这样的gui工具会更舒服。您可以在此处查看和编辑数据/数据库/表格,并且可以通过您最喜欢的gui工具发送相同的查询。

使用约束

如果你要求创建关系,听起来你想创建约束。 你真的不需要数据库模式的约束。可以在没有任何约束的情况下构建您想要的内容。这种关系本身只存在于你的大脑中。

用户和汽车(MYISAM表)的小例子

table user
 - id_user (int)
 - name (varchar)

table car
 - id_car (int)
 - name (varchar)
 - fi_user (int)

创建查询:

CREATE TABLE `user` (
`id_user` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 64 ) NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `car` (
`id_car` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 64 ) NOT NULL ,
`fi_user` INT NOT NULL
) ENGINE = MYISAM ;

这就是你所需要的。简单地将您的用户的ID放入汽车的fi_user字段中,并且您有一种关系。

INSERT INTO `user` (`id_user`,`name`) VALUES (1, 'testuser');
INSERT INTO `car` (`id_car`, `name`, `fi_user`) VALUES (1, 'testcar', 1);

现在你可以做到:

SELECT * FROM `car` c JOIN `user` u ON (u.id_user=c.fi_user) WHERE 1

可以在INNODB中使用约束,但您不必使用它们。 我更喜欢MYISAM,因为它更快。请阅读此内容以了解哪些约束以及您可能希望使用它的原因

http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

豫ICP备18024241号-1