Java中的小知识 ---- MySQL(3.2修改完毕)

为什么使用数据库?

1.现有数据存在的问题
    Java程序在运行的过程中对于数据进行存储操作,变量,对象,数组,集合,双边队列等
数据是保存到内存中,数据的存储是瞬时的,程序退出,电脑异常。都会导致数据丢失并且不可逆
    文件存储数据,XML、JSON、其他文件。可操作性比较差,API繁琐,不同文件有不同的解析
方式,而且存在内存占用的效率问题上很难达到两全程度

存在的问题:
    1.文件保存的数据没有数据类型的区分,都是字符串
    2.数据存储量是较小的,有一定限制
    3.没有安全限制
    4.文件操作没有备份,回滚,数据保护机制

什么是数据库

数据库按照特定的数据结构,来进行数据的组织,存储,管理和查询,
数据库软件,可以长期存储,有安全限制,数据恢复,并且数据存储可拓展

数据库分类:
    网状结构数据库
    层状结构数据库
    关系结构数据库【重点】
        Oracle,MySQL,DB2,SQL Server
        通过表结构方式来进行数据的存储操作。 ==> XLS表格非关系型数据库
        MongDB Redis
            使用哈希表结构方式,Key - Value数据存储方式
        ES
            ElastecSearch

数据库管理系统

数据库管理系统
    DataBase Management System
    DBMS
    操作和管理数据的大型软件,用于管理,建立,使用和查询数据
Oracle:
    贼厉害,安全性,稳定性,数据存储复杂程度...可以完全符合工业要求,但是贵
DB2
    IBM公司,不是很多件
SQL Server
    MS公司推出的关系型数据库
SQLite
    轻量级数据库,源码1w行C语言,用于手机通讯录

MySQL

历史简介:
    MySQL隶属于Oracle公司,免费提供使用的数据库软件。
目前流行的版本是MySQL 5.5 5.6 5.7 最新版本是8.0
实际开发中我们要考虑稳定性,兼容性,普适性

SQL

    SQL是数据库通用查询语句,不管是MySQL,Oracle,SQL Server都是支持标准SQL语句
不同的数据库都会有自己特定的SQL语句
    CRUD:
        Create
        Read
        Updata
        Delete

MySQL基本操作

在cmd操作,连接数据库:
    mysql -hlocalhost -uroot -p123456
    # mysql指目前需要操作连接的数据库
    # -hlocalhost -h是host端口,当前数据库所处的服务器ip地址,域名或者主机名
    # localhost 表示本地,如果是本地连接可以省略
    # -uroot -u user用户,root表示用户
    # -p -password密码
推荐连接的方式:
mysql  -uroot -p
Enter password: ******

命令:
    show databases; 展示当前数据库中所有的数据表
    create database; 创建一个数据表
    create database shujubiao character set gbk; 创建数据库的过程中修改编码集合
    alter database shujubiao character set gbk; 修改数据库的编码集
    drop database shujubiao; 删除对应的数据库
    use shujubiao; 选择使用数据库
    select database(); 让M告知当前使用的数据库是哪一个
    

Select查询语句

格式:
    select 字段 from 表名;
    字段为 * 代表所有字段全部展示
数据计算:
    允许使用 + -  *  / 但是没有取余
    % 是一个占位符
去重:
    distinct
    select distinct 字段 from 表名;
字段别名:
    select 字段 as '别名' from 表名;

排序查询:

asc :指定条件升序

desc:指定条件降序

基本格式:
    select filedName from tbName order by fieldName asc/desc;
    从tbName表中根据升序/降序排列filedName字段

单一条件排序:

代码
select name from student order by age asc
把student表中的name字段根据年龄升序排序

多字段条件排序:

代码
select name from student order by age asc, mathscore desc
把student表中的name字段根据年龄升序和数学成绩降序排序

条件查询

基本格式:
    select field from tbName where condition;
    从指定数据表tbName中,按照condition条件,查询field字段数据
等值判断  = 
    Java中的等于判定是用的 == ,而数据库中使用 =,在上面的where条件之后就是一个等值
    判定
不等值判定: >  <  >= <= != <>(这个也是不等于)
 
逻辑判断 and or not:

区间 between and(包含边界):
    
NULL之判定:
    is NULL:指定当前的字段是null
    is not NULL:指定当前的字段不是null

枚举查询in:

模糊查询 like :%
    - : 匹配一个字符 select age from student where age like '1_' (查询年龄为十几岁的学生)
    % :匹配任意长度字符 select age from student where age like '1%'
       (年龄为1开头的学生,后面不限制位数,如果为字母,不区分大小写)

分支结构查询:
    case
        when condition1 then ret1
        when condition1 then ret1
        when condition1 then ret1
    end
    从case开始,到end结束。满足条件对应一个结果,类似于Java中的switch case
 eg:select 工资,
    case
        when 工资>1000 then '千元户'
        when 工资>5000 then '小康户'
        when 工资>10000 then '万元户'
        else '暴发户'
    end

时间查询:
    select 时间函数([参数列表,可有可无]);
    查询时间的情况下,得到的是一个单列单表(虚表)
时间函数 功能描述
sysdate() 当前系统时间(年,月,日,时,分,秒)
systimestamp() 当前系统时间(日,月,年,时,分,秒)
curdate() 当前日期年月日
curtime() 当前时间时分秒
week(d) 指定日期d是这一年的第几周
hour(d) 指定日期d是今天的第几个小时
minite(d) 指定日期d是这一个小时的第几分钟
second(d) 指定日期d是这一分钟的第几秒

字符串验证

方法 功能描述
concat(str1,str2,str3...) 拼接多个字符串
insert(str,pos,len,newStr) 在指定字符串位置pos,长度限制len,插入新的字符串
lower(str) 大写转小写
upper(str) 小写转大写
sbustring(str,pos,len) 指定字符串,从pos位置开始,长度限制len
   
   
   
   

内置方法

方法 功能描述
sum() 指定字段一列总和

avg()

指定字段一列平均值
max() 指定字段一列中的最大值
min() 最小值
count() 指定字段有多少行

分组查询

格式:
    select fieldName from tbName where condition_ group by 分组要求;
    group by 是一个分组关键字,

分组过滤查询

格式:
    select fieldName from tbName where condition_ group by 分组要求 having 过滤规则;

限定查询

select field Name from tbName limit 限制;

limit核心用法,分页查询

基本查询总结:

select fieldName
from tbName
where condition_
gtoup by 分组
having 分组过滤
order by 排序[asc/desc]
limit offset,count;

子查询【重点】:

基本格式:
    select fieldName from tbName where(子查询结果);
eg:
查询工资大于Jack的工资的人的id跟名字
    select EMPLOYEE_ID,FIRST_NAME from t_employees 
    where SALARY > 
      (select SALARY 
      from t_employees 
      where FIRST_NAME = 'Jack');

子查询结果作为枚举限制in
    查询和Jack同部门的员工信息:
        select DEPARTMENT_ID,FIRST_NAME
        from t_employees
        where DEPARTMENT_ID in
          (select DEPARTMENT_ID
          from t_employees
          where FIRST_NAME = 'Jack');

子查询结果一张表,从表内查询指定数据:
    从表中查询工资为前五名的员工信息:
        

合并查询【了解】

-- 合并,要求查询要求的字段个数一致 
-- 去重 
select employee_id, first_name 
from t_employees 
union 
select job_id, job_title 
from t_jobs; 
-- 合并,要求查询要求的字段个数一致 
-- 不去重 
select department_id, first_name 
from t_employees 
union all 
select manager_id, department_name 
from t_departments;

表连接查询【重点】

基本格式:
    select fieldName from tbName1 连接符 tbName2 on 条件

内连接查询:inner join on    

左外连接 left join on:
    左表是主表,要求左表完整显示,右表匹配左表数据,如果右表没有数据匹配,显示null

右外连接 right join on:
    同上

DML语句

增加

insert

create table person(
    id int,
    name varchar(30),
    salary float(8,2),
    age int;
  //创建一个数据表
)

-- 规矩插入
insert into person(id,name,salary,age) value (1,'小红',121,16);
-- 省略所有字段名,但是要按顺序添加
insert into person value (1,'小红',121,16);
-- 指定插入
insert into person(name,age) value ('小明',18);

修改

updata

update person set id = 10 where name = '小明';



update person set id = 11,salary = 20000, age = 18 where name = '小明';

删除

delete【不要删库跑路】

--删除id=1的一整行数据
delete from person where id = 1;

清空t整个表的数据runcate

trencate table person;

库表操作

创建数据库:

create database dbName;


eg:
    create database dbName [chrarcter set charset]
    [设置编码集,根据清空而定]
 

删除数据库

drop database dbName

修改数据库

alter

-- 修改数据库编码集 
alter database dbname character set utf8;

修改表的编码集:
 

-- 更改表格的编码集
alter table student convert to character set gbk;
alter table course convert to character set gbk;
alter table score convert to character set gbk;
alter table teacher convert to character set gbk;

创建表

create table tbName(
    fieldName1 fieldType1,
    fieldName2 fieldType2,
    fieldName3 fieldType3,
    fieldName4 fieldType4,
    fieldName5 fieldType5
);
可以假如约束,字符集和存储引擎

数据约束

默认值

创建数据表的过程中,指定字段可以带有默认值,如果用户没有指定数据的情况下,
当前字段会采用默认值方式来进行数据的赋值操作
default

create table person1(
    id int,
    name varchar(50),
    country varchat(50) default 'PRC'  -- 设置默认值

);

非空 not null

not null,非空,要求当前字段必须有对应的数据,如果没有赋值就报错

唯一 unique

使用unique约束后,当前字段中保存的数据在当前表内不可重复
但是null不作为唯一判断范围以内

主键 primary key

主键要求 : 唯一非空
主键一般用于在开发中涉及到数据的唯一性参照物,但是不能能使用带有业务逻辑要求的
数据作为主键,列如性别,年龄,工资等

自增长 auto_increment

自增长修饰字段会在数据添加的过程中自动赋值叠加操作
auto_increment修饰的字段必须是一个key
发布了31 篇原创文章 · 获赞 41 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42597414/article/details/104960851