admin管理员组文章数量:1599280
为什么要学习数据库?
通过之前的学习,程序需要存储数据,就可以将数据以【变量,常量,数组,集合】等形式进行存储,这些存是存储在内存中【内存中存储–》栈或堆(常量池)】。
将数据存储在内存内存中
好处:速度快,方便 坏处:不持久,掉电易失
后续的学习中,我们接触到流【通过流形成数据通道,将内存中的数据存储到硬盘中以便对数据进行保存,已达到持久化】
好处:可以持久化保存数据【将数据写入到磁盘中】 坏处: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/
MySQL下载页面:https://dev.mysql/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:
-
-h 和 -P 是可以省略【但是仅限本机连接】 如果要连接外部的MySQL服务器就需要写
主机名【即IP地址】 端口号【即 3306】
-
-p 后面是密码但是千万不要加空格 例如【-p 密码】
原因:如果写-p 密码 此时系统会认为空格也是密码的一部分,所以-p一定要连着写密码
mysql -u root -p123456 不会用这样的方式做,原因在于密码是明文
-
正常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 表名
版权声明:本文标题:2-25 MySQL基础 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728313390a1153302.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论