2-25 MySQL基础

请添加图片描述

为什么要学习数据库?

通过之前的学习,程序需要存储数据,就可以将数据以【变量,常量,数组,集合】等形式进行存储,这些存是存储在内存中【内存中存储–》栈或堆(常量池)】。

将数据存储在内存内存中

好处:速度快,方便 坏处:不持久,掉电易失

后续的学习中,我们接触到流【通过流形成数据通道,将内存中的数据存储到硬盘中以便对数据进行保存,已达到持久化】

好处:可以持久化保存数据【将数据写入到磁盘中】 坏处:IO瓶颈,如果出现对文件的随机访问

有没有什么东西,即可以保证数据安全,又可以保证方便对文件的操作–》【数据库】

数据库的概述

数据库【DataBase(DB)】:数据库是按照数据结构来【组织、存储和管理】的**【数据仓库】**

PS: Hive 数据仓库【管理】,提供高效的查询

数据库管理系统【DataBase Management System(DBMS)】:是专门用于管理数据库的计算软件

数据库管理系统能够为数据库提供【定义、创建、维护、查询和统计】等操作功能,并完成对数据的完整性,完全性和数据的优化进行操作

PS: MySQL其实是一个数据库管理系统【习惯性称为数据库】

​ 数据库的本质其实就是【磁盘文件 + 一个程序管理】

​ MySQL Server数据库服务器就是对数据库提供管理和操作使用【多指DBMS服务器端】

​ MySQL Client数据库客户端,连接数据库服务器发送指令对数据库进行操作

请添加图片描述

数据库发展历史

1.层次数据库和完网状数据库阶段【使用指针来表示数据之间联系】

2.关系型数据库【表格(数据存储是行有列)】

PS:经典的关系型数据库:MySQL、SQLServer、Oracle、BD2

3.后关系型数据库设计阶段【NOSQL–》(not noly SQL) 非关系型数据库】

扩展:NQSQL分类

1.键值型数据库【这一类的数据库主要使用到了(哈希表),这个表中有一个特点key和一个指针执行一个特点数据(Redis)】

2.列式存储数据库【这一类的数据库主要是应对分布式数据存(海量数据),key仍然存在,但是他们的特点是指向多个列(HBase)】

3.文档型数据库【同第一个键值存类似,该类型数据模型是一个文本文档(MongoDB)】

4.图形数据库【使用数据结构中(图)进行模型存储 (Neo4j)】

数据库系统 所述公司

======================================

Oracle Oracle【甲骨文】

BD2 IBM

SQLServer MS(微软)

MySQL MySQLAB(瑞典公司)—》SUN --》Oracle

2020数据库应用排行榜【stackoverflow社区(纯英文)】

请添加图片描述

MySQL数据库的安装和卸载

简介

MySQL是一个【关系型数据库管理系统】,最先是由瑞典公式MySQLAB开发,后期被SUN公式收购,成为Java的基础配置数据库,SUN公司又被Oracle公司收购之后,称为旗下主流的免费数据库软件【免费仅限于5.x版本 8.x版本也有社区版本但是不能商用】

MySQL【5.x】版本是现阶段主流的关系型数据库版本,在JavaEE即web方面MySQL数据库是支持最好的数据库

MySQL的官网:https://www.mysql.com/

MySQL下载页面:https://dev.mysql.com/downloads/installer/

MySQL卸载

1.找到自己电脑的控制面板(或者是自己电脑的软件管家的工具)—》选择卸载Mysql

使用控制面板—》 程序与功能 —》 当前页面展示所有MySQL开头都要进行卸载【选中之后单击鼠标右键选择卸载】

2.在这个路径下【这个路径是一个隐藏路径】C:\ProgramData 删除路径下的【MySQL文件夹】

请添加图片描述

3.删除Mysql注册表,使用win+r,输出regedit.exe,回车或者点击确定,启动注册表
请添加图片描述

删除一下注册表【这个操作一定要慎重!慎重!慎重!!这个操作不可逆】

HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL

【至此Mysql卸载成功】

PS: 如果感觉MySQL卸载不干净,残留注册表可以使用具CCleaner工具进行清理

MySQL的安装

直接查看资料文件夹中安装文档

MySQL编码集修改

直接查看资料文件夹中修改文档

SQL语言介绍【6个部分】

1.数据库查询语言(DQL)【非常重要、非常重要、非常重要】

其语句也别称为【数据库检索语句】,用以从表中获取数据,确定数怎样在应用程序使用

2.数据操作语言(DML)【非常重要、非常重要】

主要是对表进行添加、修改和删除等动作查询语言

3.事务处理语言(TPL)【非常重要】

它可以确保于具有被DML语言操作之后可以得到及时的更新【核心处理**:数据库事务**】

4.数据控制语言(DCL)【非常重要】

通过这个语句可以对单个用户或组提供访问数据的权限

5.数据库定义语言(DDL)【非常重要、非常重要】

创建数据库或表,对表进行删除和对库进行删除的语言

6.指针控制语言(CCL)【非常重要】

对语句提供游标位置可以对一个或多个表进行同时操作

PS:SQL语言仅约束关系型数据库,非关系型数据库不受SQL语言约束

SQL语言书写规则

1.SQL语言中是不区分大小的【大小写不敏感】 --> SELECT/select/SELect

2.SQL语句可以在单行完成,也可以多行完成
例如: select * from table;
      select *
      from table;
PS: 如果是简单查询或是简单的创建,删除,更改就建议一行写完
    如果是建表或是多表查询建议多行完成
    
3.SQL语句中,关键字不能跨多行或缩写
例如: 跨多行 建议语句完成 一个语法一条完成
      select *
      ...
      .....
      ........
      from
      select  --> 缩写为  sel 这是不允许的
      
4.【官方说明】为了提供可读性,一般建议"关键字大写",其余的小写
例如: SELECT * FROM tableName   
      --》因为SQL语句大小写不敏感 可以以下方式写
      select * from tableName
5.空格和缩进【tab键】可以提供代码阅读性
例如: 不要这样写 select*fromtableName
      建议每一个单词之间使用空格 select * from tableName
      
6.注释:
  单行注释【#】  或 【--】  个人推荐使用 #
  多行注释: /*注释文字*/
      
PS:SQL语言对于现阶段我们而言就是对数据库进行
   【C(create)R(read)U(update)D(delete)(增删改查)】 --> "CRUD做得好 保证8K"

表的概述

MySQL是一个关系型数据库,关系数据库最重要的概念就是【表】

PS:【表】示一个结构,它的体现就是有行有列

​ 表:是有固定的列和任何的行数,在数学上我们称这样这样的【关系为表】

通常对数据库的操作就是将数据存储到表中,表在放到库,库可以提供对表的各种操作–》 【数据库操作】

请添加图片描述

启动和连接MySQL

启动和停止服务

PS:只要启动MySQL一定要确认数据库开启了【系统服务开始,统一系统服务名称(MySQL57)】

方式1:

win+R 输出 services.msc 回车 启动Windows的服务管理选项,可以对MySQL57这个服务进行 【关闭,重启和启动、暂停】这些服务操作

找到此电脑右键–》管理–》服务和应用程序 --》服务 —》双击服务就可以进入到Windows的服务管理选项,可以对MySQL57这个服务进行 【关闭,重启和启动、暂停】这些服务操作

方式2:

可以通过当前命了对MySQL服务进行操作【必须以管理员的身份运行cmd】

net start MySQL57 开启数据库服务

net stop MySQL57 停止数据库服务

PS: MySQL57是你在安装MySQL时启动服务名称,如果修改就使用修改之后的名称即可

如何登陆MySQL

方式1:

在cmd模式下输入【mysql -h 主机名 -P 端口号 -u 用户名 -p】

ps:

  1. -h 和 -P 是可以省略【但是仅限本机连接】 如果要连接外部的MySQL服务器就需要写

    主机名【即IP地址】 端口号【即 3306】

  2. -p 后面是密码但是千万不要加空格 例如【-p 密码】

    原因:如果写-p 密码 此时系统会认为空格也是密码的一部分,所以-p一定要连着写密码

    mysql -u root -p123456
    不会用这样的方式做,原因在于密码是明文
    
  3. 正常mysql的登录可以这样写

    mysql -u root -p
    Enter password: ******
    ps: -p后面直接回车 暗文输密码
    

    方式2

    直接在开始菜单中,寻找mysql文件夹,选择mysql自带的连接客户端【MySQL 5.7 Command Line Client】

    双击输入密码即可登录

    PS:这个操作只能本机连接

退出MySQL

在mysql中输入命了 exit 退出就会退出mysql

常用数据库操作

PS:数据库所有命了必须全部是英文,不允许有中文,而且数据的错误提示不是很友好,一般就是语法错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘database’ at line 1

上面这句话就是MySQL的错误提示

1.查看当前数据库中有哪些数据库
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |保存数据库相关信息,通常保存【表名、列名或访问权限等等】相关信息--》【元数据】
| mysql              |核心数据库,赋值存数据库【用户、权限、关键字、控制和管理信息】不可删除
| performance_schema |性能优化数据库,在MySQL5.5版本之后引入的一个优化引擎
| sys                |MySQL5.7的系统数据库,对元数据信息操作,解决性能瓶颈
+--------------------+
PS:这4个数据库是系统数据库,不能删除


2.使用某一个数据库进行操作
use database_name;【使用数据库的名称】
例如:
use mysql
Database changed 证明已经可以操作mysql这个数据库

3.创建数据库
create database  database_name;【创建数据库的名称】
例如:
create database mydb1;
Query OK, 1 row affected (0.00 sec) 这个语句就证明创建数据库成功

4.查看mysql版本号
一个是进入到mysql中内部查询 select version();
没有进入到mysql中查询      mysql -version;


5.【一定要慎重!慎重!!在慎重!!!一定要确认已经备份了,在删除】 删除数据库
drop database database_name;【要删除数据库的名称】
例如:
drop database mydb1;
Query OK, 0 rows affected (0.00 sec) 证明删除成功了




MySQL的存储引擎

MySQL的存引擎:

MySQL中数据用各种不同技术存储数据,但是这些技术每一种都有不用特点包括:存储机制、索引技巧、锁定的水平并提供不同的功能和特点。

MyISAM:拥有较高的插入,查询速度,但是不支持事务,不支持外键

InnoDB:支持事务,支持外键,支持行级锁定,性能低

InnoDB存储引擎可以提供**【提交、回滚和崩溃回复的(事务)安全能力】**,但是对比MyISAM处理效率比较地下,且会占用磁盘空间保留【索引和数据】

MyISAM和InnoDB都是使用【B+Tree作为索引结构】
PS:在B+Tree之前数据库还是用 B-Tree作为索引结构

请添加图片描述

个人选择意见:

1.是否要支持事务,如果要支持选择InnoDB,如果不需要可以考虑使用MyISAM

2.如果表中绝大多数都是只读查询,可以使用MyISAM,如果既有读写也频繁操作,建议使用InnoDB

3.系统崩溃后,MyISAM恢复起来更困难,如果能接受,就不选择InnoDB

4.MySQL5.5版本开始InnoDB已经成为MySQL的默认存引擎,所以性能不是最求极致,建议使用InnoDB

MySQL常用的数据类型

Mysql中常用的整数数据类型

MySQL类型 对应 Java中数据类型

=====================================

INT、INTEGER int,Integer

BIGINT long、Long

请添加图片描述

MySQL中【显示宽度指示器】当从数据库检索某一个值的时候,可以把这个值加长到指定长度

例如:

指定一个字段(列)的数据类型是INT(6),就可以保证所有包含数据少于6个的值从数据库检索出来的时候,使用空格自动填充。

需要注意:(6)就是宽度指示器,它不会影响**【字段大小】和它【可以存储的值的范围】**

age INT(2) 并不是代表age最多只能存储到99,而是查询age值的时候使用00来占位

MySQL中常用小数(浮点)数据类型

MySQL类型 对应 Java中数据类型

=====================================

FLOAT flaot、Float

DOUBLE double、Double

DECIMAL BigDecimal

请添加图片描述

在MySQL中要对小数进行存储时可以表示存储范围

FLOAT[(s,p)] 或者 DOUBLE[(s,p)]

小数数据类型在数据库中可以存储小数也可以存整数

p代表的式【精度】 s代表的式【范围】

PS:在真正语法汇总是不写中括号,这里只是为了展示效果

money DOUBLE(5,2)  整数和小数一共占有5位,其中小数占2位  
所以这个money可以存储的范围是  最大值是 999.99   最小值是-999.99

PS:因为float和double存数据都不够精确,所以在存高精度数据的时候,建议使用DECIMAL【特别是货币】

​ 可以参考float和double的范围计算,就算不给范围,一定可以存储只是没有做限制

MySQL中常用字符串数据类型

请添加图片描述

MySQL类型 对应 Java中数据类型

=====================================

char、varchar String

MySQL中如果要表示字符串需要使用【单引号】,相当于是Java中字符串

char(size):定长字符串,范围是0~255个字节,size指N个字节,若插入的字节数超过设置长度,会被进行截取警告

name char(2); 存储的数据就不能超过2个字符,否者会被截取存储
例如: 存储  ab   name可以正常存储
      存储  abc  name也可以正常存储
      【mysql会给一个警告,字串超出存储范围,然后截取嫩个存储的数据进行存 即 只存 ab】

varchar(size):变长字符串,范围是0~255个字节但是从MySQL5以后支持最大字节到65535,size指N个字节,若插入的字节数超过设置长度,会被进行截取警告

name varchar(2); 存储的数据就不能超过2个字符,否者会被截取存储
例如: 存储  ab   name可以正常存储
      存储  abc  name也可以正常存储
      【mysql会给一个警告,字串超出存储范围,然后截取嫩个存储的数据进行存 即 只存 ab】

一般如果存储大量字符串,比如文章或是纯文本文件,可以使用TEXT系列

char和varchar的区别

请添加图片描述

PS:所以在创建表时建议使用varchar作为字段类型,可以动态的选择存储空间

MySQL中常用时间、日期存储类型

请添加图片描述

PS:在MySQL中日期时间值的存储需要使用当前【单引号】

day DATE; day这个字段存储值 需要使用 '1990-1-1'

MySQL中日期箱单与是Java中Date类和Calendar类

MySQL中常用的二进制数据存储类型

请添加图片描述

PS:主要是用来存储图片,音频和视频,二进制对象【0~4GB】

​ 实际开发中绝对不会将二进制文件保存到数据库中,会在数据库中保存一个二进制文件存储的地址【相当与是一个路径】,通过这个路径读取实际存储位置的数据

​ 在现阶段实际安装数据库的服务器上一般存级别也是TB级别

​ 数据库中是没有Boolean类型,所有使用二进制中BIT来存0和1表示boolean类型中的true和false

数据库、表、列的操作(DDL)

DDL三个关键字【create、alter、drop】

数据库操作

创建数据库

创建数据库
	create database  database_name;【数据库的名称】
创建数据库的同时指定数据库的编码集
	create database database_name character set  charSetforName;【编码集】	

查询数据库

查看当前数据库管理系统中有哪些数据库
show  databases;

查询当前数据库的信息 
show create database database_name;【要查询数据库的名称】

例如:
 show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+


修改数据库的编码集
alter database database_name【要修改数据库的名字】 character set charsetforName【编码集】
 例如:
 alter database db1 character set gbk;
Query OK, 1 row affected (0.00 sec) 代表更新成功

PS:"如果通过这样的方式修改数据库编码集,只会对后续创建表有效,原有的表依旧是原来的编码集"

删除数据库

一定要慎重,慎重,在慎重!!!!!!!
drop  database database_name;【要删除数据库的名字】

其他命令

切换使用数据库
use database_name;【要使用数据库的名字】

查看当前正在使用数据
select database();

表操作

创建表

表中只有一个列,可以这样创建
create table 表名(
	列名 列的数据类型 [约束]
);

表中有多个类,可以这样创建
create table 表名(
	列名1 列的数据类型 [约束],
    列名2 列的数据类型 [约束],
    ......
    列名N 列的数据类型 [约束]
);

注意:
   1.表名必须唯一
   2.约束可以不写,后学学习了表的完整性建议添加约束
   3.如果表中有多个列,列与列之间使用【,】分隔,最后一个列不写任何符号
   4.不建议在创建表达时候使用MySQL的关键字做表的名字,如果非要这样做,需要使用 反引号【`】
   例如: mysql中 select 是关键,想使用 select 作为表名 `select`
   不要这样是最好的,一般起表名的时候【t_表名】
   PS: 表的完整性时在补齐约束
   
创建一个学生表student,表中学生信息 id,name,age   
create table t_student(id int,name varchar(100),age int);

查询表

查询当前数据库中有哪些表
show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t_student     |
+---------------+

查询表中的字段【列】信息
desc  表名;
desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| name  | varchar(100) | YES  |     | NULL    |       |
| age   | int(11)      | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

更新表

在表中增加一个列
alter table 表名  add 列名 列的数据类型;

在学生表中增加一列image
alter table t_student add image blob;
Query OK, 0 rows affected (0.02 sec) 提示更新
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| name  | varchar(100) | YES  |     | NULL    |       |
| age   | int(11)      | YES  |     | NULL    |       |
| image | blob         | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+


修改列的数据类型【不要在已经存储值的列的进行操作】
alter table 表名 modify 列名 列的数据类型

将name列修改为varchar(60)
 alter table t_student modify name varchar(60);
Query OK, 0 rows affected (0.02 sec) 提示更新
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(60) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
| image | blob        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+


删除表

一定要慎重,慎重,在慎重!!!!!!!

删除表中某一个列
alter table 表名 drop 列名;
table t_student drop image;
Query OK, 0 rows affected (0.03 sec)提示删除
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(60) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

删除表
drop table  表名;
drop table t_student;

其他操作

更改表的名字
rename table 原表名字 to 新表名;
rename table t_student to t_user;

查看表的建表细节
show create table 表名;
 show create table t_user;
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                             |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_user | CREATE TABLE `t_user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(60) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------+

PS:在建表的前提下,可以表的使用引擎和字符集 ENGINE=存储引擎 DEFAULT CHARSET=字符集


修改表的字符集【这个修改只能针对后续存储数据有效】
alter table 表名 character set  字符编码集;
alter table t_user character set utf8;


修改列的名字和数据类型
alter  table 表名 change  原列名字 新列名字 新列的数据类型;
alter table t_user change name username varchar(100);



数据库的插入、更新和删除(DML)

DML千万不要和DDL混了

DML的关键字【insert、update、delete】

需求:创建一个数据库mydb1字符编码集为utf8,

​ 在这个数据库中创建一个表emp(id,name,gender,birthday,salary,entry_date【入职日期】,resume【描述】)

向表中插入数据【生日和入职如期是date类型】

插入数据

insert into 表名(列名1,列名2......) values(列值1,列值2...)
注意:
1.列名和列值必须是一一对应
2.存储的值不能超过数据范围,如果没有值【null】
3.字符串和日期都需要使用【单引号】引起来

查询表中数据 select * from 表名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Caché简介 Caché是新一代高性能数据库技术,称之为“后关系型”。作为后关系型数据库,它整合了对象数据库访问、高性能的SQL访问、强大的多维数据访问——这三种方法能够天衣无缝地同时访问相同的数据。数据只要在单一的整合 数据字典中描述一次,就可以被这三种方法访问。Caché提供了比关系型技术更加高效的性能,更大的扩展性,更快速的编程能力和更加便捷的使用性能。 Caché不仅仅是一种纯的数据库技术。Caché包括一个应用服务器,这个服务器提供高级对象编程,并且可以很容易地与很多技术集成。Caché还提供高性能的运行环境,这一运行环境采用了举世无双的数据缓存技术。 Caché还在另一方面远远胜过了传统的数据库技术。Caché为开发复杂的、基于网页应用程序提供了丰富的集成环境。Caché服务页(CSP)技术可以进行快速开发,动态产生网页。上千个用户甚至在在比较差的硬件条件下也可以同时访问数据上的应用程序。对于那些不基于浏览器的应用,用户接口可以用任何一个流行的客户端接口技术编写,如VB,Delphi,Java,或者C++。剩下的工作都交给Caché运行,这样可以得到最好的结果(最快的编程效率,最高的性能,最低的维护成本)。另一方面,Caché也提供了与其他技术的交互,支持大多数通用的开发工具,所以开发方法的选择范围很大。 不要嫌分值高,102页的官方权威资料,对于需要使用后关系型数据库进行开发的人来说,是绝对超值的,而对于不需要人则没有什么意义. 这是我从豆豆丁网花5元现金买来的资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值