约束

作者: knot98 | 来源:发表于2018-09-13 17:25 被阅读0次

1. 什么是约束

除了数据类型以外额外添加的约束

2. 为什么要使用约束

为了保证数据的合法性(mysql规则),完整性

3. 分类

not null

非空约束  数据不能为空

default

默认值约束

unique

唯一约束  该字段不能重复
    unique 其实是一种索引
        索引是一种数据结构  用于提高查询效率
    可以为空
    一张表中可以有多个唯一约束
    单列唯一约束:
        mysql> create table t12(`id card` char(18) unique);
        mysql> desc t12;
        +---------+----------+------+-----+---------+-------+
        | Field   | Type     | Null | Key | Default | Extra |
        +---------+----------+------+-----+---------+-------+
        | id card | char(18) | YES  | UNI | NULL    |       |
        +---------+----------+------+-----+---------+-------+
        1 row in set (0.02 sec)
    多列唯一约束:
        mysql> create table t13(`id card` char(18),`phone number` char(11),unique(`id card`,`phone number`));
        mysql> desc t13;
        +--------------+----------+------+-----+---------+-------+
        | Field        | Type     | Null | Key | Default | Extra |
        +--------------+----------+------+-----+---------+-------+
        | id card      | char(18) | YES  | MUL | NULL    |       |
        | phone number | char(11) | YES  |     | NULL    |       |
        +--------------+----------+------+-----+---------+-------+
        2 rows in set (0.01 sec)

primary key

主键约束:用于唯一标识表中一条数据(非空且唯一)
        也就是说从约束的角度去看 主键约束 和 非空加唯一约束  没有区别
        那它们之间的区别是什么?
            唯一约束:是一种索引,必然存在于硬盘的某个文件中(物理存在)
            primary key :是一种逻辑意义上的数据(实际上不存在,抽象概念)
            换句话说主键就是由唯一约束与非空约束组成的约束

    语法:
        mysql> create table t14(
        `student id` int primary key,
        name char(10)
        );
        mysql> desc t14;
        +------------+----------+------+-----+---------+-------+
        | Field      | Type     | Null | Key | Default | Extra |
        +------------+----------+------+-----+---------+-------+
        | student id | int(11)  | NO   | PRI | NULL    |       |
        | name       | char(10) | YES  |     | NULL    |       |
        +------------+----------+------+-----+---------+-------+
        2 rows in set (0.02 sec)

    有无主键的区别?
        1. 无法区分两个相同的数据,比如班级中有两个人名字相同
        2. 有主键则以为着有索引,效率更高
        3. 可以建立关联关系
    多列联合主键:
        mysql> create table t15(
        `id card` char(18),
        `phone number` char(11),
        primary key(`id card`,`phone number`)
        );
        mysql> desc t15;
        +--------------+----------+------+-----+---------+-------+
        | Field        | Type     | Null | Key | Default | Extra |
        +--------------+----------+------+-----+---------+-------+
        | id card      | char(18) | NO   | PRI |         |       |
        | phone number | char(11) | NO   | PRI |         |       |
        +--------------+----------+------+-----+---------+-------+
        2 rows in set (0.02 sec)
    要不要主键??
        必须的,每个表都应该有主键,哪怕不用唯一标识,也应该考虑提升效率
        一般主键的字段都叫 id ,数据类型都用 int 类型
    同一表中设置多个主键没有任何意义
    小练习:
        创建一个员工表 里面存储 员工编号 姓名 年龄 性别;
         mysql> create table emp(
        id int primary key,
        name char(10) not null,
        age int not null,
        sex char(6) default 'male'
        );
        mysql> desc emp;
        +-------+----------+------+-----+---------+-------+
        | Field | Type     | Null | Key | Default | Extra |
        +-------+----------+------+-----+---------+-------+
        | id    | int(11)  | NO   | PRI | NULL    |       |
        | name  | char(10) | NO   |     | NULL    |       |
        | age   | int(11)  | NO   |     | NULL    |       |
        | sex   | char(6)  | YES  |     | male    |       |
        +-------+----------+------+-----+---------+-------+
        4 rows in set (0.02 sec)

        mysql> insert into emp(id,name,age) values
        (1,'杨总',60),
        (2,'egon',59),
        (3,'虎老师',58);
         # 问题? 你很可能忘记上一次的id到多少了,导致你要先查看一下
         # 麻烦,并且影响效率,所以有了auto_increment
        mysql> select * from emp;
        +----+-----------+-----+------+
        | id | name      | age | sex  |
        +----+-----------+-----+------+
        |  1 | 杨总      |  60 | male |
        |  2 | egon      |  59 | male |
        |  3 | 虎老师    |  58 | male |
        +----+-----------+-----+------+
        3 rows in set (0.00 sec)

auto_increment

  自动增长
    作用: 通常搭配主键字段使用,可以自动为你的数据分配主键
    如何分配:
        添加一条数据 主键(id)就自动加1,计数从1开始
    语法:
        mysql> create table t16(
        id int primary key auto_increment,
        name char(10)
        );

        mysql> desc t16;
        +-------+----------+------+-----+---------+----------------+
        | Field | Type     | Null | Key | Default | Extra          |
        +-------+----------+------+-----+---------+----------------+
        | id    | int(11)  | NO   | PRI | NULL    | auto_increment |
        | name  | char(10) | YES  |     | NULL    |                |
        +-------+----------+------+-----+---------+----------------+
        2 rows in set (0.02 sec)

        mysql> insert into t16(name) values
        ('yyh'),
        ('egon'),
        ('lxx');
        mysql> select * from t16;
        +----+------+
        | id | name |
        +----+------+
        |  1 | yyh  |
        |  2 | egon |
        |  3 | lxx  |
        +----+------+
        3 rows in set (0.00 sec)

    如果主键是自动增长 , 你可以跳过此字段,也可以插入null,都会自动增长
    修改自动增长的起始位置:
        alter table 表名 auto_increment = 值
    注意:自动增长,只能用于整型,不能用于字符型

foreign(外键)

相关文章

  • mysql约束

    1, mysql 不支持外键约束 ,条件约束约束分为列级约束,primary 主键约束check 条件约束for...

  • 2018-11-20 mysql 表约束

    知识点一: 表约束 非空约束,唯一约束,自增长,默认约束,主键约束,外键约束 1 not null 非空约束 例子...

  • mysql 约束

    mysql 中常见的约束: 默认约束 非空约束 主键约束 唯一约束 外键约束 自增长约束 顾命思议,主要讲几个容易...

  • MySQL约束简介

    约束能保证数据的完整性和一致性。约束类型:主键约束、唯一约束、非空约束、默认约束、外键约束 主键约束(PRIMAR...

  • mysql基础(二)

    约束 约束保证数据的完整性和一致性,约束分为表级约束和列级约束。表级约束和列级约束有五种约束: NOT NULL ...

  • 初学oracle

    约束: 非空约束:not null 唯一约束:unique 检查约束:check 主键约束:primary ke...

  • MySQL 基础 4 多表设计之外键约束

    1.1 约束 1.1.1 约束的作用   约束是用来保证数据的完整性。 1.1.2 单表约束 主键约束 唯一约束 ...

  • 17/12/13约束

    17/12/13约束 约束命名规则 表明_列名 _约束类型 unique约束(唯一约束) constraint(建...

  • 数据库约束

    约束类型 非空约束 not null 唯一性约束 unique 主键约束 primary key 外键约束 for...

  • XML约束——DTD约束

    约束 XML技术中,可以编写一个文档来约束一个XML的书写规范,约束文档定义了在XML中允许出现的元素名称、属性及...

网友评论

      本文标题:约束

      本文链接:https://www.haomeiwen.com/subject/ofcggftx.html