1 数据库和SQL

1-1 数据库是什么

将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database, DB)。

法则

用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS)。

为什么DBMS那么重要?文本文档和Excel工作表等与DBMS比较

无法多人共享数据;

无法提供操作大量数据所需的格式;

实现读写自动化需要编程技术能力;

无法应对突发事故;

DBMS可以克服这些不足,能够实现多个用户同时安全简单地操作大量数据(无需高超的编程技术就可以操作数据库)。这也是我们一定要使用DBMS的原因。

DBMS种类(数据的保存格式即数据库种类)

  • 层次型数据库(Hierarchi Database, HDB)

最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。(现在很少使用)

  • 关系型数据库(Relational Database, RDB)

也称为关系数据库,是现在应用最广泛的数据库。关系型数据库1969年诞生,可谓历史悠久。和Excel工作表一样,它也采用行列二维表结构来管理数据,所以简单易懂。同时,它还使用专门的SQL(Structured Query Language, 结构化查询语言)语言对数据库进行操作。

这种类型的DBMS称为关系数据库管理系统(Relational Database Management System, RDBMS)。比较具有代表性的RDBMS有如下五种:

l  Oracle Database : 甲骨文公司的RDBMS

l  SQL Server : 微软公司的RDBMS

l  DB2 : IBM公司的RDBMS

l  PostgreSQL : 开源的RDBMS

l  MySQL : 开源的RDBMS

  • 面向对象数据库(Object Oriented Database, OODB)

编程语言当中有一种被称为面向对象的语言。该类数据库把数据以及对数据的操作集合起来以对象为单位进行管理,因此得名。面向对象数据库就是用来保存这些对象的数据库。

  • XML数据库(XML Database, XMLDB)

最近几年,XML作为在网络上进行数据交互传输的形式逐渐普及起来。XML数据库可以对XML形式的大量数据进行高速处理。

  • 键值存储系统(Key-Value Store, KVS)

这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的数据库。具有编程语言经验的读者可以把它想象成关联数组或者是散列(hash)。

1-2 数据库的结构

使用RDBMS时,最常见的系统结构就是客户端/服务器(C/S类型)这种类型。

根据SQL语句的内容返回的数据,同样必须是二维表的形式,这也是关系数据库的特征之一。

表的列(垂直的方向)称为字段,它代表了保存在表中的数据项目。

表的行(水平的方向)称为记录,它相当于一条数据。

关系数据库必须以行为单位进行数据读写。

法则1-1

关系数据库以行为单位读写数据。

此处将行和列交汇的方格称为单元格,在一个单元格中自能输入一个数据。

法则1-2

一个单元格中只能输入一个数据。

1-3 SQL概要

国际标准化组织(ISO)为SQL制定了相应的标准,以此为基础的SQL称为标准SQL(相关信息请参考专栏—标准的SQL和特定的SQL)。

法则1-3

学会标准的SQL就可以在各种RDBMS中书写SQL语句了。

SQL用关键字、表名、列名等组合而成的一条语句(SQL语句)来描述操作的内容。

根据对RDBMS赋予的指令种类的不同,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 : 取消用户的操作权限

法则1-4

SQL根据功能不同可以分为三类,其中使用最多的是DML。

一条SQL语句可以描述一个数据库操作。在RDBMS当中,SQL语句也是逐一执行的。

法则1-5

SQL语句以分号(;)结尾。

法则1-6

关键字不区分大小写。

SQL语句常常需要直接书写字符串、日期或者数字。

在SQL语句中直接书写的字符串、日期(年-月-日、年月/日、‘26 Jan 2010’、‘10/01/26’、‘2010-01-26’)或者数字等称为常数。

法则1-7

字符串和日期常数需要使用单引号(’)括起来。

数字常数无需加注单引号(直接书写数字即可)。

SQL语句的单词之间需要使用半角空格或换行符来进行分隔。

法则1-8

单词之间需要使用半角空格或者换行进行分隔。

1-4 表的创建

数据库的创建

-- CREATE DATABASE <数据库名称>;

CREATE DATABASE shop;

表的创建

/**

CREATE TABLE <表名> (

<列名1> <数据类型> <该列所需要的约束>,

<列名2> <数据类型> <该列所需要的约束>,

<该表的约束1>, <该表的约束2>, ......);

*/

CREATE TABLE `shohin` (

`shohin_id` char(4) NOT NULL,

`shohin_mei` varchar(100) NOT NULL,

`shohin_bunrui` varchar(32) NOT NULL,

`hanbai_tanka` int(11) DEFAULT NULL,

`shiire_tanka` int(11) DEFAULT NULL,

`torokubi` date DEFAULT NULL,

PRIMARY KEY (`shohin_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们只能使用半角英文字母、数字、下划线(_)作为数据库、表、和列的名称。

法则1-9

数据库名称、表名和列名等可以使用以下三种字符。

半角英文字母、半角数字、下划线(_)

法则1-10

名称必须以半角英文字母作为开头。

在同一个数据库中不能创建两个相同名称的表,在同一个表中也不能创建两个名称相同的列。

法则1-11

名称不能重复。

数据类型表示数据的种类,包括数字型、字符型和日期型等。每一列都不能存储与该列数据类型不符的数据。数据库中每一列都不能存储与该列数据类型不符的数据。

INTEGER : 用来指定存储整数的列的数据类型(数字型),不能存储小数。

CHAR : CHAR是CHARACTER(字符)的简称,是用来指定存储字符串的列的数据类型(字符型)。

字符串以定长字符串的形式存储在被指定为CHAR型的列中。所谓定长字符串,就是单列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补充。例如:CHAR(8)类型中输入’abc’的时候,会以‘abc     ‘多出五个空格存储起来。

VARCHAR : 同CHAR类型一样,VAHRCHAR型也是用来指定存储字符串的列的数据类型(字符串类型)。也可以通过括号内的数字来指定字符串的长度(最大长度).但该类型的列是以可变长字符串的形式来保存字符串的。即不会补充空格存储。定长字符串在字符数未达到最大长度时会用半角空格补充,但是可变长字符串不同,即使字符数未达到最大长度,也不会用半角空格补充。

DATE: 用来指定存储日期(年月日)的列的数据类型(日期型)。

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。

数据类型的右侧设定了NOT NULL的约束。

主键的约束。

所谓的键值,就是在指定特定数据是使用的列的组合。键值种类多样,主键(primary key)就是可以特定一行数据的列。

1-5 表的删除和更新

表的删除

-- DROP TABLE <表名>;

DROP TABLE shohin;

法则1-12

删除了的表是无法恢复的。

在执行DROP TABLE 语句之前请务必仔细确认。

表定义的更新

-- ALTER TABLE <表名> ADD COLUMN <列的定义>;

ALTER TABLE shohin ADD COLUMN shohin_mei_kana VARCHAR(100);

-- ALTER TABLE <表名> DROP COLUMN <列名>;

ALTER TABLE shohin DROP COLUMN shohin_mei_kana;

法则1-13

表定义变更(alter table)之后数据无法恢复,慎重使用

表中插入数据

-- DML :插入数据

START TRANSACTION;

INSERT INTO shohin VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');

INSERT INTO shohin VALUES ('0002', '打孔器', '办公用品', 500, 300, '2009-09-11');

INSERT INTO shohin VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);

INSERT INTO shohin VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');

INSERT INTO shohin VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

INSERT INTO shohin VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');

INSERT INTO shohin VALUES ('0007', '擦菜饭', '厨房用具', 880, 790, '2008-04-28');

INSERT INTO shohin VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;

表名变更

-- 变更表名  将A更名为B;  仅用于MySQL

RENAME TABLE A TO B;

1 SQL 数据库和SQL的更多相关文章

  1. 用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法

    用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及 ...

  2. SQL数据库—<1>SQL语言

    关系数据库.SQL语言简单.学习软件介绍 SQL:Structured Query Language 结构化查询语言 数据库分为:层次型,网状型,关系型. 关系型数据库:是一个二维表的集合,可以用来存 ...

  3. SQL数据库—<4>SQL编程--简单学习

    数据类型:列的类型 变量定义:declare 变量名 类型名    变量名:以@开头 赋值和取值:    赋值:set/select 变量=值    取值:变量名例:declare @a varcha ...

  4. Azure SQL 数据库仓库Data Warehouse (1) 入门

    <Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...

  5. HTML5: HTML5 Web SQL 数据库

    ylbtech-HTML5: HTML5 Web SQL 数据库 1.返回顶部 1. HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个 ...

  6. 试用 Azure Sql 数据库

    我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...

  7. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  8. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  9. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

随机推荐

  1. linux修改用户主目录的方法 (转载)

    转自:http://xiaomaimai.blog.51cto.com/1182965/274002 第一:修改/etc/passwd文件第二:usermod命令 详细说明如下:第一种方法:vi /e ...

  2. E20170524-gg

    Awesome   adj. 可怕的; 令人敬畏的; 使人畏惧的; 极好的;

  3. HDU1244:Max Sum Plus Plus Plus

    题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移: ...

  4. [App Store Connect帮助]七、在 App Store 上发行(2.5)设定价格与销售范围:向企业或教育机构分发您的 App

    您可以向您添加至 App Store Connect 以及参与“Apple 商务”或“校园教务管理”的用户.企业或教育机构单独分发您的非公开 App.此选项仅在您的 App 尚未获得批准时可用. 有关 ...

  5. 原生js一行代码实现简易轮播图

    这是一个简易的js无限循环轮播图,只用了一行js代码就实现了无限循环,记录一下三目运算符的伟大! <!DOCTYPE html><html lang="en"&g ...

  6. SQL 初级教程学习(四)

    1. union,union all SELECT E_Name FROM Employees_ChinaUNIONSELECT E_Name FROM Employees_USA 默认地,UNION ...

  7. 通过IDEA制作包含Java应程序的Docker镜像

    IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...

  8. IDEA远程调试Tomcat程序

    如何使用 Idea 远程调试 Java 代码 IDEA远程调试的 基本就是在服务端先设置Tomcat服务器启动脚本catalina.bat,然后在客户端IDEA上进行参数配置,最后二者可以通过Sock ...

  9. C语言之图像旋转

    最近用到了图像向左或者向右旋转90°的情况,纠结了好一会儿,写下来供大家参考. 1 向左旋转90° //unsigned char *pImgData: 输入图像指针 //int WidthIn, i ...

  10. [POJ1741] Tree【树分治 点分治】

    传送门:http://poj.org/problem?id=1741 写的第一道树分治题,撒花纪念~ 对于每一对点对(i, j),它有三种情况: ① 其中一个是根节点.这种情况比较简单,直接加上就好了 ...