SQL 约束,事务,触发器,存储引擎,多表查询

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

SQL约束

SQL约束主要有以下几种:

NOT NULL: 用于控制字段的内容一定不能为空(NULL)。    

UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。

PRIMARY KEY:也是用于控件字段内容不能重复,但它在一个表只允许出现一个。

FOREIGN KEY: FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

CHECK: 用于控制字段的值范围。

DEFAULT: 用于设置新记录的默认值。

j_0012.gif用法用例:

1、not null : 用于控制字段的内容一定不能为空(NULL)。      用法 :

1
2
3
4
5
CREATE TABLE MyTable(    
     ID VARCHAR(16) NOT NULL,
      NAME VARCHAR (32) NOT NULL,
      ...
);

2、Unique :控件字段内容不能重复,一个表允许有多个 Unique 约束。

1
2
3
4
5
CREATE TABLE MyTABLE(
     ID VARCHAR(16) NOT NULL UNIQUE,
     NAME VARCHAR(32) NOT NULL,
     ...
);

  在Sql Server、 My Sql 支持的添加 Unique 语法:可同时添加几个字段为约束 如: unique (id,name)     

1
2
3
4
5
6
CREATE TABLE MyTable(
     ID VARCHAR(16) NOT NULL,
     NAME VARCHAR(32) NOT NULL,
     UNIQUE(ID,NAME),
     ...
);

3、Primary Key :也是用于控件字段内容不能重复,但它在一个表只允许出现一个。    
      在Sql Server、Orcale、MS Access 支持的添加Primary Key语法:

1
2
3
4
5
6
7
CREATE TABLE MyTable(
     ID VARCHAR(16) NOT NULL,
     NAME VARCHAR(32) NOT NULL,
     ...
     PRIMARY KEY(ID),
     ...
)

4、Foreign Key :FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。 

1
2
3
4
5
6
7
CREATE TABLE MyTable1(
     ID VARCHAR(16) NOT NULL,
     NAME VARCHAR(32) NOT NULL,
     ...
     PRIMARY KEY(ID),FOREIGN KEY(ID) REFERENCES MyTable2(ID);
     ...
)

 请注意,"MyTable1" 中的 "Id" 列指向 "MyTable1" 表中的 "Id" 列。

"MyTable2" 表中的 "ID" 列是 "MyTable2" 表中的 PRIMARY KEY。

"MyTable1" 表中的 "Id" 列是 "MyTable1" 表中的 FOREIGN KEY。


5、Check :用于控制字段的值范围。

1
2
3
4
5
6
7
8
CREATE TABLE MyTable(
     ID VARCHAR(16) NOT NULL,
     NAME VARCHAR(32) NOT NULL,
     UNIQUE(ID,NAME),
     PRIMARY KEY(ID),
     CHECK(ID > 0),
     ...
);

6、Default :用于设置新记录的默认值。

1
2
3
4
5
6
7
CREATE TABLE MyTable(
     ID VARCHAR(16) NOT NULL,
     NAME VARCHAR(32) NOT NULL,
     CITY VARCHAR(32) DEFAULT  'BEIJING' ,
     PRIMARY KEY(ID),
     ...
);


SQL事务

1. 概念

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。

2. 事务属性
事务4大属性:

  • 原子性(Atomicity): 事务是一个完整的操作。

  • 一致性(Consistency):当事务完成时,数据必须处于一致状态。

  • 隔离性(Isolation): 对数据进行修改的所有并发事务是彼此隔离的。

  • 持久性(Durability): 事务完成后,它对于系统的影响是永久性的。

3. 创建事务
T-SQL中管理事务的语句:

  1. 开始事务: begin transaction

  2. 提交事务:commit transaction

  3. 回滚事务: rollback transaction


SQL触发器

1. 概念及作用

  触发器属于一种特殊的存储过程,可以在其中包含复杂的SQL语句。触发器与存储过程的区别在于触发器能够自动执行并且不含参数。通常可以在触发器内编写一段自动执行的程序,用于保证数据操作的完整性,从而扩展了对默认值,约束和规则的完整性检查。对表进行包括填加数据,删除数据,更新数据中的一种或多种操作时,触发器就会自动执行。

2. 使用触发器的主要优点

  1. 触发器是自动执行的,在数据库中定义了某个对象后,或对表中的数据做了某种修改后立即被激活;

  2. 触发器可以实现比约束更复杂的完整性要求,比如CHECK约束中不能引用其他表中的列,而触发器可以引用;CHECK约束只是由逻辑符号连接的条件表达式,不能完成复杂的逻辑判断功能;

  3. 触发器可以根据表数据修改前后的状态,根据其差异采取相应的措施;

  4. 触发器可以防止恶意的或错误的INSERT,UPDATE和DELETE操作。

3. 触发器的种类

SQL Server 2008提供三种类型的触发器:DML 触发器, DDL 触发器, DDL 触发器和登录触发器。

不做详细介绍


SQL存储引擎

  MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。


  存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

  在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

MySQL有多种存储引擎(目前不做详细介绍):

MyISAMInnoDBMERGEMEMORY(HEAP)BDB(BerkeleyDB)EXAMPLEFEDERATEDARCHIVECSVBLACKHOLE


参考: 

《数据库原理及应用教程 第三版》----------------------------------------陈志泊,王春玲等



本文转自 七十七快 51CTO博客,原文链接:http://blog.51cto.com/10324228/1837099

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 存储 数据库
sql事务、视图和索引
sql事务、视图和索引
14 0
|
3月前
|
SQL 关系型数据库 MySQL
六、SQL多表查询
六、SQL多表查询
30 0
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
174 0
|
6月前
|
SQL XML Java
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
65 0
|
1月前
|
SQL
SQL多表查询的几种连接方式
SQL多表查询时,主要使用以下几种连接方式
|
2月前
|
SQL Oracle 关系型数据库
[SQL]事务
[SQL]事务
42 0
|
2月前
|
SQL 存储 关系型数据库
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
37 0
|
3月前
|
SQL
SQL语句多表查询练习
SQL语句多表查询练习
11 0
|
3月前
|
SQL 存储 数据库
PL/SQL触发器的概述和用途
PL/SQL触发器的概述和用途
32 2
|
3月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
135 1