zoukankan      html  css  js  c++  java
  • 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脚本

  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/feixiangdecainiao/p/10759162.html
Copyright © 2011-2022 走看看