SQL约束

SQL约束主要有以下几种:

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

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

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

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

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

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

j_0012.gif用法用例:

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

CREATE TABLE MyTable(    
    ID VARCHAR(16) NOT NULL,
     NAME VARCHAR (32) NOT NULL,
     ...
);

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

CREATE TABLE MyTABLE(
    ID VARCHAR(16) NOT NULL UNIQUE,
    NAME VARCHAR(32) NOT NULL,
    ...
);

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

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语法:

CREATE TABLE MyTable(
    ID VARCHAR(16) NOT NULL,
    NAME VARCHAR(32) NOT NULL,
    ...
    PRIMARY KEY(ID),
    ...
)

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

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 :用于控制字段的值范围。

CREATE TABLE MyTable(
    ID VARCHAR(16) NOT NULL,
    NAME VARCHAR(32) NOT NULL,
    UNIQUE(ID,NAME),
    PRIMARY KEY(ID),
    CHECK(ID > 0),
    ...
);

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

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


参考:

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