• MySQL约束


    数据完整性

    为了确保数据的完整性和唯一性,关系型数据库通过约束机制来实现目的。

    可靠性 + 准确性 = 数据完整性

    数据完整性通常有三种形式:

    1. 实体完整性:即表中有一个主键。
    2. 域完整性:数据值满足指定的条件。
    3. 引用完整性:表示与引用表的关系和数据约束,即外键。
    • 数据存放在表中
    • “数据完整性的问题大多是由于设计引起的”
    • 创建表的时候,就应当保证以后数据输入是正确的
      错误的数据、不符合要求的数据不允许输入

    创建表:保证数据的完整性=实施完整性约束

    列值要求(约束)

    • 输入的类型是否正确?
      年龄字段的数据类型必须是数字
    • 输入的格式是否正确?
      身份证号码必须是18位
    • 是否在允许的范围内?
      性别只能是”男”或者”女”

    整行要求(约束)

    • 是否存在重复输入?
      学员信息输入了两次
    • 是否符合其他特定要求?
      信誉值大于5的用户才能够加入会员列表

    实体完整性

    约束方法:唯一约束、主键约束、标识列

    域完整性

    约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束

    引用完整性

    约束方法:外键约束

    约束(Constraint)

    常见的约束条件有6种
    主键(Primary Key)约束
    外键(Foreign Key)约束
    唯一性(Unique)约束
    默认值(Default)约束
    非空(Not NULL)约束
    检查(Check)约束
    MySQL不支持check约束,写了没有作用,但不会报错

    约束的详细介绍

    非空约束:用not null约束的字段不能为null值,必须给定具体的数据

    例如:创建表,给字段添加非空约束(创建用户表,用户名不能为空)
    create table t_user(
    id int(10),
    name varchar(32) not null
    ); --如果没有插入name字段数据,则会报错
    

    取消非空约束:

    alter table t_user modify name varchar(32)
    

    建表后添加非空约束

    alter table t_user modify id int not null
    

    唯一性(unique)约束:unique约束的字段,具有唯一性,不可重复,但可以为null

    例如:创建表,保证邮箱地址唯一
    create table test_unique(
    id int(10),
    name varchar(32) not null,
    email varchar(128) unique
    ); #如果email字段重复插入,则会报错,但是该字段可以为null
    

    删除唯一性约束:

    语法:alter table 表名 drop index 字段名;
    例:alter table test_unique drop index email;
    

    建表后添加唯一性约束:

    语法:alter table 表名 add unique(字段名)
    例:alter table test_unique add unique(id)
    

    主键约束:
    主键约束相当于非空约束和唯一约束。
    每个表只允许拥有一个主键,但是这个主键可以由多个数据列组成,这些列组合不能重复

    例:创建表test_primary 设置id为主键;

    create table test_primary(
    id int not null primary key,
    name varchar(50)
    );
    

    例:创建表test2_primary 设置id为主键;

    create table test2_primary (
    id int not null,
    name varchar(50),
    constraint test_pk primary key(id) 
    # 指定主键约束为 test_pk ,对大部分数据库有效 但对于MySql无效,此主键约束名仍为PRIMARY
    );
    

    主键不仅可以是一列,也可以由表中的两列或多列来共同标识。——复合主键
    例:创建表test3_primary 设置id和name为复合主键;

    create table test3_primary(
    id int not null,
    name varchar(50) not null,
    primary key(id,name)
    )
    

    删除主键约束:

    语法:alter table 表名 drop primary key;
    例:alter table test3_primary drop primary key;
    

    建表后添加主键约束:

    语法:alter table 表名 add primary key(字段名)
    例:alter table test3_primary add primary key(id) ; --将字段设置为主键
    

    默认值约束:
    当插入时没有插入值时,会自动插入默认值

    例:创建表test1_default设置name的默认值;

    create table test1_default(
    id int not null,
    name varchar(50) DEFAULT 'abc'
    )
    

    插入数据的时候,如果不写入name的值,则默认显示填入abc

    也可以使用自增长的方式来给字段填充值
    例:创建表auto_test设置id的值为自增长;

    create table auto_test(
    id int not null auto_increment primary key,
    name varchar(25)
    );
    

    删除默认值约束

    语法:ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
    例:alter table test1_default alter name drop default;
    

    建表后添加默认值约束:

    语法:ALTER TABLE 表名 ALTER 列名 SET DEFAULT '默认值';
    例:alter table test1_default alter name set default 'abc';
  • 相关阅读:
    [20190401]跟踪dbms_lock.sleep调用.txt
    [20190401]隐含参数_mutex_spin_count.txt
    [20190401]关于semtimedop函数调用.txt
    [20190401]那个更快的疑问.txt
    [20190329]探究sql语句相关mutexes补充2.txt
    [20190328]简单探究sql语句相关mutexes.txt
    [20190324]奇怪的GV$FILESPACE_USAGE视图.txt
    [20190322]测试相同语句遇到导致cursor pin S的疑问.txt
    linux命令(8):cp 命令
    linux命令(7):mv命令
  • 原文地址:https://www.cnblogs.com/TD1900/p/12121332.html
Copyright © 2020-2023  润新知