• 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
                    
                    );
    多对多

      

     

        

      

     

      

        

  • 相关阅读:
    套接字(socket)
    网络编程
    面向对象之反射
    面向对象的多态
    面向对象之封装
    面向对象之继承
    面向对象之编程思想
    python中的包
    python中的序列化模块
    正则表达式
  • 原文地址:https://www.cnblogs.com/lzmdbk/p/9793024.html
Copyright © 2020-2023  润新知