【SQL 基础教程 第2版】 第1章 数据库和SQL
第一章 数据库和SQL
数据库是什么
- 数据库(DB):数据构成的集合
- 数据库管理系统(DBMS):用来管理数据库的计算机系统
- DBMS的种类
- 层次数据库
- 关系数据库(当今应用最广):
- 面向对象数据库
- XML数据库
- 键值存储系统
数据库的结构
- 客户端/服务器系统(C/S类型)是最常见的。
- 一个数据库中可以存储多个表
- 字段:表的列
- 记录:表的行(关系数据库以行为单位进行数据读写)
- 单元格:行与列的交汇,只能输入一个数据
SQL概要
- 标准SQL:符合ISO标准
- SQL语句:关键字、表名、列名等组合而成的一条语句。
- DDL:数据定义语言,用来创建或删除,如 create、drop、alter
- DML:数据操纵语言,用来查询或变更,如 select、insert、update、delete
- DCL:数据控制语言,用来确认或授权,如 commit、rollback、grant、revoke
- SQL基本书写规则
- SQL语句以分号结尾
- SQL语句不区分大小写(但表中的数据是区分大小写的)
- 字符串和日期用单引号括起来,数字不用
- 单词以半角空格或者换行来分隔
表的创建
- 数据库的创建:
- 格式:
CREATE DATABASE <数据库名称>;
- 实例:
CREATE DATABASE shop;
- MYSQL选择数据库:
use shop;
- 格式:
- 表的创建:
- 格式:
CREATE TABLE <表名> ( <列名1> <数据类型> <该列所需约束>, <列名2> <数据类型> <该列所需约束>, ... <该表的约束1>, <该表的约束2>, ... );
- 实例:
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) );
- 格式:
- 命名规则:英文字母(开头)、数字、下划线
- 数据类型:
- INTEGER:整数
- CHAR:在存储中是定长字符串,在括号中指定最大长度
- VARCHAR:在存储中是可变长字符串,在括号中指定最大长度
- DATE:日期(年月日)
- 约束:NOT NULL(非空约束)、PRIMARY KEY(主键约束)
表的删除和更新
- 表的删除
- 格式:
DROP TABLE <表名>;
- 实例:
DROP TABLE Product;
- 格式:
- 表定义的更新
- 添加列
ALTER TABLE <表名> ADD COLUMN <列的定义>;
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
- 删除列
ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE Product DROP COLUMN product_name_pinyin;
- 添加列
- 插入数据
- 在 MySQL 中,插入数据前使用
START TRANSACTION;
插入数据后使用COMMIT;
- 实例:
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;
- 在 MySQL 中,插入数据前使用
- 修改表名:
RENAME TABLE <原表名> to <目标表名>;
(仅限MySQL使用)
练习题
-- 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
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
-- 1.3
DROP TABLE Addressbook;
-- 1.4
(?_?)