zoukankan      html  css  js  c++  java
  • mysql :完整性约束

    ---恢复内容开始---

    一:介绍

    约束条件与数据类型的宽度一样 ,都是可选参数

    作用,用于保证数据的完整性和 一致性

    主要分为:

    primary key (pk) 标识该字段为该表的主键, 可以唯一的标识记录
    foreign key (fk) 标识该字段为该表的外键
    not null         标识该字段不能为空
    unique key(uk)  标识该字段的值是唯一的
    auto_increment  标识该字段的值自动增长(整数类型吗而且为主键)
    default  为该字段设置默认值
    
    
    unsigned 无符号
    zerofill 使用0填充
    说明:
    1:是否允许为空, 默认NULL,可设置NOT NULL ,字段不允许为空吗必须赋值,
    2:字段是否有默认值, 默认值是NULL,如果插入记录时不给字段赋值,此字段就使用默认值null.
    sex enum('male','female') not null default 'male'
    age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
    
    3:是否是key
    主键:primary key
    外键:foreign key
    索引(index,unique......)

    二: not null 与default

    是否可空:null表示空, 非字符串

    not null 表示不可空

    null-可空

    default  默认

    默认值 创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

     三  unique  唯一约束

    ==========================
    设置唯一约束 UNIQUE
    
    方法一:
    create table department1(
    id int,
    name varchar(20) unique,
    comment varchar(100)
    );
    
    
    mysql> insert into department1 values(1,'IT','技术');
    Query OK, 1 row affected (0.00 sec)
    mysql> insert into department1 values(2,'IT','技术');
    ERROR 1062 (23000): Duplicate entry 'IT' for key 'name'
     
    
    #在创建department1 表时,已经在name处设置了唯一,所以name 处得值就不可以是相同得, 每个都得 是唯一得。

    四: primary key 

    从约束得角度看primary key 字段的值不为空且唯一, 那么我们直接使用 not null +unique 不就可以了吗,要它干什么?

    primary key 又称主键  是innodb 的存储引擎组织数据的依据, innodb称之为索引组织表, 一张表中必须有且只有一个主键。

    ============单列做主键===============
    #方法一:not null+unique
    create table department1(
    id int not null unique, #主键
    name varchar(20) not null unique,
    comment varchar(100)
    );
    
    mysql> desc department1;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | NO   | UNI | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.01 sec)
    
    #方法二:在某一个字段后用primary key
    create table department2(
    id int primary key, #主键
    name varchar(20),
    comment varchar(100)
    );
    
    mysql> desc department2;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | YES  |     | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.00 sec)
    
    #方法三:在所有字段后单独定义primary key
    create table department3(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint pk_name primary key(id); #创建主键并为其命名pk_name
    
    mysql> desc department3;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | id      | int(11)      | NO   | PRI | NULL    |       |
    | name    | varchar(20)  | YES  |     | NULL    |       |
    | comment | varchar(100) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    rows in set (0.01 sec)

    五:auto_increment 自增, 

    1、通常与primary key 连用, 而且通常是给id字段加,无需在于其赋值

    2、auto_increment 只能给被定义成key (unique key, primary key,)的字段加。

    create table t20(
        id int primary key auto_increment,
        name char(16)
    )engine=innodb;
    
    
    # 一般是加在id上

     

    ---恢复内容结束---

  • 相关阅读:
    尝试用博客园写个人日记
    db4o能代替Hibernate吗?
    RSS是否能支持携带扩展的权重信息呢?
    log4view可以更清楚地看log文件,不知道咋用
    tafiti.com体验微软的silverlight
    推荐两个插件DPack, Resharper
    用美味书签的标签实现类似nextlib的知识管理
    进程通讯的多种方式
    多维角度聊聊结对编程
    在Windows下编译和.NET运行MemCached
  • 原文地址:https://www.cnblogs.com/lx3822/p/9011071.html
Copyright © 2011-2022 走看看