数据库(database)是保存有组织的数据的容器
数据存储传统方式:手工录入,数量有限,不便查找
传统记录数据的缺点:
1.不易保存
2.备份困难
3.查找不便
数据存储现代方式:录入电脑,大量数据,方便查询
数据库的优点:
1.持久化存储
2.读写速度极高
3.保证数据的有效性
4.对程序支持性非常好,容易扩展
数据库软件称为DBMS(数据库管理系统)
数据库是通过DBMS创建和操纵的容器。并不能直接访问数据库而是通过DBMS替我们访问数据库
数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件(开源,免费,不要钱,使用范围广,跨平台支持性好,提供了多种语言调用的API,是学习数据库开发的首选)
当前主要使用两种类型的数据库:关系型数据库、非关系型数据库
本文讨论的是关系型数据库(Mysql)
什么是关系型数据库?
关系型数据库指的是数据库中的表是有关系可进行关联的
关系型数据库将数据保存在不同的表中
原则:一类数据一个表,表之间相互联系
优点:
1.数据更容易操纵、维护和重用,灵活、高效
2.更容易保持数据的一致性
3.数据更新的开销很小
1.数据库的组成
数据库的本质是特殊的文件,它是由多个表组成的,是数据表的集合
表(table) 某种特定类型数据的结构化清单,是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单
数据库中的数据表是和Excel一样的二维表结构: 行(记录) + 列(字段) → 单元格
列:保存在表中的数据项目(列名),拥有严格的数据类型
行:一条记录,必须以行为单位进行读写
1.所有表都是由一个或多个列组成的
2.数据类型定义列可以存储的数据种类
数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
3.通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL
4.表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直的列为表列,水平行为表行;表中的行数为记录的总数
关系模型
关系模型把数据看作是一个二维表格,任何数据都可以通过行号+列号来唯一确定,它的数据模型看起来就是一个Excel表:
关系型数据表和Excel表的异同
同:都是二维表格式,都有行和列,行列交叉都是单元格,单元格内都存储数据
异:关系型数据表不能合并单元格;关系型数据表的每一列都有明确的数据类型,不允许出现数据类型以外的数据
扩展补充
1.主键(primary key)
主键,能够唯一标识一行记录的字段
应保证创建的每个表具有一个主键,以便于以后的数据操纵和管理
表中的任何列都可以作为主键,只要它满足以下条件:
1.任意两行都不具有相同的主键值
2.每个行都必须具有一个主键值(主键列不允许NULL值)
处理主键习惯:
1.不更新主键列中的值
2.不重用主键列的值
3.不在主键列中使用可能会更改的值(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键)
选取主键的一个基本原则是:不使用任何业务相关的字段作为主键,记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响
关系型数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键
对于联合主键,允许一列有重复,只要不是所有主键列都重复即可
id_num | id_type | other columns... |
1 | A | ... |
2 | A | ... |
2 | B | ... |
没有必要的情况下,我们尽量不使用联合主键,因为它给关系表带来了复杂度的上升
2.外键(foreign key)
关系型数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证
多对多关系实际上是通过两个一对多关系实现的,即通过一个中间表,关联两个一对多关系,就形成了多对多关系
一对一关系是指,一个表的记录对应到另一个表的唯一一个记录
在关系数据库中,关系是通过主键和外键来维护的
2.数据库的操作
1.查看所有数据库
语法结构
SHOW DATABASES;
返回可用数据库的一个列表(包含在这个列表中的可能是Mysql内部使用的数据库)
补充:为了获得一个数据库内的表的列表,使用SHOW TABLES;
例如:查看test数据库中的数据表
2.使用某个数据库
USE语句用于选择一个数据库,使其成为当前默认数据库
语法结构
USE 数据库名[dbname];
3.查看当前使用的数据库
语法结构
SELECT DATABASE();
4.创建数据库
语法结构
CREATE DATABASE 数据库名[dbname] charset=utf8;
在创建数据库时,数据库的命名要遵循如下规则:
① 不能与其他数据库重名
② 名称可以由任意字母、阿拉伯数字、下划线(_) 或者 "$" 组成,可以使用上述的任意字符开头,但不能使用单独的数字,那样会造成它与数值相混淆
③ 名称最长可由64个字符组成(还包括表、列和索引的命名),而别名最多可达256个字符
④ 不能使用Mysql关键字作为数据库名、表名
⑤ 默认情况下,Windows下数据库名、表名的字母大小写是不敏感的,而在Linux下数据库名、表名的字母大小写敏感的。为了便于数据库在平台间进行移植,建议读者采用小写字母来定义数据库名和表名
例子:创建数据库data
5.删除数据库
删除一个数据库将导致该数据库的所有表全部被删除
语法结构
DROP DATABASE 数据库名[dbname];
例子:删除数据库data
对于删除数据库的操作,应该谨慎使用,一旦执行这项操作,数据库的所有结构和数据都会被删除,没有恢复的可能,除非数据库有备份