数据库简介
数据库是什么?
- 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
- 用来管理数据库的计算机系统称为数据库管理系统(DBMS)。
- 通过使用DBMS,多个用户便可安全、简单地操作大量数据。
- 数据库有很多种类,SQL语言是来操作关系数据库。
- 关系数据库通过关系数据库管理系统(RDBMS)进行管理。
数据库(DB)
数据库管理系统(DBMS)
DBMS 分类
- 层次数据库(Hierarchical Database,HDB)
把数据通过层次结构(树形结构)的方式表现出来
- 关系数据库(Relational Database,RDB)
采用由行和列组成的二维表来管理数据,使用专门的 SQL(Structured Query Language,结构化查询语言)对数据进行操作。
这种类型的 DBMS 称为关系数据库管理系统(Relational Database Management System,RDBMS)具有代表性的 RDBMS 有如下 5 种:
Oracle Database :甲骨文公司的 RDBMS
SQL Server :微软公司的 RDBMS
DB2 :IBM 公司的 RDBMS
PostgreSQL :开源的 RDBMS
MySQL :开源的 RDBMS
- 面向对象数据库(Object Oriented Database,OODB)
把数据以及对数据的操作集合起来以对象为单位进行管理
- XML 数据库(XML Database,XMLDB)
XML{4[eXtensible Markup Language 的缩写,一种使用 HTML 那样的标签来表现数据结构的语言。以 <name>铃木</name> 这样的形式来保存数据。]} 作为在网络上进行交互的数据的形式逐渐普及起来。XML 数据库可以对 XML 形式的大量数据进行高速处理。
- 键值存储系统(Key-Value Store,KVS)
这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。
数据库结构
- 使用 RDBMS 时,最常见的系统结构就是客户端 / 服务器类型(C/S 类型)这种结构。
说明:
- 服务器指的是用来接收其他程序发出的请求,并对该请求进行相应处理的程序(软件),或者是安装了此类程序的设备(计算机)。在计算机上持续执行处理,并等待接收下一条请求。RDBMS 也是一种服务器,它能够从保存在硬盘上的数据库中读取数据并返回,还可以把数据变更为指定内容。
- 向服务器发出请求的程序(软件),或者是安装了该程序的设备(计算机)称为客户端。
- 关系数据库通过类似 Excel 工作表那样的、由行和列组成的二维表来管理数据。用来管理数据的二维表在关系数据库中简称为表。
3-1. 表的列(垂直方向)称为字段,它代表了保存在表中的数据项目
3-2. 表的行(水平方向)称为记录,它相当于一条数据。关系数据库必须以行为单位进行数据读写
SQL语句的分类
SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语句)来描述操作的内容。关键字是指那些含义或使用方法已事先定义好的英语单词,存在包含“对表进行查询”或者“参考这个表”等各种意义的关键字。
- DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表等对象
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象的结构
- DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录
- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
- DCL(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。
- COMMIT:确认对数据库中的数据进行的变更
- ROLLBACK:取消对数据库中的数据进行的变更
- GRANT:赋予用户操作权限
- REVOKE:取消用户的操作权限
SQL 基本书写规则
- SQL 语句要以分号(;)结尾
- SQL 不区分关键字的大小写
- 常数的书写方式是固定的
- 在 SQL 语句中直接书写的字符串、日期或者数字等称为常数
- SQL 语句中含有字符串的时候,需要像 'abc' 这样,使用单引号(')将字符串括起来,用来标识这是一个字符串。
- SQL 语句中含有日期的时候,同样需要使用单引号将其括起来。日期的格式有很多种('26 Jan 2010' 或者 '10/01/26' 等)
- 在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可
- SQL 语句的单词之间需使用半角空格或换行符来进行分隔。
代码清单
创建 Product 表的CREATE TABLE 语句
CREATE TABLE Product
(
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER,
purchase_price INTEGER,
regist_date DATE,
PRIMARY KEY (product_id)
);
删除 Product 表
DROP TABLE Product;
添加一列可以存储100位的可变长字符串的product_name_pinyin列
-- DB2 PostgreSQL MySQL
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
-- Oracle
ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));
-- SQL Server
ALTER TABLE Product ADD product_name_pinyin VARCHAR(100);
删除 product_name_pinyin 列
SQL Server DB2 PostgreSQL MySQL
ALTER TABLE Product DROP COLUMN product_name_pinyin;
Oracle
ALTER TABLE Product DROP (product_name_pinyin);
向 Product 表中插入数据的 SQL 语句
-- SQL Server PostgreSQL
-- DML :插入数据
BEGIN TRANSACTION;
INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11');
COMMIT;
变更表名
Oracle PostgreSQL
ALTER TABLE Poduct RENAME TO Product;
DB2
RENAME TABLE Poduct TO Product;
SQL Server
sp_rename 'Poduct', 'Product';
MySQL
RENAME TABLE Poduct to Product;