第17单元 设置 MySQL 数据库
关系数据库是用于实现数据永久存储的一组表,同时还可能具有数据排序和索引的功能。关系数据库非常适合存储表格数据(例如CSV文件中的数据),其中每一个表代表一种变量类型,表的列对应变量,表的行对应观测值或记录。
虽然不使用Python也可以操作数据库,但你至少需要知道结构化查询语言(SQL)或其特定实现(例如MySQL),这是通过命令行或Python应用程序访问关系数据库的基础。
另外,你需要安装一个MySQL客户端(例如mysql),才能通过命令行与运行中的MySQL数据库服务器进行交互。所有MySQL命令都是不区分大小写的,而且每条命令必须以分号结尾。
以数据库管理员的身份使用mysql启动一个新的数据库项目(这些操作只需要执行一次)。
(1) 在shell命令行中启动mysql:
c:\myProject> mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. «More mysql output» mysql>
后续所有的指令都在mysql命令行提示符下输入。
(2) 创建新的数据库用户(“dsuser”)和密码(“badpassw0rd”):
CREATE USER 'dsuser'@'localhost' IDENTIFIED BY 'badpassw0rd';
(3) 给项目创建一个新数据库(“dsdb”):
CREATE DATABASE dsdb;
(4)授予新用户对新数据库的访问权限:
GRANT ALL ON dsdb.* TO 'dsuser'@'localhost';
现在,可以在数据库dsdb中创建新表了。使用同样的mysql客户端,以常规用户身份登录:
c:\myProject> mysql -u dsuser -p dsdb Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. «More mysql output» mysql>
通常,表都是一次创建而多次访问的。创建表之后,可以根据项目需求更改其属性。CREATE TABLE命令创建一个新表,后跟表名和所有的列信息组成的列表。每个列信息按列名称和该列数据类型的顺序进行定义。最常见的MySQL数据类型是TINYINT、SMALLINT、INT、FLOAT、DOUBLE、CHAR、VARCHAR、TINYTEXT、TEXT、DATE、TIME、DATETIME和TIMESTAMP。
以下命令使用empname(可变长度的文本)、salary(浮点数)和hired(日期)列创建表employee。表中的每个记录代表一个员工。
USE dsdb; CREATE TABLE employee (empname TINYTEXT, salary FLOAT, hired DATE); ➾ Query OK, 0 rows affected (0.17 sec)
对于不再需要的表,可将其从数据库中删去。
DROP TABLE employee; ➾ Query OK, 0 rows affected (0.05 sec)
DROP命令简短精炼,且不可撤销。正所谓覆水难收,在删除任何东西之前,请务必考虑清楚!
数据库架构
数据库架构是描述所有表、列、数据类型、索引、约束以及不同表之间关系的数据库结构。架构是数据库的核心:将一个数据库的所有表中的数据删除后,剩下的就是数据库的架构。
只要存储空间允许,应使得每条记录都能自动生成主键和自动更新最后修改的时间戳,尽管这并非任何编程语言的标准。主键可以确保记录的唯一性,还可以加快搜索的速度。最后修改的时间戳使数据具备一定的可追溯性,而关键字NOT NULL标记的列确保每条记录在该列都具备一个有效值:
CREATE TABLE employee (id INT PRIMARY KEY AUTO_INCREMENT, updated TIMESTAMP, empname TINYTEXT NOT NULL, salary FLOAT NOT NULL, hired DATE);
如果想使用列(变量)进行排序、搜索或连接,就需要给该列添加索引:
ALTER TABLE employee ADD INDEX(hired); ➾ Query OK, 0 rows affected (0.22 sec) ➾ Records: 0 Duplicates: 0 Warnings: 0
注意,索引大大增加了查询的时间,同时也显著增加了插入和删除的时间。另外,只有在将大量数据插入表中之后,才能创建索引。如果要插入新的数据,首先需要删除已有的索引:
DROP INDEX hired ON employee;
然后才能插入数据并重新添加索引。
如果某一列中所有的值都是唯一的(例如员工ID号或姓名),那就应该给该列添加UNIQUE约束。如果UNIQUE约束的列使用了长度可变的数据类型(例如VARCHAR、TINYTEXT或TEXT),则必须指定相应的长度:
ALTER TABLE employee ADD UNIQUE(empname(255));
主键总是有一个值(使用NOT NULL标记),而且它既是一个INDEX,也是UNIQUE的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论