1 SQL 数据库和SQL
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的更多相关文章
- 用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法
用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及 ...
- SQL数据库—<1>SQL语言
关系数据库.SQL语言简单.学习软件介绍 SQL:Structured Query Language 结构化查询语言 数据库分为:层次型,网状型,关系型. 关系型数据库:是一个二维表的集合,可以用来存 ...
- SQL数据库—<4>SQL编程--简单学习
数据类型:列的类型 变量定义:declare 变量名 类型名 变量名:以@开头 赋值和取值: 赋值:set/select 变量=值 取值:变量名例:declare @a varcha ...
- Azure SQL 数据库仓库Data Warehouse (1) 入门
<Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...
- HTML5: HTML5 Web SQL 数据库
ylbtech-HTML5: HTML5 Web SQL 数据库 1.返回顶部 1. HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个 ...
- 试用 Azure Sql 数据库
我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
随机推荐
- bzoj 3218: a + b Problem【主席树+最小割】
直接建图比较显然,是(s,i,w),(i,t,b),(i,i',p),(i,j,inf),然而建出来之后发现边数是n方级别的,显然跑不过去,然后就有一种比较神的思路:把a离散了建一棵权值线段树,然后要 ...
- Word Cloud (词云) - Python
>>What's Word Cloud 词云 (Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法.目前已有多种数据分析工具支持这种图形, ...
- C#后台调用Http外网接口(GET, POST)
1.get方法调用接口获取json文件内容 public void GetFunction() { string serviceAddress = ...
- logstash | logstash && logstash-input-jdbc 安装
Windows系统: 1.安装Logstash 1.1 进入官网下载zip包 [1] https://artifacts.elastic.co/ ...
- django urls路由匹配分发
django urls路由匹配分发 一.urls配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对 ...
- 树莓派 离线安装 apt-get offline
有网络的地方 sudo cp /var/cache/apt/archives/YOUR_PACK_NAME ~/swap/deb/ 没网络的地方 sudo dpkg -i ~/swap/deb/*
- Oracle分区表例子
分区表 Oracle提供的分区方法有以下几种. 1.范围分区(range) 范围分区是应用范围比较广的表分区方式,它是以列的值的范围来作为分区的划分条 件,将记录存放到列值所在的 range分区中. ...
- PHP使用Session遇到的一个Permission denied Notice解决办法
搜索 session.save_path 在这里你有两个选择,一个是像我一样用; 把这一行注释掉,另一个选择就是修改一个 nobody 用户可以操作的目录,也就是说有读写权限的目录,我也查了下这个默认 ...
- Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)
Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会.对他们进行编译. 局部类型的限制 (1) 局部类型 ...
- JDBC连接Oracle工具类
import java.sql.*;import java.util.ResourceBundle; /** * jdbc工具类,负责: * 1. 加载/注册数据库驱动程序 * 2. 获取数据库连接 ...