Day28 MySQL

1. 数据库概述

1.1数据(Data)

在JavaSE中,我们说过这样一句话,数据要运算,必须先存储,那么java中存储数据是使用变量,那么计算机怎么存储? 文件

Java中变量存储的数据,可以跨平台,因为JVM跨平台,那么计算机存储的数据呢?不会跨平台

而数据库就可以解决操作系统之间的跨平台

1.2数据库(DataBase)

数据库,顾名思义,就是遵循一定数据格式的数据集合,可以认为它是对文件系统的改进。它解决了不同操作系统之间,数据格式的兼容性问题。也就是说,只要是同一个数据库的数据文件,即使是从Windows迁移到了Linux上,也可以正常处理的。

1.3关系型和非关系型的区别

关系型数据库 

查询来数据,得到对象,而非关系型数据库,保存键值对 查询处理数据,得到数组

简单理解

而关系型数据库 对于java而言,一个类就可以对应一个表,一个类对象就可以对应表中一行数据,一个成员变量可以对应表中的一个列(字段),能够做到一一的映射,数据库中是以表作为基本单位的

非关系型数据库

是存储键值对的,即有关系型数据库处理数据的方便性,也能处理大量数据,比较火的就是Redis、mongoDB了,各有千秋

关系型数据库这里一个名词是ORM : Object Relationl Mapping 对象关系映射,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了,更加面向对象

 

1.4数据库分类

 

画红框的是我们重点关注的。

Oracle

这是一种关系型数据库。它的特点是闭源收费,但是功能强大稳定,而且有一支专业的技术支撑团队。使用这种数据库的一般是大型企业、银行业、金融业。

MySQL

它也是关系型数据库。它的特点是开源免费,功能还是不错的,也比较稳定。通常使用这种数据库的,是中小企业等。因为它是开源的,所以我们有些企业可以对它做定制化、二次开发,以支持自己特殊的业务。比如阿里。说它是目前应用最广泛的DBMS,是MySQL的订制二次开发,也是比较好用。

Memcached、Redis

这2者是非关系型数据库(Not Only SQL)。它们通常用K-V键值对的形式存储数据,使用场景为缓存(可做为关系型数据库的补充)。它俩都是基于内存存储的,它们的数据都是在内存中,所以访问速度要快。Redis还提供了定期向磁盘中进行序列化的机制,它的IO性能也是非常高的。

MongoDB

这个也是NOSQL数据库。它使用文档形式存储数据。它使用文档形式存储数据。使用场景,通常是大数据量高并发访问。它的性能也非常高。

  1.  MySQL安装

参考 相关软件中的 安装教程

 

3. 开发工具

我们主要用的MySQL开发工具有 Navicat。

学习阶段,方便我们进行操作,图形化显示,功能比较抢到,很适合入门,后续我们就需要脱离Navicat,通过SQL在程序中进行操作

参考 相关软件中的 安装教程

  1. MySQL介绍

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 是最流行的关系型数据库关系系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

数据库对象

表,视图,函数,存储过程,索引等。

就是存储数据的,里面有一条条的记录,记录是由字段组成的。每个字段都有自己的字段名、字段值、字段类型(数据类型)。字段是存储数据的基本单元。类似Java中的对象,用于存储数据。

表(table)是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息,课程信息,都可以放到表中。另外表都有特定的名称,而且不能重复。表中具有几个概念:列、行、主键。 列叫做字段(Column),行叫做表中的记录,每一个字段都有:字段名称/字段数据类型/字段约束/字段长度

学生信息表

学号(主键)

姓名

性别

年龄

00001

张三

20

00002

李四

20

视图

我们可以理解为一张虚表(它在物理磁盘上并不真实存在)。视图是基于select语句查询生成的结果集。当一条select语句比较复杂而且调用的频率也比较高时,我们不想再写一遍语句,这时候可以把这条select语句创建为一个视图。每次使用视图的时候,就可以把它当成一张表来用。

函数

通常是一个功能的实现,我们大部分使用的是系统函数(MYSQL提供的),我们也可以自定义函数。它的调用套路通过使用select 函数名(参数1,参数2..);来调用。它只有一个返回值。

存储过程

也是一个功能的实现。我们所说的数据库编程,SQL语句编程,就主要是指自定义一个存储过程。调用存储过程是使用exec 存储过程名 参数1等来调用。它是可以返回多个值,也可以没有返回值。

索引

我们之前接触过,它就像一本书的目录一样,是为了加快我们查询速度而建立的。

表结构

表名称:dept

描述:部门信息表

英文字段名称

中文描述

类型

DEPTNO

部门编号

INT(2)

DNAME

部门名称

VARCHAR(14)

LOC

位置

VARCHAR(13)

表名称:emp

描述:员工信息表

英文字段名称

中文描述

类型

EMPNO

员工编号

INT (4)

ENAME

员工姓名

VARCHAR(10)

JOB

工作岗位

VARCHAR(9)

MGR

上级领导

INT (4)

HIREDATE

入职日期

DATE

SAL

薪水

DOUBLE(7,2)

COMM

津贴

DOUBLE (7,2)

DEPTNO

部门编号

INT(2)

注:DEPTNO字段是外键,DEPTNO的值来源于dept表的主键,起到了约束的作用

表名称:salgrade

描述:薪水等级信息表

英文字段名称

中文描述

类型

GRADE

等级

INT

LOSAL

最低薪水

INT

HISAL

最高薪水

INT

数据类型

刚才创建创建表的时候,我们用到了数据类型,类型目的就是限制数据的类型,那么接下来我们看一下常用的几种类型

整型,浮点型,字符型,日期时间型等。

数值型

 

时间类型

 

字符串型

数据库/SQL的数据类型也是挺多的,但是我们掌握几个常用的就是,比如整型int,浮点型decimal(18,2)(共18位,16位整数部分与2位小数部分),字符型就是字符串类型varchar(100)(可以存储100个字符),日期时间型datetime('2018-05-23 15:00:00')。当然还有其他的具体类型,但是我们在基础阶段就先知道这些就可以了。

小知识

char与varchar的区别。char(100)类型的字段一旦定义,不管里面是否真的有值,它就固定会占用100个字符对应的存储空间,这种类型对空间的利用率其实并不高。varchar(100)类型的字段定义后,它所占用的空间就是里面存储内容占用的空间,但是最大不会超过100个字符,这种类型对空间的利用率是很高的。

比如 手机号码(目前都是11位,前缀不考虑),就可以使用char定长

比如 姓名或者家庭地址,就可以使用varchar,

毕竟家庭地址和名字的长度共多少位,不好确定

(有的可能说,名字不是最多就3位吗?那你把迪丽热巴放到哪里 - - !  你把 奥斯夫托洛夫斯基放到哪里 - - !)

当然我们还是需要看具体需求而定

演示示例:char和varchar

4.SQL的分类

数据查询语言(DQL-Data Query Language)  

代表关键字:select

数据操纵语言(DML-Data Manipulation Language)

代表关键字:insert,delete,update

数据定义语言(DDL-Data Definition Language)

代表关键字:create ,drop,alter,

事务控制语言(TCL-Transactional Control Language)

代表关键字:commit ,rollback;

数据控制语言(DCL-Data Control Language)

代表关键字:grant,revoke.

5.MySQL基本使用

5.1 TCL--用户创建和授权

MySQL中是以数据库做区分,但是用户可以操作数据库,权限最大的用户是root,在安装MySQL的时候我们已经设置了root的密码

但是真正开发中,不会让我们使用root用户,权限太大,会为我们单独创建用户,这个用户只能操作某个数据库

  1. 创建用户:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

需要切换到mysql数据库下,操作user表

username:用户名;host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;password:用户登录密码;

2、授权:GRANT ALL PRIVILEGES ON  *.* TO 'username'@'%' IDENTIFIED BY 'password' ;

刷新权限:FLUSH PRIVILEGES;

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";*.*代表所有数据库和所有表;

@ 后面是访问MySQL的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。

如 GRANT ALL PRIVILEGES ON  _08_.* TO 'tianliang'@'%' IDENTIFIED BY 'tianliang' ;

把 _08_数据库的操作权限,授权给tianliang用户

All privileges 是所有权限

GRANT select,insert,update,drop,create,delete   ON  _08_.* TO 'c'@'%' IDENTIFIED BY 'c' ;

上面是同时设置查询,添加,更新等操作

当然 也可以只写select , 是只能查询

Select  查询

Insert 插入数据

Update 更新数据

Delete 删除数据

Drop 删除表

Create 创建表

撤销授权

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可,并且IDENTIFIED BY password ,不管是授权还是撤销,都可以不加:

grant all on *.* to tledu@localhost;

revoke all on *.* from tledu@localhost;

删除用户,会同步把user和db表都删除对应的数据

drop user 用户名@'%’;

 

演示示例:用户创建和授权

5.2 DDL--数据库创建

上面我们在介绍MySQL的时候提了,MySQL中是以数据库为区分是以表来存储数据,那么接下来我们就来学习如何创建数据库,然后再去学习如何创建表

命令行中的注释

-- 单行注释

/*

 多行注释

*/

命令行基本使用

查看当前链接的MySQL服务器的版本

select version();

显示当前链接的MySQL服务器中的所有的数据库

show databases;

输出指定内容, 字符串需要用单引号括起来,不区分字符还是字符串,都用单引号就行,数值可以直接写

select  ‘xxxx’;

设置字段名

select  ‘xxxx’ as 字段名;

as也可以省略

select  ‘xxxx’  字段名;

切换数据库

use test;

查看当前库下面的所有表,使用这个命令的时候,通常会跟着一条use xxx; 切换数据库,如果当前命令行,没有在库里面打开,直接使用show tables 会报错

show tables;

数据库创建和删除

在当前数据库服务器上创建一个新库

create database day01;

在当前数据库服务器上删除一个库

drop database day01;

演示示例:数据库创建和删除

5.3 DDL--表创建和删除

在数据库day01下创建表student_info

use day01;

create table student_info (

     id int,

`name` varchar(20),

salary decimal(18,2)

)ENGINE = innodb default charset = utf8;

存储引擎 :

MyISAM

InnoDB

-- 在数据库day01下删除表student_info

use day01;

drop table student_info;

 

6.DML操作

DML : Data Manipulate Language(数据操作语言) ,主要用于向数据库插入,修改,删除数据使用

涉及的关键字有 : insert delete update

上面我们提到,数据库主要是用于数据存储和操作,而刚才我们讲的那些,只是结构,和数据并没有关系,下面我们来使用一下DML

使用方式如下

Insert (用于向表中添加数据):

格式 :

insert into 表名 (列名1,列名2) values (值1,值2);

示例 :

insert into teacher (name, id, salary)  values ('老刘',1,56.23);

insert into teacher (name, salary)  values ('老王',56.23);

insert into student values(1,'张三'); 这种方式不建议使用,需要添加表中所有的列,并且需要一一对应

Delete(用于删除表中的数据):

格式 :

delete from 表名 where 列名 = 值;

示例 :

delete from teacher where name='老王';可以把符合where条件的记录全部删除。一定要加where条件,否则会删除全表的数据。

delete from teacher where id is null也可以起到上面的作用,判断为null 不能使用 = ,is null 为空 is not null 不为空。

Update(用于更新表中的数据):

格式 :

update  表名 set 列名1=值 , 列名2=值  where 列名 = 值;

示例 :

update teacher  set salary=9999.45, name='dave'  where id = 1;

会将符合where条件的所有记录对应的字段都更新为新值

Select(用于查询表中的数据,属于DQL):

格式 :

select 列限定 from 表限定 where 行限定

示例 :

select * from teacher   where id= 1;

查询teacher表中id为1 所有信息

select * from teacher;

查询teacher表中的所有信息

select name from teacher   where id= 1;

查询teacher表中 id为1 的name值

注意:无论是delete还是update,只要你确定不是全表操作,就一定要使用where条件!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值