数据库原理图

image.pngimage.png

持久化

持久化:把数据保存到存储设备中以供以后使用。数据持久化意味着将内存中的数据保存到硬盘上加以 “固化”。持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
image.png

数据库和数据库管理系统的关系

image.png
image.png

关系型数据库与非关系型数据库

关系型数据库

image.png
image.png

数据库的安装步骤

image.png
1. 安装地址
https://www.mysql.com/downloads/
image.pngimage.pngimage.png
image.pngimage.pngimage.pngimage.png
2. 下载后会得到zip文件,解压路径最好不要有中文和空格。
3. 添加环境变量:电脑——属性——高级系统设置——环境变量,在Path环境变量中增加mysql的bin目录。
image.png
4. 在 D:\JavaTools\mysql-8.0.27-winx64 目录下创建 my.ini文件,这个需要我们自己创建。
image.png
注:在启动mysql时也需要注释掉。

  1. [client]
  2. port=3306
  3. default-character-set=utf8
  4. [mysqld]
  5. basedir=D:\JavaTools\mysql-8.0.27-winx64\
  6. datadir=D:\JavaTools\mysql-8.0.27-winx64\data\
  7. port=3306
  8. character_set_server=utf8
  9. #skip-grant-tables

注意两点:
1. 是 utf8 而不是 utf-8 ,两句都是。
2. 目录可能加一个\,也有可能加两个\,都试试(大部分情况是两种都可以)。

5. 使用管理员身份打开 cmd,并切换到 D:\JavaTools\mysql-8.0.27-winx64\bin 目录下,执行mysqld -install (cd /D D:\JavaTools\mysql-8.0.27-winx64\bin)
注:如果以前安装过mysql cd /D 提示The service already exists,解决办法:卸载mysql后再安装提示The service already exists!问题解决方法 - 酱醋茶cha - 博客园
image.png
(以前的图,看个结果就行,路径已经修改过了)
image.png
image.png
6. 初始化数据库 mysqld —initialize-insecure —user=mysql
image.png
初始化结束后,会生成data目录:
image.png
7. 启动 mysql 服务:net start mysql(停止 mysql服务:net stop mysql)注意都是在bin目录上运行的。(注意:每次开机要使用sql都需要重新启动一下)
image.png
8. 进入 mysql 管理终端:mysql -u root -p (当前root用户密码为空,直接回车)
windows系统下Mysql服务启动后立即关闭问题-排查及解决方法_陈文洁的博客-CSDN博客_mysql服务启动后又自动停止 启动mysql后又立刻停止的解决方案(其实就是把 my.ini 的最后一句注释掉)
image.png
9. 修改 root用户密码
首先输入 use mysql; 进入最高权限。
update user set authentication_string=password(shang)where user=rootand Host=localhost;
image.png
image.png
注:在mysql 8.0以上版本,该方法已经失效。最新的语句是:
use mysql; ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’; //注意必须大写
MySQL修改密码报错:ERROR 1064 (42000): You have an error in your SQL syntax;check the manual that correspon - 灰信网(软件开发博客聚合)
但是前面的步骤不变,并且同样需要 flush privileges;
10. 修改 my.ini,将 skip-grant-tables的注释去掉,再次进入就会进行权限验证了(否则会报错)
第一次输入不通过,第二次输入正确,通过。
image.png

连接SQL

image.png

注:一定要保证sql是在运行中。 ipconfig查找本机ip。
image.png

SQL数据库结构

image.png
image.png
数据库放在data文件夹中,数据库里的数据(文件)放在对应的文件夹中。用Java操作为主。

SQL语句分类

image.png

数据在数据库中的存储方式

image.pngimage.png

SQLyog

navcat使用教程:navicat 使用 - 每天都要进步一点点 - 博客园 (cnblogs.com)
新建一个连接:
image.pngimage.png

MySQL数据类型

image.png
image.pngimage.pngimage.png

整数

image.pngimage.png
注:
1. 在能够满足需求的情况下,尽量选择占用空间小的类型。
2. 指定unsigned 就是没有符号,否则为有符号。

  1. CREATE TABLE t3 (
  2. id TINYINT UNSIGNED);

Bit

image.png
比如 bit(8) 表示一个字节的范围在 0~255(2^8-1)

小数

image.png

字符串

image.png

  1. CREATE TABLE t01(
  2. `name` CHAR(255));
  3. CREATE TABLE t02(
  4. `name` VARCHAR(32766)) CHARACTER SET gbk;

注:
1. 如果表的编码是 utf8 那么size最大是 (65532 - 3) / 3 = 21844
2. 如果表的编码是 gbk 那么size最大是 (65532 - 3) / 2 = 32766
3. 区分字符与字节!size里永远是字符! 比如 char(4) 和 varchar(4) 都表示4个字符,但是对应的字节不同,需要计算(根据编码方式)。
4. char是定长(固定的大小),比如 char(4),即使只插入了’aa’,也会分配占用4个字符的空间。
5. varchar是变长(变化的大小),就是说,varchar(4) ,如果你插入了’aa’,实际占用的空间大小只有两个字符。 当然varchar本身还要占用1~3个字节来记录存放的内容长度。
6. 如果数据是定长,比如身份证号,邮编,md5的密码等,使用char。如果一个字段的长度是不确定的,比如留言,文章等,使用varchar。 char的好处在于查询速度较快。
7. 如果varchar不够用,可以使用mediumtext或longtext,想简单点可以直接使用text
image.png

日期类

  1. CREATE TABLE t1(
  2. birthday DATE,
  3. job_time DATETIME,
  4. login_time TIMESTAMP //时间戳
  5. NOT NULL DEFAULT CURRENT_TIMESTAMP
  6. ON UPDATE CURRENT_TIMESTAMP);
  7. #如果希望timestamp自动更新,需要手动输入上面两行代码

MySQL管理

image.png
image.png

一些操作

image.png

  1. #Mysql用户的管理
  2. # 原因:当我们做项目开发时,可以根据不同的开发人员,付给他相应的Mysql操作权限
  3. # 因此,Mysql数据库管理人员(root),根据需要创建不同的用户,赋给相应的权限,供人员使用
  4. # 创建新的用户
  5. CREATE USER 'shang'@'localhost' IDENTIFIED BY '123456'
  6. -- 1. 'shang'@'localhost'表示用户的完整信息,'shang'是用户名,'localhost'是登录IP
  7. -- 2. 123456是密码,但是存放在mysql.user表时,是password('123456')加密后的密码
  8. # 删除用户
  9. DROP USER 'shang'@'localhost'
  10. # 修改密码(root用户修改其它用户)
  11. SET PASSWORD FOR 'shang'@'localhost' = PASSWORD('123456')
  12. # 但是自己修改自己的密码是永远没问题的

image.png
image.png

  1. #给 shang 分配 查看news表 和 添加news表 的权限
  2. GRANT SELECT,INSERT
  3. ON shang_01.news
  4. TO 'shang'@'localhost'
  5. #回收 shang 在 shang_01.news 的所有权限
  6. REVOKE ALL ON shang_01.news
  7. FROM 'shang'@'localhost'
  8. #删除用户shang
  9. DROP USER 'shang'@'localhost'

image.png

  1. DROP USER jack -- 默认就是 DROP USER 'jack'@'%'
  2. CREATE USER 'smith'@'192.168.1.%' --指定一部分ip地址
  3. DROP USER 'smith'@'192.168.1.%'

MySQL表类型

image.png
image.png
image.png
image.png
查看所有的存储引擎:

  1. SHOW ENGINES

修改存储引擎:

  1. ALTER TABLE 't29' ENGINE = INNODB