mysql学习总结(二)

7 篇文章 0 订阅

接着之前的mysql记录心得,还是砍草了某马的教程,今天主要复习了mysql的约束:

2.1什么数据约束

      对用户操作表的数据进行约束

2.2 默认值

      作用:当用户对使用默认值的字段不插入值的时候,就使用默认值。

      注意:                   

                1)对默认值字段插入null是可以的。

                2)对默认值字段可以插入非null

2.3 非空

       作用:限制字段必须赋值

       注意:

                 1)非空字符必须赋值

                 2)非空字符不能赋null

2.4 唯一

       作用:对字段的值不能重复

       注意:

                1)唯一字段可以插入null                            

                2)唯一字段可以插入多个null(注意)


2.5 主键(非空+唯一)--->   primary key

          作用:非空+唯一

          注意:                     

                   1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

                    2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的 id字段。

2.6 自增长 ---> auto_increment

           作用:自动递增

2.7 外键(重要)

           作用:约束两种表的数据

                 

              出现两种表的情况:

                          解决数据冗余高问题:独立出一张表            

                                 例如:员工表  和  部门表

                                 问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入!!!!!     

                                 使用外键约束:约束插入员工表的部门ID字段值

                                 解决办法: 在员工表的部门ID字段添加一个外键约束


           用例:

                     -- 部门表(主表)

                                CREATE TABLE dept(

                                          id INT PRIMARY KEY,

                                          deptName VARCHAR(20)

                                  )

                       -- 修改员工表(副表/从表)       

                                CREATE TABLE employee(

                                          id INT PRIMARY KEY,

                                          empName  VARCHAR(20),

                                          deptId INT,-- 把部门名称改为部门ID

                                         --声明一个外键约束

                                          CONSTRAINT emlyee_dept_fk    FOREIGN KEY  (deptId) REFERENCES   dept(id)

                                                                  --  外键名称                    外键                                          参考表(参考字段)

                                )

 

             注意:

                          1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

                          2)主表的参考字段通用为主键!

                          3)添加数据:先添加主表,再添加副表

                          4)修改数据:先修改副表,再修改主表

                          5)删除数据:先删除副表,再删除主表


2.8 级联操作

               问题:当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表!但是,我们希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现!!!

               级联修改: ON UPDATE CASCADE

               级联删除: ON DELETE CASCADE

              

               用例:

                      

                        CREATE TABLE employee(

                                    id  INT PRIMARY KEY,

                                    empName  VARCHAR(20),

                                    deptId  INT,-- 把部门名称改为部门ID

                                     --声明一个外键约束

                                    CONSTRAINT   emlyee_dept_fk   FOREIGN  KEY(deptId)   REFERENCES   dept(id) ON   UPDATE CASCADE ON DELETE CASCADE

                                    -- ON CASCADE UPDATE :级联修改

                                                  --           外键名称                  外键                                                   参考表(参考字段)

                        )

              注意:级联操作必须在外键基础上使用

3关联查询:       (便于理解,一下配合用例说明)

           -- 需求:查询员工及其所在部门(显示员工姓名,部门名称)

           -- 多表查询规则:1)确定查询哪些表   2)确定哪些哪些字段   3)表与表之间连接条件 (规律:连接条件数量是表数量-1)

           -- 2.1 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)

             例如:SELECT empName,deptName FROM employee,dept;

          -- 2.2 内连接查询:只有满足条件的结果才会显示(使用最频繁)

                    -- 1)确定查询哪些表  -- 2)确定哪些哪些字段  -- 3)表与表之间连接条件


                             SELECT empName,deptName FROM  employee,dept WHERE  employee.deptId=dept.id


                   内连接的另一种语法(条件链接关键字 ON)


                           SELECT empName,deptName FROM employee INNER JOIN dept ON employee.deptId=dept.id;


                 -- 使用别名

                           SELECT e.empName,d.deptName FROM  employee e INNER JOIN dept d ON e.deptId=d.id;


            -- 2.2 左[外]连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null(注意:左外连接:左表的数据一定会完成显示!)


                           SELECT d.deptName,e.empName FROM  dept d LEFT  OUTER JOIN employee e ON  d.id=e.deptId;


              -- 2.3 右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null(注意:右外连接:右表的数据一定会完成显示!)


                         SELECT d.deptName,e.empName  FROM  employee e RIGHT  OUTER  JOIN dept d ON  d.id=e.deptId;


              -- 2.4 自连接查询


                        SELECT e.empName,b.empName  FROM  employee e  LEFT  OUTER  JOIN employee b ON  e.bossId=b.id;


      以上就是今晚的收获, 感谢老师辛苦付出!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值