-
2022-03-26 22:04:44
1)用户标识和鉴别:
该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才能提供系统的使用权
(2)存取控制
通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未授权的人员无法存取数据
(3)视图机制
为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
(4)审计
建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。
(5)数据加密
对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
更多相关内容 -
DB2数据库常用技术总结
2009-02-20 17:21:06DB2是IBM公司开发的一套关系型数据库管理软件。 本文不介绍关于DB2的基础知识,主要和大家分享一些开发经验。包括: 1.连接数据库 2.子查询 3.字符串转换 4.日期函数 …… -
数据库实用技术 基于ORACLE
2018-03-20 05:29:54集数据库设计与Oracle数据库应用于...技术内容简要介绍了数据库系统分析、设计步骤与方法及Oracle数据库常用技术;实践内容以目前流行的Oracle 10g数据库系统为平台,介绍了实际数据库应用系统的研制方法及开发过程。 -
数据库常用语句.pdf
2021-10-04 23:58:26数据库常用语句.pdf -
数据库系统丨数据库常用恢复技术
2020-06-08 08:18:12数据库常用恢复技术总结。文章目录
0. 概述
数据库的恢复是指DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能。尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但是计算机系统中硬件故障、软件错误、操作员失误及恶意破坏仍是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此DBMS必须具有数据库的恢复功能。
数据库恢复的基本单位是事务。数据库恢复机制包括一个数据库恢复子系统和一套特定的数据结构。
实现可恢复性的基本原理是重复存储数据,即数据冗余。
恢复机制涉及的两个关键问题是:
- 如何建立冗余数据
- 如何利用这些冗余数据实施数据库恢复。
建立冗余数据最常用的技术是数据转储和登录日志文件。它们是数据库恢复的基本技术,通常在一个数据库系统中,这两种方法是一起使用的。
1. 数据转储
[1] 数据转储的概念
数据转储就是DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。
这些备用的数据文本称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装人。
但重装后备副本只能将数据库恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
转储是十分耗费时间和资源的,不能频繁进行。DBA应该根据数据库使用情况确定一个适当的转储周期。转储周期可以是几小时、几天,也可以是几周、几个月。
[2] 静态转储和动态转储。
转储按转储时的状态分为静态转储和动态转储。
- 静态转储
静态转储是在系统中无运行事务时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状态,而转储期间不允许对数据库的任何存取、修改活动。显然,静态转储得到的一定是一个数据一致性的副本。
静态转储简单,但转储必须等待正在运行的用户事务结束才能进行,同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。
- 动态转储
动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。
它不用等待正在运行的用户事务结束,必须把转储期间各事务对数据库的修改记下来,建立日志文件(Log File)。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
[3]海量转储和增量转储
转储按方式不同分为海量转储和增量转储。
- 海量转储
海量转储是指每次转储全部数据库。
- 增量转储
增量转储则指每次只转储上一次转储后更新过的数据。
从恢复角度看,一般说来,用海量转储得到的后备副本进行恢复会更方便些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用、有效。
[4] 数据转储方法
数据转储有两种方式,分别可以在两种状态下进行,因此数据转储方法可以分为4类,见下表。
2. 登记日志文件
日志文件是用来记录事务对数据库的更新操作的文件。概括起来,日志文件主要有两种格式:
-
以记录为单位的日志文件
-
以数据块为单位的日志文件。
[1] 以记录为单位的日志文件
一个日志记录(LogRecord)包括每个事务开始的标记、结束标记和每个更新操作。
[2] 以数据块为单位的日志文件
包括事务标识和被更新的数据块。
由于将更新前的整个块和更新后的整个块都放人日志文件中,操作的类型和操作对象等信息就不必放人日
志记录中。[3] 日志文件的作用
日志文件在数据库恢复中起着非常重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。具体的作用如下:
①事务故障恢复和系统故障必须用日志文件。
②在动态转储方式中必须建立日志文件,后备副本和日志文件综合起来才能有效地恢复数据库。
③在静态转储方式中,也可以建立日志文件。
④当数据库毁坏后可重新装人后备副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。
[4] 利用日志文件恢复示例图
[5] ”日志先写“原则
把对数据的修改写到数据库中与把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记下这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的撤销(UNDO)操作,并不会影响数据库的正确性。
3. 检查点恢复技术
[1] 两个问题
利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO(重做),哪些事务需要UNDO。
一般需要检查所有日志记录。这样做有两个问题:
- 一是搜索整个日志将耗费大量的时间;
- 二是很多需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,然而恢复子系统又重新执行了这些操作,浪费了大量时间。
为了解决这些问题,人们研究发展了具有检查点的恢复技术。
[2] 检查点
检查点(Check Point)也称安全点、恢复点。当事务正常运行时,数据库系统按一定的时间间隔设检查点。一旦系统需要恢复数据库状态,就可以根据最新的检查点的信息,从检查点开始执行,而不必从头开始执行那些被中断的事务。
具有检查点的恢复技术在日志文件中增加一类新的记录——检查点记录(检查点建立时所有正在执行的事务清单),增加一个重新开始文件(存储各检查点记录的地址),并让恢复子系统在登录日志文件期间动态地维护日志。
系统在检查点做的动作主要如下:
①暂时中止现有事务的执行。
②在日志中写人检查点记录,并把日志强制写人磁盘。
③把主存中被修改的数据缓冲区强制写人磁盘。
④重新开始执行事务。[3] 示意图
系统出现故障时恢复子系统将根据事务的不同状态采取不同的恢复策略,如图所示。
4. 数据库镜像
[1] 介质故障
介质故障是对系统影响最为严重的一种故障。
系统出现介质故障后,用户应用全部中断,恢复起来也比较费时。故DBA必须周期性地转储数据库,如果不及时而正确地转储数据库,一旦发生介质故障,会造成较大的损失。
[2] 数据库镜像
为避免磁盘介质出现故障影响数据库的可用性,许多DBMS提供了数据库镜像(Mirror)功能用于数据库恢复。其方法是DBMS根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,并自动保证镜像数据与主数据的一致性,即每当主数据库更新时,DBMS自动把更新后的数据复制过去,如图6-7(a)所示。
一旦出现介质故障,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本,如图6-7(b)所示。
[3] 双磁盘镜像技术
在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排他锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
双磁盘镜像技术(MirroredDisk)常用于可靠性要求高的数据库系统。数据库以双副本的形式存放在2个独立的磁盘系统中,每个磁盘系统有各自的控制器和CPU,且可以互相自动切换。
5. 远程备份系统
[1] 必要性
现代数据库应用要求事务处理系统提供高可用性,即系统不能使用和等待的时间必须少之又少。传统的事务处理系统是集中式或局域客户/服务器模式。这样的系统易遭受火灾、洪水和地震等自然灾害的毁坏。故要求数据库系统有抗破坏力,使之无论在系统故障还是自然灾害下都能快速恢复运行。
[2] 远程备份系统
获得高可用性的方式之一是远程备份系统,即在一个主站点(Primary Site)执行事务处理,使用一个远程备份(RemoteBackup)站点以应付突发事件。一开始所有主站点的数据都被复制到远程备份站点。随着更新在主站点上执行,远程站点必须保持与主站点同步。
[3] 同步方法
通过发送所有主站点的日志记录到远程备份站点,远程备份站点根据日志记录执行同样的操作来达到同步。
注意不是传送更新的数据本身,而是传送更新数据的操作命令,这样可大大减少数据的传送量。
远程备份站点必须物理地与主站点分开放在不同的地区,这样发生在主站点的灾害就不会殃及远程备份站点。
[4] 示意图
当主站点发生故障时,远程备份站点就立即接管处理。但它首先使用源于主站点的数据副本(也许已过时)以及收到的来自主站点的日志记录执行恢复。事实上,远程备份站点执行的恢复动作就是主站点要恢复时需要执行的恢复动作。对于单站点的恢复算法稍加修改,就可用于远程备份站点的恢复。一旦恢复执行完成,远程备份站点就开始处理事务。即使主站点的数据全部丢失,系统也能恢复,相对单站点系统而言,这大大地提高了系统的可用性。
[5] 分布式数据库
另一种实现高可用性的方法是使用分布式数据库,将数据复制到不止一个站点。此时事务更新任何一个数据项,都被要求去更新其所有复制品。
-
数据库主题培训-数据库选型及常用技术.pptx
2019-09-12 16:15:59针对多种不同数据库选型的对比说明及常用技术方法的详解。 -
SQLServer2005数据库技术与应用大学教案3SQLServer2005的常用工具
2019-07-23 03:06:47资源名称:SQL Server 2005数据库技术与应用 大学教案3 SQL Server 2005的常用工具资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。 -
常用中文数据库检索(自然科学及工程技术).pptx
2021-10-23 00:53:23常用中文数据库检索(自然科学及工程技术).pptx -
数据库分类及常用数据库
2021-11-22 21:16:27数据库分类以及其特点,各类型数据库的常用数据库。数据库常见类型分为四种:层次式数据库、网络式数据库、关系型数据库、非关系型数据库。
但是常用数据库类型为:关系型数据库和非关系型数据库。
关系型数据库:
将复杂的数据结构归结为简单的二元结构(也可以叫二维表格形式)。将对数据的操作归结为对一个或多个表的操作。
常见的关系型数据库有Oracle、MySQL……
非关系型数据库:
键值存储数据库:
例如哈希表,通过该键值的key值来操作该数据的增删改查;
常见的键值存储数据库有Redis、Memcached、MemcacheDB……
列存储数据库:
通过列族存储经常一起被查询的数据;例如查找方法的时候肯定会看参数,所以就将方法和参数放入一个列族;
常见的列存储数据库有Cassandra、HBase
面向文档存储数据库:
类似于键值存储数据库,但是效率明显优于键值存储数据库。将数据以文档(最小的存储单元)的形式存储,而文档则包含数据单元(一系列数据项集合),数据单元则又分为一个key,一个对象值。但是这个对象值的类型既可以是简单数据类型,又可以是复杂的类型。
常见的面向文档存储数据库有MongoDB、CouchDB
图形数据库:
以数据结构中的图的形式存储的,以实体为顶点,以实体和实体之间的关系为边
常见的图形数据库有Neo4J、InforGrid
-
数据库常用sql语句总结
2018-12-14 16:16:32大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。 2.SELECT DISTINCT 语句 在表中,可能会包含重复值。关键词 DISTINCT ...查看时右侧可以打开CSDN自带的目录,方便查看
目录
一、基础
1.SELECT 语句
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
在结果集(result-set)中导航:
由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。
2.SELECT DISTINCT 语句
在表中,可能会包含重复值。关键词 DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT 列名称 FROM 表名称
3.WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符:大于等于小于,between,like
SQL 使用单引号来环绕文本值。如果是数值,请不要使用引号。
4.AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
5.ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序(ASC)对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
6.INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
7.Update 语句
Update 语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
8.DELETE 语句
DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
二、高级
1.TOP 子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
SELECT TOP number|percent column_name(s) FROM table_name
例子:选择前两个记录
SELECT
TOP 2
* FROM Persons选择前50%的记录:
SELECT
TOP 50 PERCENT
* FROM Persons2.LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例子:从 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
SELECT * FROM Persons WHERE City LIKE 'N%'
"%" 可用于定义通配符(模式中缺少的字母)。可为空。
'%g'、'%lon%'均可
通过使用 NOT 关键字,可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
3.SQL 通配符
直接上例子:
使用 % 通配符
从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:
SELECT * FROM Persons WHERE City LIKE '%lond%'
使用 _ 通配符
从 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
使用 [charlist] 通配符
从"Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
从 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
4.IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
例子:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
5.BETWEEN 操作符
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
如需选择范围之外的,请使用 NOT 操作符,加在between前面:
6.AS
为列名称和表名称指定别名(Alias)
表
SELECT column_name(s) FROM table_name AS alias_name
列
SELECT column_name AS alias_name FROM table_name
7.join
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
例子:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
下面列出了几种 JOIN 类型,以及它们之间的差异。
- JOIN(即INNER JOIN): 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
区别详解:
8.SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1 UNION (ALL) SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
例子:
列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA9.SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
您可以把所有的列插入新表:
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
下面的例子会制作 "Persons" 表的备份复件:
SELECT * INTO Persons_backup FROM Persons
IN 子句可用于向另一个数据库中拷贝表:
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
可以在最后添加 WHERE 子句,也能使用join从一个以上的表中选取数据
10.CREATE DATABASE 语句
CREATE DATABASE 用于创建数据库。
CREATE DATABASE database_name
11.CREATE TABLE 语句
CREATE TABLE 语句用于创建数据库中的表。
CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... )
12.SQL 约束
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
主要有以下几种约束:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
SQL NOT NULL 约束
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
例子:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
SQL UNIQUE 约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )
或者
CREATE TABLE Persons ( Id_P int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )
当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
ALTER TABLE Persons ADD UNIQUE (Id_P)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
SQL PRIMARY KEY 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
或者
CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。
SQL FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
或者
CREATE TABLE Orders ( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL, Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )
如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。
SQL CHECK 约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (Id_P>0) )
或者
CREATE TABLE Persons ( Id_P int NOT NULL CHECK (Id_P>0), LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
如果需要命名约束,以及为多个列定义约束、表已存在的情况下创建或命名、撤销约束。语法和上述UNIQUE相同。
SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) DEFAULT 'Sandnes' )
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, OrderDate date DEFAULT GETDATE() )
如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons ALTER (COLUMN) City SET DEFAULT 'SANDNES'
如需撤销 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons ALTER (COLUMN) City DROP DEFAULT
13.CREATE INDEX 语句(索引)
用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex ON Person (LastName)
可以索引不止一个列,在括号中列出这些列的名称,用逗号隔开。
14.DROP 语句
通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
删除索引
DROP INDEX index_name ON table_name
DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):
DROP TABLE 表名称
DROP DATABASE 语句用于删除数据库:
DROP DATABASE 数据库名称
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称
15.ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name ADD column_name datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name DROP COLUMN column_name
16.AUTO INCREMENT 字段(自增)
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
例子:
CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) )
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
17.SQL CREATE VIEW 语句(视图)
什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。
样本数据库 Northwind 拥有一些被默认安装的视图。视图 "Current Product List" 会从 Products 表列出所有正在使用的产品。这个视图使用下列 SQL 创建:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
我们可以查询上面这个视图:
SELECT * FROM [Current Product List]
Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
您可以使用下面的语法来更新视图:
CREATE OR REPLACE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:
CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName,Category FROM Products WHERE Discontinued=No
您可以通过 DROP VIEW 命令来删除视图。
DROP VIEW view_name
18.SQL 日期
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
如果不涉及时间部分,那么我们可以轻松地比较两个日期!
如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分!
19.SQL NULL 值
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 值的处理方式与其他值不同。
NULL 用作未知的或不适用的值的占位符。
无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。
我们必须使用 IS NULL 和 IS NOT NULL 操作符。
请始终使用 IS NULL 来查找 NULL 值。
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数
【语法】NVL (expr1, expr2) 【功能】若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。 注意两者的类型要一致
三、SQL 函数
SQL 拥有很多可用于计数和计算的内建函数。
内建 SQL 函数的语法是:
SELECT function(列) FROM 表
1.SQL AVG 函数
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL AVG() 语法
SELECT AVG(column_name) FROM table_name
2.SQL COUNT() 函数
COUNT() 函数返回匹配指定条件的行数。
SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
3.FIRST() 函数
FIRST() 函数返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
SQL FIRST() 语法
SELECT FIRST(column_name) FROM table_name
4.LAST() 函数
LAST() 函数返回指定的字段中最后一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
SQL LAST() 语法
SELECT LAST(column_name) FROM table_name
5.MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SQL MAX() 语法
SELECT MAX(column_name) FROM table_name
注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
6.MIN() 函数
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
SQL MIN() 语法
SELECT MIN(column_name) FROM table_name
注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
7.SUM() 函数
SUM 函数返回数值列的总数(总额)。
SQL SUM() 语法
SELECT SUM(column_name) FROM table_name
8.GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
例子:
希望查找每个客户的总金额(总订单)。(每个客户有多个订单)
我们想要使用 GROUP BY 语句对客户进行组合。
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
原表
结果:
9.HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
10.UCASE() 函数
UCASE 函数把字段的值转换为大写。
SQL UCASE() 语法
SELECT UCASE(column_name) FROM table_name
11.LCASE() 函数
LCASE 函数把字段的值转换为小写。
SQL LCASE() 语法
SELECT LCASE(column_name) FROM table_name
12.MID() 函数
MID 函数用于从文本字段中提取字符。
SQL MID() 语法
SELECT MID(column_name,start[,length]) FROM table_name
column_name 必需。要提取字符的字段。 start 必需。规定开始位置(起始值是 1)。 length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 现在,我们希望从 "City" 列中提取前 3 个字符。
我们使用如下 SQL 语句:
SELECT MID(City,1,3) as SmallCity FROM Persons
13.LEN() 函数
LEN 函数返回文本字段中值的长度。
SQL LEN() 语法
SELECT LEN(column_name) FROM table_name
14.ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND() 语法
SELECT ROUND(column_name,decimals) FROM table_name
15.NOW() 函数
NOW 函数返回当前的日期和时间。
提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。
SQL NOW() 语法
SELECT NOW() FROM table_name
16.FORMAT() 函数
FORMAT 函数用于对字段的显示进行格式化。
SQL FORMAT() 语法
SELECT FORMAT(column_name,format) FROM table_name
参数 描述 column_name 必需。要格式化的字段。 format 必需。规定格式。 现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")。
我们使用如下 SQL 语句:
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products
----------------------------------------
欢迎关注公众号“编程江湖”,可以领取Java、Python、微信小程序等诸多学习资料和项目源码,还能查看精品技术文章,并给大家提供了CSDN资源下载服务。
-
Mysql数据库常用的词汇,新手必备
2019-04-22 08:47:22database数据库 database sysytem数据库系统 database management system 数据库管理系统 entity实体 attribute属性 key关键字 type类型 relationship联系 model模型 primary key主键 foreign key外键 ... -
基于Redo log的复制技术实现跨平台的数据库容灾应用研究
2021-01-27 09:27:09结合模拟常用系统环境进行方案设计的试验,得出基于Redo log复制技术的数据库备份方式,不仅具有高效的资源利用、跨平台数据库同步、主备库双活、断点续传等功能,可以实现Oracle数据库的高可用、提高保护数据的安全... -
Mysql数据库分库和分表方式(常用)
2020-09-10 04:19:40本文主要给大家介绍Mysql数据库分库和分表方式(常用),涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 -
常用数据库培训.pptx
2021-10-03 18:51:55常用数据库培训.pptx -
常用中文数据库.pdf
2021-09-29 16:39:38常用中文数据库.pdf -
常用繁体简体mysql数据库_sql+xls.zip
2020-03-28 15:45:32常用繁体简体mysql数据库_sql+xls,sql文件为mysql导出共6700多,xlsx有1500多个 -
基于UG的数据库访问技术的研究
2020-04-30 00:40:25采用在MFC中添加ADO对象,生成可供UG调用的动态链接库的方法,实现UG与SQL数据库的连接,解决了如何在UG中快速、高效地实现对数据库进行...通过采煤机常用参数查询系统实例验证了使用ADO技术在UG中访问数据库的可行性。 -
C#数据库应用程序设计__基本概念和常用技术
2015-07-26 04:48:33简单介绍c#与sql的连接。适合入门.C#数据库应用程序设计__基本概念和常用技术 -
数据库常用命令
2012-06-26 21:58:15数据库常用的命令大全,非常的有 帮助,保证您不会后悔,谢谢合作! 求共同进步. -
数据库领域的技术
2022-03-08 20:36:21数据库领域的技术 -
这些主流数据库常用专业术语,你都知道么
2020-12-07 17:21:46汇总了51个数据库术语列表,作为数据库开发人员,你需要知道这些专业术语。在阅读数据库相关文档或专业领域书籍时,会经常见到。 -
常用的国内外数据库.pdf
2021-10-05 23:47:31常用的国内外数据库.pdf -
数据库恢复技术
2018-08-06 12:01:06数据处理技术主要包括数据库恢复技术和并发控制技术。数据库恢复机制和并发控制机制是数据库管理系统的重要组成部分。 事务的基本概念 事务 所谓事务时用户定义的一个数据库操作序列,这些操作要么全做要么全... -
主要的数据库访问技术
2018-05-31 18:54:44主要的数据库访问技术:ODBC(Open Database Connectivity开放数据库互联)作为一个访问不同数据库的公共接口 -
数据库应用技术
2020-04-09 16:16:45数据库应用技术1、JDBC概念2、JDBC API 常用接口和方法2.1JDBC常用接口2.2、驱动程序管理器 DriverManager2.3、数据库连接接口Connection2.4、执行SQL语句接口Statement2.5、执行动态SQL语句接口PreparedStatement... -
数据库常用的三种模型
2019-05-07 16:11:45开发工具与关键技术:PowerDesigner 作者:陈锦通 撰写时间:2019年5月7日星期二 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第一是概念模型(全名:Conceptual Data Model 缩写:CDM):它主要是用来描述... -
mySql数据库相关资料大全(入门,常用函数大全、语句注意事项、技术等).rar
2020-02-26 16:03:35该资源是有个mySql数据库资料大全内部涵盖多达12个资源包含了数据库系统基础初级高级、入门、函数大全及用法等等技术资料 -
数据库技术-MySQL8.0
2020-01-02 11:12:17数据库技术是非常重要的基础技能,尤其是当前大数据、人工智能比较热火的时代,都是以数据为基础才能高屋建瓴。本课程主要是对数据库的基础知识和常用技能,通过MySQL8.0进行讲解演示,一切从零开始,从简单到复杂,... -
IBM的DB2数据库常用命令及查询
2018-05-10 13:01:002019独角兽企业重金招聘Python工程师标准>>> IBM的DB2数据库常用命令及查询 2017年04月16日 11:57:31 阅读数:3343 1、 打开命令行窗口 #db2cmd 2、 打开控制中心 #db2cmd db2cc 3、 打开命令编辑器 #db2cmd db2ce =... -
ADO.NET和数据库访问技术 上课讲义.ppt
2020-07-22 07:59:15和数据库 本章将介绍数据库的基本概念以及数据库访问技术常用的数据库有Access和SQL Server两种数据库本章主要采用Access数据库一方面是因为Access数据库简单易学另一方面是在没有SQL Server服务器的情况下依然可以...