数据库与Linux

存储用于处理的信息的最有效方式是数据库。幸运的是,开源数据库可以满足任何类型的数据存储和检索要求。其中最受欢迎的就是MySQL,这是我们将在本课程中处理的数据库。

PostgreSQL是我也使用的另一个优秀的数据库包。它比MySQL有一些优势,但是它拥有更小的用户群。对于PostgreSQL来说,还有一些比MySQL更难做的事情,所以作为一个学习工具,MySQL对我来说有点更好。我不希望以任何方式低估PostgreSQL的重要性。这是Linux系统的另一个顶级数据库,我鼓励你安装它并尝试它。

MySQL的

MySQL是Linux /开源世界中最流行的数据库软件,在Michael“Monty”Widenius的指导下,开始在斯堪的纳维亚地区开展项目。MySQL现在由自己的公司MySQL AB维护和开发。MySQL在通用公共许可证(GPL)下可用。根据他们的网站,MySQL被美国航空航天局,摩托罗拉和雅虎等知名公司和组织所使用,但名字只有三个。

安装和配置

要提供数据库服务,您需要安装MySQL服务器。为了能够做查询等,必须安装客户端软件。如此受欢迎,所有主要的发行版为您提供安装这些软件包的可能性。

安装完成后,您需要设置MySQL root用户密码。不要把这个“根”与整个机器的“根”混为一谈。这是类似的,你有一切的特权,但这是它结束的地方。一旦安装,你就像这样设置root密码:

码:

mysqladmin -u root password YOUR_PASSWORD

YOUR_PASSWORD是您想要的密码。如果您今后想要更改此密码,这也是解决方法。当您更改密码时,系统会提示您输入旧密码。

创建数据库和表格

现在我们准备创建一个数据库。再次,我们将使用程序mysqladmin。

码:

mysqladmin -u root -p create DB_NAME

DB_NAME是你闪亮的新数据库的名称。当然,一个数据库实际上只是一个空盒子,等待被放入它的东西。实际上,在我们把东西放在空箱子之前,我们应该创建一些分隔符来分隔项目。数据库表就像这些分隔符,所以我们应该创建一个表。为此,我们需要打开一个MySQL客户端shell。

码:

mysql -u root -p albums

系统会提示您输入root密码,然后您会看到如下所示的内容:

码:

Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -AWelcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 25 to server version: 3.23.49-log Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

现在我们准备创建一个表格。在我们做之前,我们应该看看你将要使用的一些基本的字段类型。使用最广泛的是VARCHAR。VARCHAR可以存储长度为1到255个字符的字母数字数据。创建表格时,必须指定此长度。INTEGER或INT字段类型可以接受-2147483648到2147483647之间的值。当您要输入您知道只有整数的数据时使用。DOUBLE是一种很好的字段类型,当你想用小数点来处理数据时,比如金钱。还有另一种类型DECIMAL。不同之处在于DOUBLE可以处理小数,在那里你可能不会有兴趣四舍五入。如果你想存储大量的描述,TEXT就是为了这个目的。一个文本字段最多可以存储216(65536)个字符。您可能最终使用的另一种字段类型是ENUM。当你知道数据只能是2或3个东西而且永远不会改变的时候(例如true / false,yes / no或yes / no / maybe),这个特别有用。最后,为了获得数据存储日期和时间的句柄,我们可以使用像TIMESTAMP这样的字段类型,如YYYYMMDDHHMMSS(年,月,日,时,分,秒)或DATE寻找精度较低的东西。当然还有其他类型,你可能想要使用它们。我邀请您查看MySQL网站上的优秀文档,以获取有关这些字段类型和其他字段的更多深入信息。与此同时,我们来创建一个表格:要获取数据存储日期和时间的句柄,我们可以使用像TIMESTAMP这样的字段类型,如YYYYMMDDHHMMSS(年,月,日,时,分,秒)或DATE,如果您正在寻找精度较低的东西。当然还有其他类型,你可能想要使用它们。我邀请您查看MySQL网站上的优秀文档,以获取有关这些字段类型和其他字段的更多深入信息。与此同时,我们来创建一个表格:要获取数据存储日期和时间的句柄,我们可以使用像TIMESTAMP这样的字段类型,如YYYYMMDDHHMMSS(年,月,日,时,分,秒)或DATE,如果您正在寻找精度较低的东西。当然还有其他类型,你可能想要使用它们。我邀请您查看MySQL网站上的优秀文档,以获取有关这些字段类型和其他字段的更多深入信息。与此同时,我们来创建一个表格:以获得有关这些字段类型和其他字段的更深入的信息。与此同时,我们来创建一个表格:以获得有关这些字段类型和其他字段的更深入的信息。与此同时,我们来创建一个表格:

让我们想象你收集LP。您可能需要创建一个数据库来跟踪事件或通过Internet共享您的信息。MySQL数据库非常适用,因为您可以在以后使用Perl或PHP脚本在WWW上显示它。我们建立一个表来处理关于专辑收集的信息。有几种方法可以做到这一点。我们可以在命令行上创建表 - 全部在一行上:

码:

CREATE TABLE collection (title VARCHAR(100), artist VARCHAR(100), genre VARCHAR(30), condition VARCHAR(10), worth DOUBLE(2,2), notes TEXT, released DATE, added DATE, opened ENUM('yes','no'), updated TIMESTAMP(14), ID int(11) NOT NULL auto_increment, PRIMARY KEY (ID))

首先,我们有VARCHAR领域的标题,艺术家,流派,条件。然后我们有一个适合LPs价值的货币的DOUBLE字段,称为“价值”。接下来,我们有一个TEXT字段,用于制作关于专辑的注释,其次是DATE字段,用于发布LP的时间以及何时将其添加到我们的收藏中。我添加了一个字段ENUM“打开”作为例子。我们可以用这个来表示专辑是否已经被打开,或者是否仍然在缩小。最后一个是14个字符的完整TIMESTAMP字段,用于标记我们更新记录的时间。TIMESTAMP字段可以从2个字符开始(只是一年),并增加2个字符(4,6,8,10,12,14)以获取更多信息。第二个14个字符是准确的。最后一个是我通常使用的特殊字段,因为它使得通过web脚本更新更容易。我的“我们做的是创建一个整数的ID字段。NOT NULL意味着它必须始终有一个值。其他人理论上可以留空,但这不能。另外,每次我们将LP添加到数据库时,它都会自动增加。由于缺少空数据,这也作为表的主键。一个用于分类的密钥必须总是有一些信息。在这里,我们将通过1,2,3等进行默认排序

如果你在你的MySQL shell中有这个,只需按回车即可创建表。如果你成功了,你会看到类似的东西:

码:

Query OK, 0 rows affected (0.01 sec)

如果你做错了什么,MySQL很擅长告诉你你的错误可能在哪里。比方说,我忽略了“值DOUBLE”字段和“笔记TEXT”字段之间的逗号。我会得到这样的消息:

码:

ERROR 1064: You have an error in your SQL syntax near 'notes TEXT, released DATE, added DATE, opened ENUM('yes','no'), updated TIMESTAMP' at line 1

现在为了确保一切正常,我们可以请求MySQL为我们描述表格:

描述集合;

码:

+-----------+------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +-----------+------------------+------+-----+---------+----------------+ title varchar(100) YES NULL artist varchar(100) YES NULL genre varchar(30) YES NULL condition varchar(10) YES NULL worth double(4,2) YES NULL notes text YES NULL released date YES NULL added date YES NULL opened enum('yes','no') YES NULL updated timestamp(14) YES NULL ID int(11) PRI NULL auto_increment +-----------+------------------+------+-----+---------+----------------+ 11 rows in set (0.01 sec)

如果我们不想在MySQL shell中创建表,我们不需要创建表。你可以用同样的方式创建一个文本文件,然后让MySQL读取它

## tables albums.collection

码:

CREATE TABLE collection (title VARCHAR(100),artist VARCHAR(100),genre VARCHAR(30),condition VARCHAR(10),worth DOUBLE(4,2),notes TEXT,released DATE,added DATE,opened ENUM('yes','no'),ID int(11) NOT NULL auto_increment,PRIMARY KEY (ID));

将其另存为collection.sql。现在,要让MySQL读取它,我们将从普通终端(而不是MySQL shell)执行以下操作。

码:

mysql -u root -p albums < collection.sql

您将被提示输入MySQL根密码。如果你在语法上没有犯任何错误,你的表就会被创建。

一个数据库和一个表仍然是分隔符的空框。现在是填充数据的时候了。

插入你的数据

实际上,数据库这个词是一个相当广泛的术语。如果我打开一个文本文件,并以相当有条理的方式写入关于我的相册集的信息,那么我已经创建了一个排序数据库。尽管我们称之为“数据库”和表格,但实际上还没有,因为我们没有把信息放进去。MySQL确实是一个处理数据的程序,因为正如我所提到的,我们可以使用一个简单的文本文件来存储数据。MySQL和其他数据库软件的吸引力在于帮助我们将数据以各种有趣的方式使用。

要将数据添加到我们的相册集,我们可以打开一个MySQL shell并执行以下操作:

码:

INSERT INTO collection (title, artist, genre, condition, worth, notes, released, added, opened) VALUES ('Yesterday and Today', 'Beatles', 'Pop/Rock', 'good', '3000.00', 'The famous Butcher Cover', '1966-06-01', '1978-09-23', 'yes');

再次,这是输入数据的一种方式。这也许不是最舒服的做法。要回顾我关于文本文件的引用,还可以使用文本文件将数据插入到表中。你只需要确保这些字段明显地相互分离,并且每个“记录”(表中的一个条目)是分开的。例如,我们可以像这样创建一个文本文件:

码:

'Armed Forces', 'Elvis Costello', 'Pop/Rock', 'exlnt','20.00', 'Probably his best', '1979-01-05', '1982-03-14', 'yes', '20030925201500''Zenyatta Mondatta', 'Police', 'Pop/Rock', 'fair','5.00', 'interesting tracks', '1980-10-03', '1981-12-25', 'yes', '20030925201500'

我们可以通过这种方式在表格中插入数据:

码:

LOAD DATA INFILE '/home/bob/record_collection' INTO TABLE collecton FIELDS TERMINATED BY ',' ENCLOSED BY ''' LINES TERMINATED BY 'n'

我们所做的是告诉MySQL在这个文本文件中加载数据,以及我们的数据是如何组织的。该组织是相当不言自明的。只要记住要逃避单引号('\'')。换行符或回车符用'\ n'标记。

为了使这个页面在浏览器中看起来不错,我不得不在'exlnt'和'fair'中强制换行。如果你要剪切并粘贴这个例子并且尝试一下,请注意唯一的换行符应该是'20030925201500'

这是在命令行中插入数据的两种主要方法。进一步,我们将看到如何创建Perl或PHP脚本可以加快这个过程,并使其更加舒适。

查看数据

现在你已经把你的相册收藏在一个数据库中了,但是不要对数据做些什么。我们能做的第一件事就是看看它。为此,我们将使用SQL语句SELECT。让我们启动MySQL shell并输入:

码:

SELECT * FROM collection;

你不会在这里看到任何非常漂亮的东西。其实,如果你用x-term来工作,这可能会非常难看。但是,如果我们只选择某些领域,我们可以微调我们的查询。

码:

SELECT title, artist, worth FROM collection;

这会给我们一个更好的输出:

码:

+---------------------+-------------------+---------+ title artist worth +---------------------+-------------------+---------+ Yesterday and Today Beatles 3000.00 Armed Forces Elvis Costello 20.00 Zenyatta Mondatta Police 5.00 +---------------------+-------------------+---------+

我们可以使用WHERE语句来优化查询:

码:

SELECT title, artist, worth FROM collection WHERE artist="Beatles";+---------------------+---------+---------+ title artist worth +---------------------+---------+---------+ Yesterday and Today Beatles 3000.00 +---------------------+---------+---------+1 row in set (0.01 sec)

我们甚至可以做大概的查询。这将在标题中寻找具有字母“i”的艺术家的LP:

码:

SELECT title, artist, worth FROM collection WHERE artist LIKE "%i%";+-------------------+----------------+-------+ title artist worth +-------------------+----------------+-------+ Armed Forces Elvis Costello 20.00 Zenyatta Mondatta Police 5.00 +-------------------+----------------+-------+2 rows in set (0.00 sec)

由于“甲壳虫”没有字母“i”,所以没有出现。您可以像LIKE“B%”那样做,只显示以“B”或LIKE“%o”开头的艺术家,只显示以“o”结尾的艺术家。通过删除或放置%和字母或词组,你可以做很多精炼。你也可以让MySQL为你做数学。假设您想获得整个收藏的总金额。你可以做这样的事情:

码:

SELECT SUM(worth) AS total FROM collection;

我们得到这个输出:

码:

+---------+ total +---------+ 3025.00 +---------+1 row in set (0.00 sec)

这是我们的专辑与“全部”标题的总和。标题出现在我们的查询中包含“总计”。这个头可以是任何东西。我只是选择了“全部”,因为这对我很有意义。如果这对你有意义的话,你可能会说'如拉里'。

您也可以使用>,

码:

SELECT title, artist, worth FROM collection WHERE worth < '100.00';

要么

码:

SELECT title, artist, genre FROM collection WHERE genre != 'Pop/Rock';

这将向我们展示那些不是Pop / Rock艺术家制作的专辑。

您还可以对查询的输出进行排序,以按字母顺序显示相册:

码:

SELECT title,artist,genre FROM collection ORDER BY title;

ORDER语句将按您选择的字段的顺序进行放置。只需将“更新”字段替换为上次对条目进行更改时的顺序即可。如果你有很多条目,你也可以限制MySQL给你显示的条目数目:

码:

SELECT title, artist, updated from collection ORDER BY updated LIMIT 0,10;

这将向我们展示前10个条目。那么你可以用LIMIT 11,20来代替下一个十,等等。

再次,有各种方式来看你的数据。MySQL的文档有更多的例子,我相信,当你精通,你将需要更复杂的查询。

删除和修改数据

让我们想象一下,你将你的专辑Zenyatta Mondatta留在身边。你刚刚买给孩子们的新小狗决定在那个柔软的黑色乙烯基上尝试他的牙齿。这张专辑是一个完全的损失,你决定摆脱它(也可能是小狗)。由于专辑已不在您的收藏集中,因此您可以将其从表格中删除。这里是如何在命令行上执行它:

码:

DELETE FROM collection WHERE title =“Zenyatta Mondatta”;

虽然这可能有点激烈。您可能需要购买该专辑的其他副本并将其替换。如果是这样的话,你可能应该离开这个入口,只要更新它就可以了。以下是你如何更新一个条目:

码:

UPDATE collection SET condition = "good", added = "2003-10-05", worth = "8.50" WHERE title = "Zenyatta Mondatta";

这将更新我们的Zenyatta Mondatta进入。

改变数据库和表格

你应该注意一下我们在本节中将要处理的事情。我们将讨论改变和删除实时数据库。如果你的信息对你很重要,那么你应该定期备份。MySQL使这非常简单。以下是备份数据的几种方法。

一般来说,MySQL将它的表存储在/ var / lib / mysql(/ var意思是变量 - 如果你还记得我们的第一课 - 数据库大小不一)。你可以制作一个这个目录的tarball,并以这种方式备份。如果发生系统级的灾难(例如,硬盘故障),这可能是一个好主意。但是,如果你在修改数据时犯了一个错误,那么在我看来,最舒服的方式就是对表和/或数据库进行“转储”,然后通过MySQL本身进行恢复。以下是我们如何备份整个数据库的方法:

码:

mysqldump --add-lock -u root -p --databases albums > albums_all.sql

这将创建一个不错的文件称为albums_all.sql与数据库和表创建信息加上数据本身。我们在这里添加了这个选项--add-lock,这样在复制的时候没有数据损坏。在“任务关键”的情况下,人们可以在你做这个的时候把数据添加到表格中。在复制之前,您需要将其锁定。现在,如果数据库发生了什么情况,可以通过在普通终端中输入来恢复:

码:

mysql -u root -p

您也可以使用表格和表格中的某些条目来做到这一点。例如,这将备份一个表格:

码:

mysqldump --add-lock albums -u root -p collection > albums_collection.sql

以下将给我们一个只有2003年10月更新的记录的转储。

码:

mysqldump --add-lock albums -u root -p collection -n -t "--where=updated like '200310%'" > oct_collection.sql

最后的两个选项(-n -t)将确保转储不包含数据库创建语句(-n)或表创建语句(-t)。我们这样做,只要需要,我们可以将信息加载回表格中。

现在我们可以在我们的表结构上工作,甚至可以无需担心地删除一个表和/或数据库(只要你支持的媒体是声音!)。

那么这个删除和修改表和数据库是如何工作的呢?那么,在某个时候或许你可能不得不这样做。有些国家甚至有法律规定,当这些数据不再被使用时,有义务破坏个人数据。假设你经营了一个俱乐部,并且有一个成员姓名和地址的列表。俱乐部解散,你是谁负责的数据。那么,你可能需要安全地删除所有的数据,以符合法律。如果你有一个名为linuxclub的数据库,你可以在MySQL shell中删除整个数据库,表和所有这个语句:

DROP database linuxclub;

在MySQL中,删除数据库或表被称为删除它。表格语法是相同的

码:

DROP table lexington;

谨慎使用这一点。这是不可逆的。你将失去所有的数据。

您可能还需要不时更新您的表格结构。对于我的专辑收藏数据库,我应该包含一个艺术家的唱片公司的领域。其他可能也包括在内。即使你已经使用了一段时间,也不用担心。您可以添加字段没有任何问题。让我们将字段“标签”添加到我们的收藏表。

码:

ALTER TABLE collection ADD COLUMN label VARCHAR(30);

如果你快速做一个DESCRIBE集合;你会看到我们新的领域在底部准备去。正如我所提到的,添加字段在技术上不是问题。你必须记住的唯一的事情是你必须填补空白的领域。

码:

UPDATE collection SET label = "Capitol" WHERE artist = "Beatles";

甲壳虫乐队也在自己的品牌Apple上发布了唱片,但是MySQL只能为你提供帮助!

我还发现了我的表“集合”的另一个问题。我没有把“条件”做得足够大,把“不可信”这个词包括进来。现在,如果MySQL足够好让我们可以使用255个字符,为什么我应该吝啬?我只会在字段'条件'上再添加10个字符。

码:

ALTER TABLE collection MODIFY condition VARCHAR(20);

当然,“难以置信”这个形容词是相当含糊的,但我仍然有空间使用“令人难以置信的好”或“令人难以置信的糟糕”。

实际上可能有一个很好的理由来撇弃。如果你有一个输入数据的应用程序,而你的用户只是在某个领域输入一个简短的解释,那么如果你可以保留在255个字符以内并且使用一个VARCHAR 。MySQL会给你更好的表现。当然,如果有机会需要更多的空间,最好是瞄准高。

用户管理

Root不是唯一可以使用MySQL的人。您还可以为其他用户提供数据库和表的某些权限。为此,打开一个MySQL shell,然后转到名为mysql的数据库并键入:USE mysql。在这个数据库中,你会发现一个名为'user'的表。如果你输入DESCRIBE用户,你会看到表中的字段列表。他们大多数是ENUM类型,并且是你可以给别人使用MySQL的特权。比方说,我想让其他用户能够使用我的相册数据库做任何事情,首先,我必须以用户的身份将此用户输入到此表中。

码:

INSERT INTO user VALUES('localhost','stan', PASSWORD('77JyC8'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

'Y'对应于用户可用的权限。在这个例子中,我们已经给了用户“斯坦”做任何事情的能力。你可能不想给他那么多的自由,所以你可能想在这里添加一个“N”来表示DROP权限(例如Y号码)。如果你有对MySQL的root权限,那就是你的呼叫。一旦授予用户您认为合适的权限,您需要调用以下命令重置权限系统:

码:

FLUSH PRIVILEGES;

现在,我们可以让他访问我们的专辑数据库

码:

GRANT ALL ON album。* TO stan @ localhost IDENTIFIED BY'77JyC8';

从现在开始,用户的“标准”将能够启动一个MySQL shell,并执行他所允许的任何专辑数据库的表格。

其他MySQL功能

MySQL有一些内置的功能,可能会派上用场。例如,如果你想找出你正在使用的版本,你可以输入这个查询:

码:

SELECT version();

如果你对时间和日期感兴趣,试试这个:

码:

SELECT now();

其实,你可以对这些SELECT查询有一点乐趣。MySQL有很多内置的东西。给这些一些旋转:

码:

SELECT CHAR(67); - will show you the letter who's ascii value is in the parenthesisSELECT ASCII("C"); - will do the opposite.SELECT rand() as a_Random_Number; - will show you, not surprisingly, a random number. Keep doing this and you'll see how random it is.SELECT LEAST(3,15,10); - will show you the smallest number of the three (just in case you can't tell by looking at it).SELECT POW(10,2); and SELECT POW(3,3); - will get you 10 squared and 3 cubed respectivelySELECT REVERSE("breakfast"); - will give you an unpronounceable word while SELECT REVERSE("2002"); does essentially nothing.SELECT REPLACE("He left Portsmouth on a ship", "i", "ee"); - will get some laughsSELECT CONCAT("loo","ser"); - might get you some more

我的目标是让这个教训有点活跃,但这并不意味着这些和其他的一些在某些场合并不重要。那些处理时间我觉得特别重要。让我们回到我们的专辑数据库。如果我们要公开展示这一点,没有人会真的想看到类似这样的信息:上次更新的信息:20031005164023.我们可以使用一些MySQL技巧将时间戳更改为更具可读性的内容。

码:

SELECT date_format(updated,'%d%M%Y')AS Normal_Date FROM collection WHERE artist =“Beatles”;

你会看到这样的东西:

码:

+-----------------+ Normal_Date +-----------------+ 10 October 2003 +-----------------+

这比20031010140621更令人愉快。

将MySQL用于项目

MySQL是理想的数据库,可用于任何类型的项目,如动态网站或基于Web的库存程序。它非常适合用于Perl和PHP这种应用程序。您也可以使用C编程语言编写独立的应用程序来使用它。我们真的只是在这里表面划痕,你已经可以感觉到它有多强大。现在取决于你自己的需要,这是你的权力。

关注吕田论坛获取更多资讯

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180111G0O3K200?refer=cp_1026

相关快讯

扫码关注云+社区