zoukankan      html  css  js  c++  java
  • mysql 数据库学习第三天

    数据的约束 (对用户操作表的数据的约束)

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

                注:对默认值字段可以插入null

                      默认值:字段   数据类型   default  默认值

         非空:限制字段必须赋值

               注:非空字段必须赋值,非空字段不能为null

                    字段   数据类型  not  null

         唯一:对字段的值不能重复

              注:对唯一字段可以插入一个或者多个null

                   字段   数据类型  unique

         主键:非空+唯一

                通常来说,主键是用来记录每张表的唯一性,一般选择没有业务作用的id字段作为主键

                id  int primary key,

        自增长:字段自动增长

               id  int  primary key auto_increment,

               注:自增字段可以不赋值,自动递增

                     delete  from 表名;  不影响自增长约束(删除表数据后,下次插入数据,自增长字段会从上次的值的基础上继续增长)

                    truncate  from 表名; 影响自增长约束(删除表数据后,下次插入数据,自增长字段会从0的基础上继续增长)

       外键:约束两张表的数据

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

            例如: 员工表    部门表

            问题出现:在插入员工表数据的时候,员工表的部门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 fk_deptid  foreign key (deptid) references dept(id)

              )

             注意:

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

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

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

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

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

    级联操作

         当有外键约束时,必须修改或者删除副表中所关联的数据,才能修改或者删除主表。

         但是若直接修改或者删除主表数据,可以使用级联操作实现。

          级联修改   on update cascade

          级联删除   on delete cascade

          onstraint fk_deptid  foreign key (deptid) references dept(id) on update cascade on delete cascade

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

    连接查询(多表查询)

          连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。连接之后并非形成了一个新的数据表,而是一种“内存形态”。

         基本形式: from 表1 [连接方式] join 表2 [on 连接条件]

         交叉连接:将两个表不设定任何条件的连接结果。数学上成为笛卡尔积

                               from 表1 [cross] join 表2; cross可省略  可用inner代替

            内连接: 找出(过滤)在交叉连接的结果表中的表1的字段1的值等于表2的字段2的值的那些

    行。

                    from  1  [inner]  join  2  on  1.字段1=2.字段2

          左[外]连接:内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应放右边表的字段的位置就自动补为null”值。

                   from  1  left  [outer]  join   2   on  连接条件;

       右[外]连接:在内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应本应放左边表的字段的位置就自动补为null”值。

                   from  1  right  [outer]  join   2   on  连接条件;

        全[外]连接:其实是左右连接的“并集”(消除重复项),即内连接的结果,加上左表中不满足条件的所有行(右边对应补null),再加上,右表中不满足条件的所有行(左边对应补null)。

                  from  1  full  [outer]  join  2  on  连接条件;

             注:mysql中其实不认识全[]连接语法,即mysql这个软件本身不支持全连接的语法。

      子查询  子查询就是把一个查询的结果当作另一个查询的条件。

       in  子查询     

            语法:where  操作数  in (1,值2....

      any 子查询

         语法:where 操作数  any(值1,值2,....)

    联合查询 union

         联合查询就是将两个select语句的查询结果‘层叠’到一起成为一个‘大结果’。

         两个查询结果能够联合的先觉条件就是:结果字段数相等。

        select 语句1

         union [all | distinct]

         select 语句2;

        说明:

              1,两个select语句的输出段(结果字段)一样数目一样,应用中通常类型一样才有意义。

              2,结果集中的字段以第一个select语句的字段为准。

              3,第一个select语句的字段可以做别名,但如果做别名,则后续的wheregrouporder等子句应该用该别名。

              4,联合查询默认是会消除重复项的(DISTINCT),要想不消除,则必须明确些“ALL”。

              5,如果要对整个联合结果进行排序或limit,则应该对各自的select语句加括号:

           (select 语句1

                 union

           (select 语句2

                 order  by .....  limit ....

  • 相关阅读:
    【算法】Manacher算法
    python 02 python入门知识
    python 01:计算机基础知识
    表示数值的字符串
    C++ 迭代器(STL迭代器)iterator详解
    构建乘积数组
    C++ 容器(STL容器)
    数组中重复的数字
    把字符串转换成整数
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/Java-125/p/8578312.html
Copyright © 2011-2022 走看看