数据库和SQL
1.数据库的基本概念
数据库(DB):把大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合成为数据库(Database,DB)。
数据库管理系统(DBMS):用来管理数据库的计算机系统称为数据库管理系统。
数据库的优势:
- 可多人共享数据
- 可提供大量数据所需的格式
- 可以应对文件被误删、硬盘出现故障等数据出现故障的情况
DBMS的种类:
- 层次数据库(HDB)
- 关系数据库(RDB)
- 面向对象数据库(OODB)
- XML数据库(XMLDB)
- 键值存储系统(KVS)
注:所要研究的是关系数据库的基本语法,如MySql。
2.数据库的结构
使用RDBMS时,最常见的系统结构就是客户端/服务器类型(C/S)
服务器指的是用来接收其他程序发出的请求,并对该请求进行相应处理的程序,或者是安装了此类程序的设备(计算机)。RDBMS也是一种服务器,它能够从保存在硬盘上的数据库中读取数据并返回,还可以把数据变更为指定内容。
向服务器发送请求的程序(软件),或者是安装了该程序的设备(计算机)称为客户端。访问由RDBMS管理的数据库,进行数据读写的程序称为RBDMS客户端。
表的结构
由行和列组成,用来管理数据的二维表在关系数据库中简称为表。
根据SQL语句的内容返回的数据同样必须是二维表的形式。
表的列称为字段,它代表了保存在表中的数据项目。表的行称为记录,它相当于一条数据。关系数据库的读写必须以行为单位进行读写。
行与列交汇的方格称为单元格。一个单元格中只能输入一个数据。
3.SQL概要
SQL语句及其种类
SQL用关键字、表名、列名等组合而成的一条语句(SQL语句)来描述操作的内容。关键字是指那些含义或使用方法已事先定义好的英语单词,如select、where等。
- DDL
**DDL(数据定义语言):**用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL包含以下指令:
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象的结构
- DML
**DML(数据操纵语言):**用来查询或者变更表中的记录。DML包含以下几种指令。
- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
- DCL
**DCL(数据控制语言):**用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL包含以下几种指令。
- COMMIT:确认对数据库中的数据进行的变更
- ROLLBACK:取消对数据库中的数据进行的变更
- GRANT:赋予用户操作权限
- REVOKE:取消用户的操作权限
注:SQL语句多以DML为主。要以掌握DML为要点。
SQL的基本书写规则
- SQL语句要以分号 ; 结尾
- SQL语句不区分大小写
SQL不区分关键字的大小写,如select和SELECT是一样的,但是插入到表中的数据是区分大小写的。
- 常数的书写方式是固定的
SQL语句中直接书写的字符串、日期或者数字等称为常数。
SQL语句中含有字符串的时候,需要像 ’ab’ 这样,使用单引号 ‘ 将字符串括起来,用来标识这是一个字符串。
SQL语句中含有日期的时候,同样需要使用单引号括起来。格式有**( ’26 Jan 2010’ 或者 ’10/01/26’ )**,也可以使用 ’2010-01-26’ 这种格式。
在使用数字时,不需要使用任何符号标识,直接写出100即可。
- 单词需要用半角空格或者是换行来分隔
SQL语句的单词之间需要使用半角空格或换行符来进行分隔。不添加分隔的语句会发生错误。
4.表的创建
数据库的创建
在创建表之前,一定要先创建用力存储表的数据库。运行CREATE DATABASE语句就可以在RDBMS上创建数据库了。语法如下:
CREATE DATABASE <数据库名称>;
这里我们将数据库命名为shop,然后执行代码清单1-1中的SQL语句。
CREATE DATABASE shop;
表的创建(CREATE TABLE语句)
创建好数据库之后,接下来我们使用CREATE TABLE语句在其中创建表。CREATE TABLE语句的语法如下所示。
CREATE TABLE <表名>
(<列名1> <数据类型><该列所需的约束>,
<列名2> <数据类型><该列所需的约束>,
<列名3> <数据类型><该列所需的约束>);
在数据库中创建表中的商品表(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 INT,
purchase_price INT,
regist_date DATE,
PRIMARY KEY (product_id));
命名规则
只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称。此外,名称必须以半角英文字母开头。
最后还有一点,在同一个数据库中不能创建两个相同名称的表,在同一个表中也不能创建两个名称相同的列。
数据类型的指定
所有的列都必须指定数据类型。数据类型表示数据的种类,包括数字型、字符型和日期型等。
- INTEGER型
指定存储整数的列的数据类型,不能存储小数。
- CHAR型
字符串以定长字符串的形式存储在被指定为CHAR型的列中。若未达到规定的长度,则用半角空格补足。
- VARCHAR型
可变长字符串的形式来保存字符串的,在未达到规定的长度,不需要使用半角空格补足。
- DATE型
用来指定存储日期(年月日)的列的数据类型(日期型)。
约束的设置
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。Product表中设置了两种约束。
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
数据类型的右侧设置了NOT NULL约束,即数据中不能有空白。
PRIMARY KEY(product_id)
这是用来给product_id列设置主键约束的。所谓键,就是在指定特定数据时使用的列的组合。键种类多样,主键就是可以特定一行数据的列,即该行数据唯一。
5.表的删除和更新
表的删除(DROP TABLE语句)
删除表的SQL语句非常简单,只需要一行DROP TABLE语句即可
DROP TABLE <表名>;
删除Product表
DROP TABLE Product;
注:轻易不要使用DROP语句,删除了的表是无法恢复的。
表定义的更新(ALTER TABLE语句)
使用ALTER TABLE语句就可以更新表。
ALTER TABLE <表名> ADD COLUMN <列的定义>;
注:ORACLE和SQL Server中不用写COLUMN。
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
删除表中某列使用的语法如下所示。
ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE Product DROP COLUMN product_name_pinyin;
ALTER TABLE语句和DROP TABLE语句一样,执行之后无法恢复。
向表中插入数据
INSERT INTO Product VALUES('0001','T恤衫','衣服',1000,500,'2009-09-20');
INSERT INTO Product VALUES('0002','打孔器','办公用品',500,320,'2009-09-11');