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告知当前使用的数据库是哪一个
    
小问题:
当遇到以下错误:
2003 - cant connect to mysql server on localhost(10061)错误时,是因为mysql服务器没启动
在命令行输入cmd
打开后输入
dcomcnfg
回车进入,找到“本地服务”
找出mysql右键启动即可

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

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值