数据库本质上作的工做是储存和查询数据。理论上而言,MySQL
应该叫作DBMS
,也就是数据库管理系统,而不是数据库。数据库
DBMS
提供了统一的创建、使用、管理数据库的接口,常见的DBMS
有postgreSQL
、MariaDB
、SQL Server
等。性能优化
Schema
一般来讲,一个DBMS
会支持多个数据库共存。这里所说的数据库指的是特定数据库管理系统管理下的数据库,而不是上一节说的DBMS
。函数
而Schema
的中译术语通常叫模式,Schema
描述了数据库的结构,好比说有哪些表,表有哪些字段,字段分别有哪些限制,有哪些声明了的函数,等等。post
一般的DBMS
每每是这样的结构:位于DBMS
管理最顶层的是一个或多个数据库,数据库里存放表,表里以行为单位存放数据。性能
表的英语术语是Table
。优化
用过Excl吗?spa
id | name |
---|---|
1 | Mike |
2 | John |
直观的表就是一个二维的“表”,有行,有列。code
列的术语是 Column
。对象
每一个列都应该有一个特定的类型(type
),使该列仅仅储存指定类型的数据。接口
键的术语是 Key
。
一般指的是Primary Key
,也就是主键。主键能够是任意一个列。可是若是列是主键,那么这个列必须每一个行都保证不和其余行重复。
主键也能够是多个列,若是是多个列,那么必须保证这些列的组合不重复。
举例来讲
db | table | id | name |
---|---|---|---|
aa | aaaaa | 11 | xxxx |
aa | bbbbb | 11 | xxxx |
其中db
和table
还有id
都是主键,只要保证没有两个行同时存在相同的db
/table
/id
就算是知足了主键约束。
须要注意的是,多主键的可移植性存疑,不必定其余的
DBMS
会支持。
行的术语是 Row
。
每一个行都是一条记录(record
),换作对象的概念的话,也能够说,每一个表都储存了一个其特有的的Row
对象的集合,Column
一一对应Row
对象的属性。
好比上文的
id | name |
---|---|
1 | Mike |
2 | John |
对象概念表达就是
class row { int id; std::string name; }; const std::set<row> table;
SQL
的直译是结构化查询语言,其实就是标准化的数据库查询语言,基本每一个DBMS
都支持。
可是……数据库管理系统对SQL
标准的支持并非那么上心。其中有性能优化、平台优化之类的缘由,也有数据库软件开发商自身的考虑。但总而言之,不要太期待一样的SQL
能在任意DBMS
里都同样跑得欢。