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

  

 

    

  

 

  

    

原文地址:https://www.cnblogs.com/lzmdbk/p/9793024.html