0

我正在学习 SQL。我在网上找到的关于命令行的信息很少。在我在网上看到的每个教程中,它们都停留在创建/删除/选择命令中,然后传递给 phpmyadmin。

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

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

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

4

1 回答 1

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

你可以在命令行中做你想做的事,但使用 gui 工具(如 sqlyog、heidisql 或基于 web 的 phpmyadmin 工具)要舒服得多。您可以在此处查看和编辑您的数据/数据库/表,并且可以通过您最喜欢的 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

于 2013-11-08T13:22:00.847 回答