• 7-[表操作]--完整性约束


    1、介绍

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

    作用:用于保证数据的完整性和一致性
    主要分为:

    PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
    FOREIGN KEY (FK)    标识该字段为该表的外键
    NOT NULL    标识该字段不能为空
    UNIQUE KEY (UK)    标识该字段的值是唯一的
    AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
    DEFAULT    为该字段设置默认值
    
    UNSIGNED 无符号
    ZEROFILL 使用0填充

     

    2、zerofill:使用0填充    UNSIGNED:无符号

     

     

    3、not null与default

      

    #==================not null====================
    mysql> create table t1(id int); #id字段默认可以插入空
    mysql> desc t1;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    mysql> insert into t1 values(); #可以插入空
    
    
    mysql> create table t2(id int not null); #设置字段id不为空
    mysql> desc t2;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | NO   |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    mysql> insert into t2 values(); #不能插入空
    ERROR 1364 (HY000): Field 'id' doesn't have a default value
    
    
    
    #==================default====================
    #设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值
    mysql> create table t3(id int default 1);
    mysql> alter table t3 modify id int not null default 1;
    ==================综合练习====================
    mysql> create table student(
        -> name varchar(20) not null,
        -> age int(3) unsigned not null default 18,
        -> sex enum('male','female') default 'male',
        -> hobby set('play','study','read','music') default 'play,music'
        -> );
    mysql> desc student;
    +-------+------------------------------------+------+-----+------------+-------+
    | Field | Type                               | Null | Key | Default    | Extra |
    +-------+------------------------------------+------+-----+------------+-------+
    | name  | varchar(20)                        | NO   |     | NULL       |       |
    | age   | int(3) unsigned                    | NO   |     | 18         |       |
    | sex   | enum('male','female')              | YES  |     | male       |       |
    | hobby | set('play','study','read','music') | YES  |     | play,music |       |
    +-------+------------------------------------+------+-----+------------+-------+
    mysql> insert into student(name) values('egon');
    mysql> select * from student;
    +------+-----+------+------------+
    | name | age | sex  | hobby      |
    +------+-----+------+------------+
    | egon |  18 | male | play,music |
    +------+-----+------+------------+
    
    验证
    验证

    4、 unique 唯一

       (1)单列唯一

    设置唯一约束 UNIQUE===============
    #方法一:
        create table department(
        id int ,
        name char(10) unique
    );
    desc department;
    
    
    insert into department values
    (1,'IT'),
    (2,'IT');
    
    
    # 方法2:
    create table department2(
        id int,
        name char(10),
        unique(id),
        unique(name)
    );
    
    desc department2;
    
    insert into department2 values
    (1,'IT'),
    (2,'sale');

     

      (2)联合唯一

    # 联合唯一
    create table services(
        id int,
        ip char(15),
        port int,
        unique(id),
        unique(ip,port)
    );
    
    desc services;
    
    insert into services values
    (1,'192.168.0.1',80),
    (2,'192.168.0.2',80),
    (3,'192.168.0.2',82);
    
    select * from services;
    
    insert into services values(5,'192.168.0.1','80');

    5、 primary key

    约束:not null unqiue
    存储引擎(innodb):对于innodb存储引擎来说,一张表必须有一个主键

     

      (1)单列主键

    单列做主键===============
    #方法一:not null+unique
    create table department1(
    id int not null unique, #主键(只是约束条件形式的),primary key必须满足两个条件
    name varchar(20) not null unique,
    comment varchar(100)
    );
    
    #方法二:在某一个字段后用primary key
    create table department2(
    id int primary key, #主键
    name varchar(20),
    comment varchar(100)
    );
    
    #方法三:在所有字段后单独定义primary key
    create table department3(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint pk_name primary key(id); #创建主键并为其命名pk_name

     

     

       (2)复合主键

    create table service(
    ip varchar(15),
    port char(5),
    service_name varchar(10) not null,
    primary key(ip,port)       #复合主键
    );    

     

    6、 auto_increment:自动增长,被key约束

      (1)自动增长

    #不指定id,则自动增长

    #也可以指定id

    #对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长

      

      (2) 清空表:delete 、truncate

    # 应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它
    
    delete from t20;
    delete from t20 where id = 3;
    insert into t20(name) values
    ('xxx');
    
    truncate t20; #应该用它来清空表
    
     

       

      (3)步长与偏移量

        show variables like 'auto_inc%';
    
        #步长:
        auto_increment_increment默认为1
        #起始偏移量
        auto_increment_offset默认1

      

        #设置步长
        set session auto_increment_increment=5;  # 基于会话级别
        set global auto_increment_increment=5;   # 修改全局级别的步长(所有会话都生效)
        

     

        #设置起始偏移量
        set global auto_increment_offset=3;
        强调:起始偏移量<=步长
        mysql> show variables like 'auto_incre%'; #需要退出重新登录

    # 验证    
          create table t21(
            id int primary key auto_increment,
            name char(16)
        );
        
        insert into t21(name) values
        ('egon'),
        ('alex'),
        ('wxx'),
        ('yxx');
            

     

    2

    3

    4

    5

    6

    7:

    
    
    
  • 相关阅读:
    [HDU3247]Resource Archiver
    [POJ2243]考研路茫茫——单词情结
    [POJ2778]DNA Sequence
    [bzoj3670] [Noi2014]动物园
    [bzoj3786] 星系探索
    [bzoj1493] [NOI2007]项链工厂
    postgreSQL的设置自增主键初始值
    postgreSQL绝对值
    GitHub上新建或删除仓库Repository
    Intellij Idea上传本地项目到Git
  • 原文地址:https://www.cnblogs.com/venicid/p/9025070.html
Copyright © 2020-2023  润新知