MySql基础1

    经过了一段漫长的时光,JavaSE阶段我们已经基本上学的差不多了。但是学习之路不能停下,现在这个阶段我们来学习MySql数据库。

我们先来简单的认识一下这个全新的概念数据库。通过Java SE的学习中我们知道变量的信息存储时间是很短暂的,仅在内存中运行的时候存储。

那么想要做到长久的保存数据,Java中给我们提供了通过IO流转换使用file类便可以存储在电脑硬盘中,而数据库正是这个作用。

我们为什么要学习数据库?

数据库的作用:一点就是实现数据持久化到本地,另外一点就是使用完整的管理系统统一管理,可以实现结构化查询,方便管理。

数据库的相关概念

DB:数据库(DataBase)
存储数据的容器,它保存了一系列有组织的数据。
DBMS:数据库管理系统(DataBase Management System)
又称为数据库软件或数据库产品,用于创建或管理DB。
SQL:结构化查询语言(Structure Query Language)
用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据 库软件通用的语言。

  MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 流行的关系型数据库管理系统。
 MySql是一种关系数据库管理系统。
 MySql软件是一种开放源码软件,你可以修改源码来开发自己的 Mysql 系统。
 MySql数据库服务器具有快速、可靠和易于使用的特点。
 MySql使用标准的sql语言,并且支持多种操作系统,支持多种语言.
 mysql商业版与社区版:
 MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
 MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维护,可以免费使用

我们目前阶段使用社区版本完全绰绰有余。

MySql 8的安装过程

  MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/

 这是MySQL的官方网站,在上面便可以找到下载。

随后安装解压路径自己选择,记好路径等会要用。

 注意刚安装完是没有data文件夹的,后面我们会提到。

然后配置环境变量,将系统环境变量Path新编一个路径,这个路径就是我们刚才安装MySQL的路径如下图。

 下面进行mysql的初始化和启动。

首先我们要以管理员的身份运行cmd,然后cd进入D盘的MySQL路径文件夹。

然后进行MySQL数据库初始化,输入mysqld--initialize-insecure。

这段代码的作用就是初始化数据库,并设置默认root密码为空。在此段代码执行之后在mysql的目录就会出现一个data文件夹。

下面为Windows系统安装MySQL服务 

输入mysqld install 这段代码的作用是为Windows系统安装MySQL服务,默认服务名为:mysql 。

随后输入sc query mysql,查看一下名为mysql的服务

 然后就可以启动MySQL服务了。

输入此段代码net start mysql 这段代码的作用时启动MySQL服务,注意此时的“mysql”表示服务名。 

到此mysql8安装完成.

上面已经将root账号设置为空,可以使用root用户直接登录,然后修改密码.

需要注意的是在8.0版本之后MySQL的PASSWORD('newpassword')函数设置密码已经被取消.

输入命令ALTER USER  'root'@'localhost'  IDENTIFIED WITH mysql_native_password BY  'newpassword';

我们把newpassword的内容改为自己要使用的密码即可。

mysql_native_password就是为加密方式。

完事之后刷新指令,输入FLUSH PRIVILEGES即可。

命令行方式连接mysql
登录:mysql [-hlocalhost -P3306](本机可省略) -uroot -p(可以直
接写密码,不能有空格)
-h:主机名
-P:端口号
-u:用户名
-p:密码
退出:exit

现今阶段我们使用的还是本机的数据库,所以直接输入 mysql -uroot -p密码就行。

 现在就连接到我们的数据库了。

 查看mysql数据库的版本
select version();(mysql命令)

MySQL的常用命令
查看当前所有的数据库:show databases;
选择指定的库:use 库名
查看当前的所有表:show tables;
查看其他库的所有表:show tables from 库名;

安装可视化客户端工具
SQLyog / Navicat

总结一下,sql是一门语言,而mysql 是数据库 软件,sqlyog是连接mysql的可视化客户端工具。

MySQL语法规范

    1.在MySQL中与JAVA 中截然不同的是,这里不区分大小写。

    2.建议所有关键字都使用大写,表名和列名使用小写,以做区分。

    3.每句话用 ;

当然在SQLyog软件中,它会自动的吧关键字转换为大写。

注释

    单行注释:#注释文字                   -- 注释文字(要有空格)
● 多行注释:/* 注释文字 */

#单行注释
-- 单行注释
/*
    多行注释
    */

 SQL

      结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL的优点:

            1.不是某个特定数据库供应商专有的语是言,几乎所有DBMS都支持SQL
              2.简单易学
                 3.实际上强有力的语言,灵活使用可以进行非常复杂和高级的数据库操作

好了现在安装和认识等工作做完之后,现在要学习这门语言了。

DDL

 数据(结构)定义语言DDL(Data Definition Language),是用于创建和修改数据库表结构的语言。
     常用的语句:create ,alter,drop,rename

-- 创建一个数据库,并且设置编码格式。     
CREATE DATABASE IF NOT EXISTS shooldb 	CHARSET utf8;
-- 删除数据库
DROP DATABASE shooldb IF EXISTS shooldb;
-- 修改数据库的字符集
ALTER DATABASE shooldb CHARSET gbk;

 

 数据库存储数据的特点

1. 将数据放到表中,表再放到库中

2.一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。

3. 表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中“类”的设计。

4.表由列组成,我们也称列为字段。所有表都是由一个或多个列组成的,每一列类似java中的”属性”

5.表中的数据是按行存储的,每一行类似于Java中的“对象”。

数据库表的基本概念

1、数据表:
表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。
表的最简单形式是由行和列组成,分别都包含着数据。 每个表都有一个表头和表体,表头定
义表名和列名 .表中的行被看作是文件中的记录,表中的列被看作是这些记录的字段。
2、记录:
记录也被称为一行数据,是表里的一行。在关系型数据库的表里,一行数据是指一条完
整的记录。
3、字段:
字段是表里的一列,用于保存每条记录的特定信息。如客户订单表的字段包括“订单ID”、“姓名”、“客户ID”、“职务”、“上级”、“地区”、“运货商”、“国家”等。数据表的一列包含了特定字段的全部信息。

MySQL中的数据类型

字符型

char :       定长的  例如定义长度为5,如果只存储了2个字符,也是会补全到5个长度字符
varchar:    变长的  例如定义长度为5,如果只存储了2个字符,实际就只占两个字符

日期型

date:        年月日(日期)
datetime: 年月日时分秒(时间)

数值型

浮点:float :   4字节
          double : 8字节  一般建议使用double   

浮点型后可以带括号如,double(M,D) M:精度,数据的总长度;
                                                                 D:标度,小数点后的长度 ;

整数:
        TINYINT 1
        SMALLINT 2
        MEDIUMINT 3
        INT  4
        BIGINT  8
       text文本类型 ,可以存储更多的字符
       TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。

 text文本类型 :可以存储更多的字符
       TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。

主键以及各种约束

   主键约束  PRIMARY KEY :表中必须有一列的值,能够唯一的表示一条记录。  且主键列在一张表中只能有一个,主键列不能为空,不能重复。

除此之外,mysql还支持主键列自动增长(要求主键必须为整数类型 AUTO_INCREMENT)。

不能为空 :NOT NULL
唯一约束: UNIQUE
检查约束    CHECK设置条件
外键约束(多表)

除此之外,还可以设置主键自动增长:AUTO_INCREMENT

默认值:DEFAULT default_value
字段注释:comment '注释'

学完这些呢,我们就可以自己去创建表了。

USE schooldb
CREATE TABLE student(
         id INT,
         sname VARCHAR(10),
         age INT(3),
         num DOUBLE(3,2),
         birthdat DATE
         )`student`

以上呢,便是比较基础的一个表格创建。 

DML

 数据操纵语言DML(Data Manipulation Language)
 常用语句: insert,delete,update

DML中的INSERT插入数据,有如下四种方式

方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)

INSERT INTO student (id,sname,age,num,birthdat)
            VALUE(4,'tom',18,2.734,NOW())

可以发现,数据被如实的添加了进去。

如果需要添加多行数据,可以使用values来添加多行 

INSERT INTO student SET sname='jack'

 也可以值添加相应的值进入表。

CREATE TABLE st(
         id INT,
         sname VARCHAR(10),
         age INT(3),
         num DOUBLE(3,2),
         birthdat DATE
         )
       
INSERT INTO st(id,sname,age,num,birthdat) SELECT  id,sname,age,num,birthdat  FROM student 

也可以将一个表的数据添加到另外一个表格当中。

DML中的UPDATE

修改数据    UPDATE 表名 SET 列名 = ‘新值’WHERE 条件

UPDATE student SET  age='20'

 可以看到所有行的age数值都被修改成了20。

UPDATE student SET sname='jim' WHERE sname='jack'

 当然我们也可以通过where来添加限定条件,修改制定位置的数据。

DML中的DELETE

删除数据
  DELETE FROM stu  -- 逐行删除数据
  DROP TABLE  stu  -- 删除表结构
  TRUNCATE stu -- 清空整张表数据 是一个ddl级别的操作

DQL

DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据。

DQL可以说是数据库中使用特别频繁的东西了。并且,其内容也十分复杂。

DQL 特点:
查询列表可以是:表中的字段、常量、表达式、函数
查询的结果是一个虚拟的表格

关于查询结果处理,有如下几种方式。

特定列查询:select column1,column2 from table
全部列查询: select * from table
算数运算符:+ - * /
排除重复行: select distinct column1,column2 from table
查询函数:select 函数; / 例如version()

这里特别讲解一下排除重复行,DISTINCT 去除重复数据,重复数据指的是每列的值都是相同的。

上面是普通的特定列查询,下面是排除重复行

 查询结果处理:

1. 函数:类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调 用

好处: 隐藏了实现细节 提高代码的重用性

调用:select 函数名(实参列表) [from 表];

2. 分类: 单行函数:如concat、length、ifnull等

               分组函数:做统计使用,又称为统计函数、聚合函数、组函数

而其中单行函数拥有很多字符函数:

length():获取参数值的字节个数

char_length()获取参数值的字符个数

concat(str1,str2,.....):拼接字符串

upper()/lower():将字符串变成大写/小写

substring(str,pos,length):截取字符串 位置从1开始

instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0

trim(str):去掉字符串前后的空格或子串,

trim(指定子串 from 字符串)

lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度

rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度

replace(str,old,new):替换,替换所有的子串

单行函数也有逻辑处理得方式。

如下图

 这里其实很简单,case when说明判断条件,双引号中打出条件判断成功输入的值,else则反之,条件判断结束写个END,括号外的是列的别名。

除此之外单行函数还拥有数学函数。

round(数值):四舍五入

ceil(数值):向上取整,返回>=该参数的最小整数

floor(数值):向下取整,返回<=该参数的最大整数

truncate(数值,保留小数的位数):截断,小数点后截断到几位

mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

rand():获取随机数,返回0-1之间的小数

单行函数还有日期函数。

 now():返回当前系统日期+时间

curdate():返回当前系统日期,不包含时间

curtime():返回当前时间,不包含日期 可以获取指定的部分,年、月、日、小时、分钟、秒

YEAR(日期列),MONTH(日期列),DAY(日期列) , HOUR(日期列) ,MINUTE(日期列) SECOND(日期列)

str_to_date:将日期格式的字符转换成指定格式的日期

date_format:将日期转换成字符串

datediff(big,small):返回两个日期相差的天数

实例如下图

 

 

 

 单行函数中的分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数 (非空)

1.sum,avg一般用于处理数值型max,min,count可以处理任何类型

2.以上分组函数都忽略null值

3.count函数的一般使用count(*)用作统计行数

4.和分组函数一同查询的字段要求是group by后的字段

总的来说  sum() avg()只能处理数值类型的列
                max() min() count() 可以处理任何数据类型

以下是实例.

 

 条件查询

LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值 或数值型.

通配符: % 任意多个字符,包含0个字符 _ 任意单个字符

between and 两者之间,包含临界值;

in 判断某字段的值是否属于in列表中的某一项 IS NULL(为空的)或 IS NOT NULL(不为空的)

这里我们特别说明一下通配符的用法。如下图

 union语法

[SQL 语句 1] UNION [SQL 语句 2]

当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all , mysql 会把所有的记录返回,且效率高于union 。

实例如下图。

 

排序

查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC

asc代表的是升序,desc代表的是降序,

如果不写,默认是升序

order by子句中可以支持单个字段、多个字段

分组查询

语法: select 分组函数,列(要求出现在group by的后面)

            from 表

            [where 筛选条件]

            group by 分组的列表

              [having 分组后的筛选]

             [order by 子句]

注意:查询列表比较特殊,要求是分组函数和group by后出现的字段 分组查询中的筛选条件分为两类:

                             数据源                 源位置                      关键字

分组前筛选           原始表        group by子句的前面          where

分组后筛选    分组后的结果集       group by的后面            having

 如上图是分页显示数据,之后学习前后端交互的时候,前端的数据显示会用到分页。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值