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 4247: 挂饰【dp】
bzoj上访问负下标会跑到奇怪的地方-- 其实可以滚动数组优化,但是我看能过就懒得改了 设f[i][j]为已经算了前i个挂饰,当前有j个空的钩子,转移就是f[i][j]=max(f[i-1][j],f ...
- bzoj 2756 [SCOI2012]奇怪的游戏【二分+最大流】
达成成就:为二分调参 !:多次memset的话要把数组大小开严格一点,否则会T 看到网格图,首先黑白染色. 注意到每次操作都是在一个黑格子和一个白格子上进行的,也就是说,最后黑格子数字和白格子数字和的 ...
- 洛谷 P4015 运输问题 【最小费用最大流+最大费用最大流】
s向仓库i连ins(s,i,a[i],0),商店向t连ins(i+m,t,b[i],0),商店和仓库之间连ins(i,j+m,inf,c[i][j]).建两次图分别跑最小费用最大流和最大费用最大流即可 ...
- 洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)
传送门 看到区间推倒……推平就想到珂朵莉树 挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数 //minamoto #include<iostream> #inc ...
- jrebel永久免费使用教程,这个标题怎么样?不能带“激活”俩字?
文章转载自:https://www.jiweichengzhu.com/article/33c0330308f5429faf7a1e74127c9708 如果还有问题,加群交流:686430774(就 ...
- quickpow || 快速幂
洛谷例题 推荐自行脑补:百度百科 如果 ,那么 : 前言:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 拿题目样例 Input :2 1 ...
- 《Windows核心编程系列》十一谈谈Windows线程池
Windows线程池 上一篇博文我们介绍了IO完成端口.得知IO完成端口可以非常智能的分派线程.但是IO完成端口仅对等待它的线程进行分派,创建和销毁线程的工作仍然需要我们自己来做. 我们自己也可以创建 ...
- win10系统下使用EDGE浏览器找不到Report Builder 启动图标
Win10系统下如果要使用Report Builder,可能存在EDGE浏览器或者Chrome找不到ReportBuilder的启动图标的情况,此时,应以管理员权限运行IE浏览器,即可看到图标.
- 437 Path Sum III 路径总和 III
给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...
- Anaconda(miniconda)安装及使用--转
https://www.waitalone.cn/anaconda-install-error.html 3,224 1.Anaconda概述 Anaconda是一个用于科学计算的 ...