第一章 数据库和SQL
1.1 数据库
数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
用来管理数据库的计算机系统统称为数据库管理系统(DBMS)
DBMS在现阶段主要有5种:层次型数据库(Hierarchical Database, HDB),关系型数据库(Relational Database,RDB),面向对象数据库(Object Oriented Database,OODB),XML数据库(XML Database,XMLDB),键值存储系统(Key-value Store,KVS)
1.2 数据库结构
1.2.1 RDBMS最常见的结构是客户端/服务器(C/S类型)
1.2.2 表的结构
根据SQL语句的内容返回的数据,必须是二维表的形式。
表的列称为字段,代表了保存在表中的数据项目。
表的行成为记录,相当于一条数据。
行列交汇处称为单元格,一个单元格只能输入一个数据。
1.3 SQL概要
1.3.1 SQL是为了操作数据库而开发的语言
1.3.2 SQL语言的种类可分为三种:DDL(Data Definition Language,数据定义语言),DML(Data Manipulation Language,数据操作语言),DCL(Data Control Language,数据控制语言)
DDL: CREATE(创建数据库和表等对象),DROP(删除数据库和表等对象),ALTER(修改数据库和表等对象结构)
DML:SELECT(查询表中数据),INSERT(向表中插入新的数据),UPDATE(变更表中的数据),DELETE(删除表中的数据) ---> 使用最多
DCL:COMMIT(确认对数据库中的数据进行变更),POLLBACK(取消对数据库中的数据进行变更),CRANT(赋予用户操作权限),REMOVE(取消用户操作权限)
1.3.3 SQL的基本书写规则
SQL语句要以分号(;)结尾
SQL语句不区分大小写(本文规则:关键字大写,表名的首个字大写,其余(列名等)小写),但是插入到表中的数据是区分大小写的。
常数的书写方式是固定的:字符串和日期常数需要使用单引号(')括起来;数字常数无需加注单引号(直接书写数字即可)
SQL语句的单词之间需要使用半角空格或换行符来进行分隔
1.4 表的创建
1.4.1 表的内容的创建
1.4.2 数据库的创建
代码1.语法规则及例子
CREATE DATABASE <数据库名称> eg. CREATE DATABASE shop
1.4.3 表的创建
代码2.语法规则
CREATE TABLE <表名> (<列名1> <数据类型> <该列所需约束> <列名2> <数据类型> <该列所需约束> <列名3> <数据类型> <该列所需约束> <列名4> <数据类型> <该列所需约束>)
1.4.4 命名规则
只能使用半角英文字母,数字,下划线作为数据库,表和列的名称,名称必须以半角英文字母开头
名称不能重复
1.4.5 数据类型的指定
四种数据类型:INTEGERZ(整数型),CHAR(字符型),VARCHAR(字符串),DATE(日期)
区分CHAR和VARCHAR:CHAR是字符串以定长字符串的形式存储,而VARCHAR是指以可变长字符串的形式存储
1.4.6 约束的设置
约束是除了数据类型外,对列中存储的数据进行限制或者追加条件的功能。
NOT NULL 是指不能输入空白,也就是必须输入的约束
PRIMARY KEY (shohin_id)
上面这条语句是给shohid_id列设定主键约束的。所谓的键值,就是在指定特定数据时所使用的列组合。主键就是可以特定一行数据的列。也就是说,如果把shohid_id列为主键,就可以通过该列取出特定的商品数据了。
1.5 表的删除和更新
1.5.1 表的删除(DROP TABLE语句)
代码3.删除表时所用的语句及案例
DROP TABLE <表名>; eg. DROP TABLE Shohin;
删除了的表是无法恢复的
在执行DROP TABLE语句之前请务必仔细确认
1.5.2 表定义的更新(ALTER TABLE语句)
ALTER语句应用于在创建表后发现表少了几列这种情况
代码4.添加列时所使用的语法
ALTER TABLE <表名> ADD COLUMN <列定义>;
代码5.特定的SQL,Oracle和SQL Server中不用写COLUMN
ALTER TABLE <表名> ADD <列名>;
代码6. 另外,在Oracle中同时添加多列的时候可以使用像下面这样的括号
ALTER TABLE <表名> ADD (<列名>,<列名>,<列名>,.......);
代码7.添加一列可以存储100位可变长度字符串的shohin_mei_kana列
--DB2 PostgreSQL MySQL ALTER TABLE Shohin ADD COLUMN shohin_mei_kana VARCHAR(100); --Oracle ALTER TABLE Shohin ADD (Shohin_mei_kana VARCHAR2(100)); --SQL Server ALTER TABLE Shohin ADD shohin_mei_kana VARCHAR(100);
代码8.删除时ALTER TABLE语句
ALTER TABLE <表名> DROP COLUMN <列名>;
代码9.在Oracle和SQL Server中不用写COLUMN
ALTER TABLE <表名> DROP <列名>;
代码10.在Oracle中同时删除多列的时候,可以像下面这样是用括号来实现
ALTER TABLE <表名> DROP (<列名>,<列名>,<列名>,......);
代码11.删除shohin_mei_kana列
--SQL Server DB2 PostgreSQL MySQL ALTER TABLE Shohin DROP COLUMN shohin_mei_kana; --Oracle ALTER TABLE Shohin DROP (shohin_mei_kana);
习题:
1.1 代码
CREATE TABLE Jyushoroku ( toroku_bangu INTEGER NOT NULL, name VARCHAR(128) NOT NULL, jyusho VARCHAR(256) NOT NULL, tel_no CHAR(10), mail_address CHAR(20), PRIMARY KEY (toroku_bangu) );
输出结果:
1.2 代码
--PostgreSQL、MySQL
ALTER TABLE Jyushoroku ADD COLUMN yubin_bango CHAR(8) NOT NULL;
--Oracle
ALTER TABLE Jyushoroku ADD (yubin_bango CHAR(8)) NOT NULL;
--SQL Server
ALTER TABLE Jyushoroku ADD yubin_bango CHAR(8) NOT NULL;
输出结果:
1.3 代码
DROP TABLE Jyushoroku;
1.4 代码(DROP TABLE 后是无法恢复的,只能按照1.1 代码重建)
CREATE TABLE Jyushoroku ( toroku_bangu INTEGER NOT NULL, name VARCHAR(128) NOT NULL, jyusho VARCHAR(256) NOT NULL, tel_no CHAR(10), mail_address CHAR(20), PRIMARY KEY (toroku_bangu) );