mysql_数据完整性

来源:互联网 发布:python高级编程 编辑:程序博客网 时间:2024/06/01 08:02

数据完整性。(数据完整性指的是存储在数据库中的数据的一致性和准确性)

数据完整性分类:    1、实体完整性            PRIMARY KEY约束            UNIQUE约束    (唯一值)            自增特性    auto_increment    2、域完整性            数据类型            非空约束  not null            CHECK约束 MySQL不支持            DEFAULT约束    3、参照完整性            FOREIGN KEY约束    4、用户自定义完整性            存储过程和触发器

约束。

1、NOT NULL约束    功能:限制用户向表中插入数据时,某列必须插入值,不允许为空    添加约束的方法:在列的定义后面直接添加关键字NOT NULL。(不写默认为NULL)    示例:    CREATE TABLE student    (    stuID CHAR(5) NOT NULL,    stuName VARCHAR(10) NOT NULL,    stuSex ENUM('男', '女') #此列允许不插入值    )    验证NOT NULL约束的功能    另一种添加非空约束的方法:、    create table t1(tid NUMBER);    alter table t11 modify tid char(5) not null;       (可以既改变类型,又添加约束)2、DEFAULT约束    当INSERT语句没有指定值时,DEFAULT约束会在列中输入一个默认值。    定义DEFAULT约束的语法 :    DEFAULT constraint_expression    MySQL中的默认值约束有一个限制,即:默认值只能是一个常量,不能象Oracle那样允许函数。    只有一个例外:CURRENT_TIMESTAMP    下面这些语句是等效的:     CREATE TABLE t (ts TIMESTAMP);    CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP         ON UPDATE CURRENT_TIMESTAMP);3、PRIMARY KEY约束    PRIMARY KEY约束用来实现实体完整性    确保特定的列中不允许重复,且不许为NULL    PRIMARY KEY约束定义了表的主键,它可以唯一地标识一行。    每个表只能定义一个PRIMARY KEY约束    可以定义在一列或多列上    定义PRIMARY KEY约束的语法 :    [CONSTRAINT constraint_name]    PRIMARY KEY {(column_name [,…])}     示例:    DROP TABLE t_doctor;    CREATE TABLE t_doctor    (    doc_id CHAR(5) PRIMARY KEY,    doc_name CHAR(8) NOT NULL,    sex CHAR(2),    phone VARCHAR(20)    );    *    *创建病人表,注意:不支持注释符--    */    CREATE TABLE t_patient    (    pat_id CHAR(5),    pat_name CHAR(8) NOT NULL,    sex CHAR(2),    PID CHAR(18),     phone VARCHAR(20),    CONSTRAINT pk_patient_id PRIMARY KEY(pat_id)    CONSTRAINT pk_patient_id 也可以省略4、UNIQUE约束    UNIQUE约束也用来实现实体实整性    UNIQUE约束表明同一列的任意两行都不能具有相同值。    可以插入多个NULL(与其他的DBMS不一样)    若表中已有一主键,但又想保证其他的列也是唯一的,可以定义UNIQUE约束。    一个表中可以有多个UNIQUE约束    定义UNIQUE约束的语法 :    [CONSTRAINT constraint_name]    UNIQUE {(column_name [,…])}     在创建表时添加UNIQUE约束     DROP TABLE t_patient;    CREATE TABLE t_patient    (    pat_id CHAR(5) PRIMARY KEY,    pat_name CHAR(8) NOT NULL,    PID CHAR(18) UNIQUE,    /* CONSTRAINT un_PID UNIQUE(PID) */    );5、CHECK约束    CHECK约束通过对输入到特定列的值设置检查条件,将输入数据限制为指定的值    可以在单列或多列上创建CHECK约束     定义CHECK约束的语法 :    在创建表时,也可以为表添加CHECK约束    CREATE TABLE t_patient    (    pat_id CHAR(5) PRIMARY KEY,    pat_name CHAR(8) NOT NULL,    sex CHAR(2) CHECK(sex='男' OR sex='女'),    PID CHAR(18),    phone VARCHAR(20),    CONSTRAINT ck_patient_PID CHECK(length(PID)=18 OR length(PID)=15)    ); 6、FOREIGN KEY约束    FOREIGN KEY约束定义了表之间的一致性关系,用于强制参照完整性。    FOREIGN KEY约束定义了对同一个表或其他表的列的引用,这些列具有PRIMARY KEY或者UNIQUE约束。     定义FOREIGN KEY约束的语法 :    [CONSTRAINT constraint_name]    [FOREIGN KEY(column_name [,…])]    REFERENCES ref_table[(ref_column_name [,…])]    [ON DELETE {CASCADE | SET NULL|NO ACTION}]    [ON UPDATE {CASCADE | SET NULL|NO ACTION}]    DROP TABLE t_record;     CREATE TABLE t_record    (    pat_id CHAR(5) REFERENCES t_patient(pat_id),  #MySQL中这样写创建不上约束    admission_date DATE,    doc_id CHAR(5),    diagnosis NVARCHAR(500),    FOREIGN KEY(pat_id) REFERENCES t_patient(pat_id),    FOREIGN KEY(doc_id) REFERENCES t_doctor(doc_id)    7、级联引用完整性        [ON DELETE {CASCADE | SET NULL|NO ACTION}]        [ON UPDATE {CASCADE | SET NULL|NO ACTION}]        CASCADE使用级联,删除或更新主表数据时,同时删除从表中的数据或将从表中的数据自动更新。        SET NULL选项则在删除或更改主表数据时,自动将从表中相应数据设置为空。        NO ACTION不使用级联         ALTER TABLE t_record        ADD CONSTRAINT fk_record_docid         FOREIGN KEY(doc_id) REFERENCES t_doctor(doc_id)        ON DELETE CASCADE;        ALTER TABLE t_record        ADD CONSTRAINT fk_record_patid         FOREIGN KEY(pat_id) REFERENCES t_patient(pat_id)        ON DELETE SET NULL;    8、删除约束        ALTER TABLE table_name         DROP PRIMARY KEY #删除主键约束         | DROP INDEX index_name #可用此句删除唯一约束         | DROP FOREIGN KEY fk_symbol #删除外键约束        NOT NULL与DEFAULT约束以修改列的方式实现        CHECK约束根本就没有保存        ALTER TABLE t_record DROP foreign key fk_record_docid;        ALTER TABLE t_record DROP foreign key fk_record_patid;    9、查看表中的约束        Show create table t_record;
原创粉丝点击