• MySQL


    分组查询

    注意分组之后只能加上分组的字段还有聚合函数,因为加上其他字段是没有意义的

    select sex,avg(math) from student group by sex;

    限定分组前的条件:在group by之前使用where限定。

    限定分组之后的条件:having 

    select sex,avg(math) from student where math>70 group by sex having count(id)>2;

    查询在数学成绩大于70分的人中按照性别分组并且每个组人数大于2

    where和having的区别

     1、where在分组之前进行限定,如果不满足条件就不准参与分组,having在分组之后进行限定,如果不满足结果就不会被查询出来。

     2、where不能后面跟上聚合语句,having之后可以跟上聚合语句

    分页查询

    语法:limit,开始索引,每页查询的数

    select * from student limit 0,3;
    select * from student limit 3,3;

    公式,开始的索引当前的页码减去1,再成每页显示的条数。

    select 字段列表
    from表
    where条件列表
    group by分组字段
    having分组之后的限定
    order by 排序
    limit 条件限定

    模糊查询

    占位符    "_"任意单个字符  "%"任意多个字符(0个也是可以的)

    select * from student where name like '马%'

    查询姓马的

    查询名字是三个字的人三个"_"

    select * from student where name like '___'

    约束

    (对表中的数据进行限定,保证数据的有效性和完整性)

    分类:主键约束、非空约束,唯一约束(索引),外键约束

    非空约束:not null 表示值不能是空的

    创建表时候添加约束

    create table stu(
      id int,
      name varchar(20) not null  --非空约束
    );

    删除约束

    alter table stu modify name varchar(20);

    创建表之后添加约束

    alter table stu modify name varchar(20) not null;

    唯一约束:unique,表示值不能重复(null值 是可以重复的)

    create table stu(
      id int ,
      phone_number varchar(20) unique
    )

    删除

    alter table stu drop index phone_number;

    创建表之后添加唯一约束

    alter table stu modify phone_number varchar(20) unique;


    主键约束:primary key 

    1、表示非空且唯一

    2、一张表只能有一个主键约束

    3、主键就是表中的唯一标识

    创建表时候添加主键约束

    create table stu(
      id  int primary key auto_increment,   -- 表示自增长
      name varchar(20)
    )

    删除主键约束

    alter table stu drop primary key

    删除自动增长

    alter table stu modify id int  -- 注意因为主键约束使用这个是不能直接删除的,所以这个可以用来删除自增长

    添加自增长(通常和主键一起使用)

    alter table stu modify id int auto_increment

    添加主键约束

    alter table stu modify id int primary key


    外键约束:foreign key

      1.在创建表时候可以添加外检约束

        create table 表名(

          constraint 外键名称 foreign key 外键列名 references 主表名称(主表列名称)

        )

        create table employee(
          id int primary key auto_increment,
          name varchar(20),
          age int ,
          dep_id int , --外键对应主表的主键
          constraint emp_dept_fk foreign key(dep_id) reference department(id) on update cascade--设置及联更新操作
        )

    这里不能直接删除department表,因为有其他表引用这个表。外键可以是null但是不能是不存在的值

    删除外键

    alter table employee drop foreign key emp_dept_fk;

    创建表之后添加外键

    alter table employee add constraint emp_dept_fk foreign key (dep_id) references department(id);

    级联操作,添加外键的时候设置级联(谨慎使用,特别是级联删除,使用之前好好考虑)

    部门id改变,引用department表的表中也需要修改

    constraint emp_dept_fk foreign key(dep_id) reference department(id) on update cascade--设置及联操作

    级联删除

    constraint emp_dept_fk foreign key(dep_id) reference department(id) on delete cascade--设置及联删除操作

    注意被引用中删除行,对应引用表中引用的就会被删除。


    数据库的设计

    1.多表之间的关系

      1.一对一关系:人和身份证 一个人只能有一个身份证,一个身份证只能对应一个人

        可以在任意的一方添加外键,指向另一方。并且让外键唯一,给外键添加唯一约束unique(直接合成一张表)

      2.一对多或者多对一关系:部门和员工,一个部门有多个员工,一个员工只能对应一个部门。

        实现方式:在多的一方建立外键指向一的一方的主键

      3.多对多的关系:学生和课程之间的关系。

        实现方式:通过中间表实现,中间表至少有两个字段,这两个字段分别指向两个表的主键,这两个字段分别作为两个外键,指向两张表的主键,这两个就是联合主键,

    案列,旅游项目中

    分类表->路线表  一对多

    分类表

    create category(
    
      cid int primary key auto_increment,
    
      cname varchar(100) not null unique
    
    )

    线路表

    create tab_route(
    
      rid int primary key auto_increment,
    
      rname varchar(100) not null unique,
    
      price doublel,
    
      rdate date,
    
      cid int ,
    
      foreign key (cid) reference category(cid)
    
    )

    用户表

    create tab_user(
    
      uid int primary key auto_increment,
    
      username varchar(100) unique not null,
    
      password varchar(30) not null,
    
      name varchar (100) ,
    
      birthday date,
    
      sex varchar(1) default  '',
    
      telephone varchar(11),
    
      email varchar(100)
    
    )

    路线表->用户表 多对多

    创建中间表favorite

    create tab_favorite(
    
      rid int ,
    
      date datetime,
    
      uid int ,
    
      primary key(rid,uid),--联合主键
    
      foreign key (rid) references tab_route(rid),
    
      foreign key(rid) references tab_user(uid)
    
    )

    2.数据库设计的范式

    第一范式:每列都是不可分割的原始数据

    第二范式:在及第一范式的基础上, 非码属性必须完全依赖码属性(消除非主属性对主码属性的部分依赖)

      函数依赖:如果通过A的属性的值可以确定

      完全函数依赖:如果A是一个属性组,则B属性值的确定完全依赖A属性中所有的属性值

       部分函数依赖:如果A是一个属性组,B属性的确定只需要A中的某一个确定

      传递函数依赖:通过A属性确定B属性,由B属性确定C

      码:字啊一张表中,如果一个属性或属性组,被其他所有属性完全依赖,就成这个属性是这个表的码

        码属性:属性组中的所有属性

        非码属性:除上面之外的。

    第三范式:在二范式的基础上消除传递依赖,(这样就不会因为某个行的删除,对应系也会删除)

    满足第一范式(属性不可分割)下面表中的码是学号和课程名

     

     满足第二范式(非码属性完全依赖码属性)

     满足第三范式(上面系主任依赖系名,系名依赖学号,删除学生对应的系和主任也会删除。)


    数据库的备份

    命令行:

      语法:mysqldump -u用户名 -p密码  数据库名称> 保存路径

      还原:登录数据库,创建数据库,使用数据库,执行文件source文件的路径

        语法:source 上面保存文件的路径。

    图形化工具:右键导出,右键执行sql脚本

  • 相关阅读:
    Unity3D中使用委托和事件
    进程与线程浅析(三)之线程三国战斗模拟
    NGUI学习笔记(一)UILabel介绍
    Mongodb学习笔记(2)--修改器
    Mongodb学习笔记(1)--入门
    Java8学习笔记(七)--Collectors
    Java8学习笔记(六)--Optional
    Java8学习笔记(五)--Stream API详解[转]
    Java8学习笔记(四)--接口增强
    Java8学习笔记(三)--方法引入
  • 原文地址:https://www.cnblogs.com/feixiangdecainiao/p/10759162.html
Copyright © 2020-2023  润新知