暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL数据库的六约束

赤子孤独 2021-04-12
376
 点击蓝字 
 关注我们 


MySQL

MySQL

嘿,这只海豚好看吗?是的,这是一只自由开放的海豚——MySQL


我们假定大家已经下载并成功安装好了MySQL数据库,学会了基本的查表建表操作。那么今天,就让我们走进六大约束的学习吧。


1&2&3

4&5



$ 课前回顾


1. 开启MySQL服务

    net start mysql80
    复制


    2. 登录进入MySQL数据库

      mysql -uroot -p
      复制


      3. 查看数据库的内容

        show databases;
        复制


        4. 创建一个数据库(名称可自定义)

          create database sorry_for_delay;
          复制


          5. 选中所创建的数据库

            use sorry_for_delay;
            复制


            6. 创建数据表

              CREATE TABLE class2008(
              name VARCHAR(20),
              sex CHAR(1),
              birth DATE,
              privence VARCHAR(20)
              );
              复制


              7. 查看库中的数据表

                show tables;
                复制

                8. 查看数据表的全部具体内容

                  select * from sorry_for_delay;
                  复制

                  9. 数据表的描述(与今天的内容息息相关)

                    desc sorry_for_delay;
                    复制


                    $ 六大约束

                    好了,正式开搞!(注:所以代码行均可向右滑动查看)


                    可以看到使用describe命令后,出现了上图的表。Null \ Key \ Default \ Extra 等字样。这些与我们接下来的约束息息相关! 

                    #

                    主键约束

                    它能够唯一确定一张表中的一条记录,

                    也就是我们通过给某个字段添加约束,

                    就可以使得该字段不重复且不为空.

                    primary key

                      create table user1(
                      id int primary key,--主键约束id不可重复且不可为空。
                      name varchar(20)
                      );
                      复制

                      联合主键

                      (即id与name不可以完全一样

                      ,但可以某一个相同)

                        create table user1(
                        id int ,
                        name varchar(20),
                        password varchar(20),
                        primary key(id,name)--即id与name不可以完全一样
                        );
                        复制

                        修改主键约束的相关操作

                        (使用alter命令)

                          --修改表结构,添加主键约束
                          alter table user4 add primary key(id);
                          --删除主键约束
                          alter table user4 drop primary key;
                          --使用modify修改字段,添加主键约束
                          alter table user4 modify id int primary key;
                          复制


                          #

                          自增约束

                          只要联合主键值加起来不重复即可

                            create  table user3(
                            id int primary key auto_increment,
                            name varchar(20)
                            );
                            复制

                            两次只插入name zhangsan,

                            id会按顺序自动生成。

                                mysql> insert into user3 (name) values('zhangsan');
                              Query OK, 1 row affected (0.05 sec)


                              mysql> select * from user3;
                              +----+----------+
                              | id | name |
                              +----+----------+
                              | 1 | zhangsan |
                              | 2 | zhangsan |
                              +----+----------+
                              2 rows in set (0.00 sec)
                              复制


                              #

                              唯一约束

                              约束修饰字段的值不可以重复

                                create table user5(
                                id int,
                                name varchar(20)
                                );
                                alter table user5 add unique(name);
                                复制

                                或者在创建的时候添加

                                  --在创建user6的时候添加
                                  create table user6(
                                  id int,
                                  name varchar(20),
                                  unique(name)
                                  );
                                  复制

                                  或者创建时在字段后添加

                                    create table user6(
                                    id int,
                                    name varchar(20) unique
                                    );
                                    复制

                                    运用alter命令进行修改操作

                                      --如何删除唯一约束
                                      alter table user7 drop index name;
                                      --modify添加
                                      alter table user7 modify name varchar(20unique;
                                      ----总结;
                                      ------1、建表的时候添加
                                      ------2、可以使用alter……add……
                                      ------3、alter……modify……
                                      ------4、删除alter……drop……
                                      复制



                                      #

                                      非空约束

                                      修饰的字段不能为空

                                        create table user8(
                                        id int,
                                        name varchar(20) not null
                                        );
                                        复制

                                        这时调用desc命令时显示

                                        (注意NULL!)

                                          mysql> desc user8;
                                          +-------+-------------+------+-----+---------+-------+
                                          | Field | Type | Null | Key | Default | Extra |
                                          +-------+-------------+------+-----+---------+-------+
                                          | id    | int         | YES  |     | NULL    |       |
                                          | name | varchar(20) | NO | | NULL | |
                                          +-------+-------------+------+-----+---------+-------+
                                          2 rows in set (0.05 sec)
                                          复制


                                          #

                                          默认约束

                                          当我们插入字段值的时候

                                          如果没有传值,就使用默认值

                                          (这里age默认为10)

                                            create table user10(
                                            id int,
                                            name varchar(20) ,
                                            age int default 10
                                            );
                                            复制

                                            这是调用desc命令时

                                            (注意Default!)

                                              mysql> desc user10;
                                              +-------+-------------+------+-----+---------+-------+
                                              | Field | Type | Null | Key | Default | Extra |
                                              +-------+-------------+------+-----+---------+-------+
                                              | id | int | YES | | NULL | |
                                              | name | varchar(20) | YES | | NULL | |
                                              | age | int | YES | | 10 | |
                                              +-------+-------------+------+-----+---------+-------+
                                              3 rows in set (0.05 sec)


                                              复制

                                              例如使用下面的insert命令,

                                              就会调用默认值

                                                insert into user10(id, name) values(1,'zhangsan');
                                                复制

                                                #

                                                外键约束

                                                外键约束相较而言比较麻烦,

                                                因为它涉及到了两个表,

                                                父表与子表。

                                                例如班级信息表与学生信息表。

                                                我们也以此为例展开讲解。

                                                (注意students表中的最后一句)

                                                  create table classes(
                                                  id int primary key,
                                                  name varchar(20)
                                                  );
                                                  --学生表
                                                  create table students(
                                                  id int primary key,
                                                  name varchar(20),
                                                  class_id int,
                                                  foreign key(class_id) references classes(id)
                                                  );
                                                  复制

                                                  我们来看一下分别调用desc命令

                                                  的结果(注意key中的区别)

                                                    mysql> desc classes;
                                                    +-------+-------------+------+-----+---------+-------+
                                                    | Field | Type | Null | Key | Default | Extra |
                                                    +-------+-------------+------+-----+---------+-------+
                                                    | id | int | NO | PRI | NULL | |
                                                    | name | varchar(20) | YES | | NULL | |
                                                    +-------+-------------+------+-----+---------+-------+
                                                    2 rows in set (0.01 sec)
                                                    mysql> desc students;
                                                    +----------+-------------+------+-----+---------+-------+
                                                    | Field | Type | Null | Key | Default | Extra |
                                                    +----------+-------------+------+-----+---------+-------+
                                                    | id | int | NO | PRI | NULL | |
                                                    | name | varchar(20) | YES | | NULL | |
                                                    | class_id | int | YES | MUL | NULL | |--key中有了MUL
                                                    +----------+-------------+------+-----+---------+-------+
                                                    3 rows in set (0.00 sec)
                                                    复制

                                                    我们再分别向其中添加数据

                                                      insert into classes values(1,'一班');
                                                      insert into classes values(2,'二班');
                                                      insert into classes values(3,'三班');
                                                      insert into classes values(4,'四班');
                                                      insert into students values(1001,'zhangsan',1);
                                                      insert into students values(1002,'lisi',2);
                                                      insert into students values(1003,'wangwu',3);
                                                      insert into students values(1004,'zhaliu',4);
                                                      复制

                                                      若添加主表中(班级表)没有的5班,

                                                      则会提示下列错误。

                                                        mysql> insert into students values(1005,'zaliu',5);
                                                        ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test01`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
                                                        复制

                                                        注意

                                                        1 主表中没有的数据值,

                                                            在副表中是不可以使用的

                                                        2 主表记录被副表引用,

                                                            是不可以被删除的。


                                                        好了,就这么多了,谢谢关注。


                                                        赤子孤独

                                                        微信号|赤子孤独

                                                        bilibili|赤子孤独


                                                        文章转载自赤子孤独,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                        评论