zoukankan      html  css  js  c++  java
  • mysql 约束

    约束的作用:保证数据的完整性和一致性

      表的设计

      1.not null(不可空) 与 default(默认值)

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

      2 unique (不同的),在mysql中称为单列唯一

         -单列唯一

         -多列唯一 

        - 组合唯一(联合唯一):只要有一列不同,就可以插入数据

      3 primary key(索引优化查询)

        sql版本中,一张表中只允许有一个主题,通常都是id,cid,nid,sid.

        一个表中可以:

        单列做主键

        多列做主键(复合主键):表的主键含有一个以上的字段组成

        约束:等价于not null +unique,字段的值不为空且唯一

        存储引擎默认是innodb;对应innodb存储引擎来说,一张表必须有一个主键。

        4 auto_increment

        约束:约束的字段为自动增长,约束的字段必须同时被key约束

    不指定id,则自动增长
    mysql> insert into student values(4,'asb','female');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into student values(7,'wsb','female');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from student;
    +----+--------+--------+
    | id | name   | sex    |
    +----+--------+--------+
    |  1 | 老白   | male   |
    |  2 | 小白   | male   |
    |  4 | asb    | female |
    |  7 | wsb    | female |
    +----+--------+--------+
    rows in set (0.00 sec)
    
    # 再次插入一条不指定id的记录,会在之前的最后一条记录继续增长
    mysql>  insert into student(name) values ('大白');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from student;
    +----+--------+--------+
    | id | name   | sex    |
    +----+--------+--------+
    |  1 | 老白   | male   |
    |  2 | 小白   | male   |
    |  4 | asb    | female |
    |  7 | wsb    | female |
    |  8 | 大白   | male   |
    +----+--------+--------+
    rows in set (0.00 sec)
    
    也可以指定id
    也可以指定id
    mysql> delete from student;
    Query OK, 5 rows affected (0.00 sec)
    
    mysql> select * from student;
    Empty set (0.00 sec)
    
    mysql> select * from student;
    Empty set (0.00 sec)
    
    mysql> insert into student(name) values('ysb');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from student;
    +----+------+------+
    | id | name | sex  |
    +----+------+------+
    |  9 | ysb  | male |
    +----+------+------+
    row in set (0.00 sec)
    
    #应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它
    mysql> truncate student;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql>  insert into student(name) values('xiaobai');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from student;
    +----+---------+------+
    | id | name    | sex  |
    +----+---------+------+
    |  1 | xiaobai | male |
    +----+---------+------+
    row in set (0.00 sec)
    
    mysql>
    
    对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长
    对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长

       5  foreign key  外键   建立两张表之间的联系

    dep:被关联表(主表)
    create table dep(
                    id int primary key auto_increment,
                    name varchar(20) not null,
                    des  varchar(30) not null
                );
    emp:关联表(从表)
    create table emp(
                    eid int primary key auto_increment,
                    name char(10) not null,
                    age int not null,
                    dep_id int not null,
                    
                    constraint fk_dep foreign key(dep_id) references dep(id) 
                    on delete cascade # 同步删除
                    on update cascade,  # 同步更新
    );

    变种:

      1.先站在表emp的角度  表emp的多条记录对应表dep的一条记录  成立

      2.先站在表dep的角度   表dep的多条记录对应表emp的一条记录  成立

      多对一 或者 一对多  1和2条件有一个成立

      多对多  1和2都成立  通过建立第三张表  来建立多对多的关系

      一对一  1和2都不成立,给一个表的fk的字段设置约束unique

    create table book(
                     id int primary key auto_increment,
                     name varchar(20)
                    
                    );
                    create table author(
                        id int primary key auto_increment,
                        name varchar(20)
                    );
                    
                    create table autho_book(
                        id int primary key auto_increment,
                        book_id int not null,
                        author_id int not null,
                        constraint fk_book foreign key(book_id) references book(id)
                        on delete cascade
                        on update cascade,
                        constraint fk_author foreign key(author_id) references author(id)
                        on delete cascade
                        on update cascade
                    
                    );
    多对多

      

     

        

      

     

      

        

  • 相关阅读:
    ubuntu 安装 redis desktop manager
    ubuntu 升级内核
    Ubuntu 内核升级,导致无法正常启动
    spring mvc 上传文件,但是接收到文件后发现文件变大,且文件打不开(multipartfile)
    angular5 open modal
    POJ 1426 Find the Multiple(二维DP)
    POJ 3093 Margritas
    POJ 3260 The Fewest Coins
    POJ 1837 Balance(二维DP)
    POJ 1337 A Lazy Worker
  • 原文地址:https://www.cnblogs.com/lzmdbk/p/9793024.html
Copyright © 2011-2022 走看看