zoukankan      html  css  js  c++  java
  • Java开发系列-MySQL

    概述

    数据库 公司 特点
    Mysql Oracle 开源的数据库 社区版免费 商业版是收费的
    Oracle Oracle 大型的 收费的数据库
    DB2 IBM 大型的 收费的数据库 一般用于银行系统 特点主要它的硬件比较稳定
    sqlserver 微软 中型的收费的数据库 c++开发者使用

    MySQL是属于关系型数据库,而Oracle是属于非关系型数据库(直接存储对象)。

    MySQL语句

    基本语句

    -- 创建数据库
    CREATE DATABASE mydb;
    -- 创建表
    CREATE TABLE USER (
    	uid INT PRIMARY KEY AUTO_INCREMENT,
    	username VARCHAR(20) DEFAULT NULL
    );
    -- 插入数据
    INSERT INTO USER VALUES(NULL, 'tom');
    -- 更新数据
    UPDATE USER SET username = 'rose' WHERE id = 1;
    -- 删除表
    DROP TABLE USER;
    -- 删除表中的所有数据
    DELETE FROM USER;
    -- 查询表中所有数据
    SELECT *FROM USER;
    

    聚合函数

    对一列进行计算 返回值是一个,忽略null值, sum(), avg(), max(), min(), count();

    -- .获得所有商品的价格的总和
    SELECT SUM(price) AS totalPrice FROM product;
    -- 获得商品表中价格的平均数:
    SELECT ROUND(AVG(price), 2) AS vagprice FROM product;
    -- 获得商品表中有多少条记录
    SELECT COUNT(*) FROM product;
    

    分组查询

    -- 根据cno字段分组,分组后统计商品的个数
    SELECT cno, SUM(price)FROM product GROUP BY cno;
    -- 根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
    SELECT cno, SUM(pnum) FROM product GROUP BY cno HAVING SUM(pnum) > 200;
    -- 获得商品表中有多少条记录:
    select count(*) from products;
    

    注意:havingwhere的区别 1.where 是对分组前的数据进行过滤 ;having 是对分组后的数据进行过滤 2. where 后面不能使用聚合函数,having可以

    排序查询

    -- 查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
    SELECT *FROM product ORDER BY price ASC;
    -- 查询名称有"新"的商品的信息并且按价格降序排序
    SELECT *FROM product WHERE pname LIKE '%新%' ORDER BY price DESC;
    

    分页查询

    limit n, m; 从第n条记录开始查询m条数据。

    SELECT *FROM product LIMIT 0, 2;
    SELECT *FROM product LIMIT 2, 2;
    SELECT *FROM product LIMIT 4, 2;
    SELECT *FROM product LIMIT 6, 2;
    

    确定好PageSize,做某一页分页查询的数据公式

    limit (n-1)*pageSize pageSize
    

    MySQL表设计

    在MySQL中存在三种关系:一对一,一对多,多对多。

    一对多

    比如开发中用户与订单的关系,对于一表我们也可以称之为主表,而多表称之为从表。遵循的设计原则从表中添加一个外键对应主表的主键。

    -- 用户表
    create  table user(
    	id int primary key auto_increment,
    	username varchar(20)
    );
    
    -- 订单表
    create  table orders(
    	id int primary key auto_increment,
    	totalprice double,
    	user_id int
    );
    

    为了保证数据的有效性和完整性,添加约束(外键约束).

    --  alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
    alter table orders add foreign key(user_id) references user(id);
    
    • 添加了外键约束之后有如下特点
      • 主表中不能删除从表中已引用的数据
      • 从表中不能添加主表中不存在的数据

    多对多

    比如: 订单与商品的关系。

    -- 创建商品表
    -- 创建商品表
    create table product(
    	id int primary key auto_increment,
    	name varchar(20),
    	price double
    );	    
    -- 创建中间表
    create table orderitem(
    	oid int,
    	pid int
    );
    -- 添加外键约束
    alter table orderitem add foreign key(oid) references orders(id);
    alter table orderitem add foreign key(pid) references product(id);
    

    开发中处理多对多:引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就可以将多对多的关系拆分成两个一对多了

    多表查询

    笛卡尔积

    多张表无条件的联合查询.没有任何意思

    select a.*,b.* from a,b;
    

    内连接

    -- 显示的内连接
    select a.*,b.* from a [inner] join b on ab的连接条件
    -- 隐式的内连接
    select a.*,b.* from a,b where ab的连接条件
    

    外连接

    -- 左外连接
    select a.*,b.* from a left [outer] join b on 连接条件;
    先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.
    
    -- 右外连接
    select a.*,b.* from b right [outer] join a on 连接条件;
    先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.
    

    子查询

    一个查询依赖另一个查询. 用()连接。

  • 相关阅读:
    实时获取阿里旺旺聊天记录,实时获取千牛聊天记录
    千牛hook 旺旺hook,旺旺发消息call,千牛发消息call,千牛机器人,破解旺旺发消息代码,破解千牛发消息代码,反汇编旺旺发消息,反汇编千牛发消息,旺旺发消息组件,千牛发消息组件
    hook千牛 千牛破解发消息 千牛机器人 千牛发消息组件 调用千牛发消息 实时获取千牛聊天记录 可以提供代码
    [转发]分布式事务,这一篇就够了
    C++之throw以及try{}...catch{}【转载】
    C++之Effective C++学习-条款2
    c++中为什么析构函数要被设置为虚函数(virtual)
    c++中在声明静态变量时,使用const可直接初始化,不在需要定义式
    js检测浏览器类型_js检测是否为火狐浏览器
    PHP8.0 JIT 配置
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9465563.html
Copyright © 2011-2022 走看看