初识数据库
数据库:Database,DB
数据库管理系统:Database Management System,DBMS
数据库的种类:
- 层次数据库:Hierarchical Database,HDB
- 关系数据库:Relational Database,RDB,以行和列组成的二维表管理数据
- 面向对象数据库:Relational Database,RDB
- XML数据库:XML Database,XMLDB
- 健值存储系统:Key-Value Store,KVS
RDBMS的常见系统结构示意图:
注意:SQL(Structured Query Language)是一种数据库语言,可以定义和操作数据库;MySQL是关系数据库管理系统RDBMS。SQL Server和MySQL的支持SQL语言。
注意:完全基于标准SQL的RDBMS很少,通常需要根据不同的RDBMS来编写特定的SQL语句,原则上,本课程介绍的是标准SQL的书写方式。
关系数据库中的表
行称为记录;列称为字段;格称为单元格。
SQL语句
SQL语句的分类
- DDL(Data Definition Language,数据定义语言)
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象的结构
- DML(Data Manipulation Language,数据操纵语言):常说的增删查改,实际使用90%的SQL语句属于DML。
- INSERT:向表中插入新数据
- DELETE:删除表中的数据
- SELECT:查询表中的数据
- UPDATE:更新表中的数据
- DCL(Data Control Language,数据控制语言)
- COMMIT: 确认对数据库中的数据进行的变更
- ROLLBACK: 取消对数据库中的数据进行的变更
- GRANT: 赋予用户操作权限
- REVOKE: 取消用户的操作权限
SQL语句基本规则
- SQL语句要以分号( ; )结尾。
- SQL 不区分关键字的大小写,但是插入到表中的数据是区分大小写的。
- Win系统默认不区分表名及字段名的大小写;Linux/Mac默认严格区分表名及字段名的大小写。
- 常数的书写方式是固定的,例如’abc’, 1234, ‘26 Jan 2010’, ‘10/01/26’, ‘2010-01-26’…
- SQL语句的单词之间需使用半角空格或换行符来进行分隔,不能使用全角空格作为单词的分隔符,否则会发生错误,出现无法预期的结果。
SQL基本语句示例
创建名为shop的数据库:
CREATE DATABASE shop;
创建数据库中名为product的表,表名只能使用数字、字母和下划线,且以字母开头。
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));
上述示例中出现了四种基本的数据类型:CHAR(定长字符串)、VARCHAR(变长字符串)、INTEGER(整数非小数)、DATE(日期)。
在创建数据库的表时需要先使用数据库use shop
删除名为product的表,注意删除的表无法恢复。
DROP TABLE product;
在product表中添加名为product_name_pinyin一列,其数据类型为100位的可变长字符串。
ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
把刚创建的product_name_pinyin一列删除
ALTER TABLE product DROP COLUMN product_name_pinyin;
删除product表中名为XXX的行,不可恢复。
DELETE FROM product WHERE COLUMN_NAME='XXX';
清空表product
TRUNCATE TABLE product;
更新product表中的数据
-- 修改所有行(记录)的注册时间
UPDATE product
SET regist_date = '2009-10-10';
-- 仅修改部分商品的单价
UPDATE product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
-- 多列更新
UPDATE product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
向product表中插入数据
INSERT INTO product VALUES('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
练习题
1.1
答:
CREATE TABLE Addressbook
(regist_no INTEGER NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
PRIMARY KEY (regist_no));
1.2 假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请编写 SQL 把此列添加到 Addressbook 表中。
列名 : postal_code
数据类型 :定长字符串类型(长度为 8)
约束 :不能为 NULL
答:
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
1.3 请补充如下 SQL 语句来删除 Addressbook 表。
答:TRUNCATE table Addressbook;
1.4 是否可以编写 SQL 语句来恢复删除掉的 Addressbook 表?
答:不可以,已删除的表不可恢复。