Mysql基础
一、存取数据的演变史
1.文本文件
文件路径不固定,格式不统一
2.软件开发目录规范
数据保存在db目录下(路径偏向统一),数据格式还没有得到统一(文本,json格式,对象)
3.数据库服务
统一了路径,统一操作方式
降低学习成本,提高开发效率
二、数据库软件应用史
1.单击游戏
数据存储在计算机的本地,无法共享
2.网络游戏
数据存储在网络中,可以共享(数据库服务)
# 远程数据库服务
# 数据库集群:
1.数据安全性问题
2.服务器负载问题
解决:让多台服务器运行相同的数据库服务
三、数据库的本质
没有特殊说明的情况下,将数据库是指数据库软件
我们称数据库软件是一款cs架构的应用程序
'''意味着所有的程序员其实都有资格编写一款数据库软件,市面上已经有很多的数据库软件'''
1.站在底层原理的角度
数据库是指操作数据的进程(一堆代码)
2.站在实际应用的角度
数据库指的是可视化操作界面(一些软件)
四、数据库的分类
1.关系型数据库
特征1:数据的组织方式有明确的表结构,关系型数据库存取数据的方式可以看成表格
特征2:表与表之间可以建立数据库层面的关系
常见的关系型数据库软件:
MySQL,PostgreSQL,MariaDB,Oracle,sqlite,db2,sql,server
详解:
1.MySQL:开源免费,使用最广,性价比高,数据库学习必备
2.Oracle:收费,成本较高但是安全性较高,用于银行及只要机关
3.ostgreSQL:开源免费,支持二次开发,兼容性极高
4.MariaDB:开源免费
5.sqlite:小型数据库,只要用于本地测试
2.非关系型数据库
特征1:数据的组织方式没有固定明确的表结构,是以k:v键值对的形式组织的
{'username':'kevin','pwd':123}
特征2:数据之间无法建立数据库层面的关系
常见的非关系型数据库软件:
redis,mongoDB,memcache
详解:
1.redis:目前最火的,使用频率最高的非关系型数据库(缓存数据库)
2.mongoDB:文档型数据库 最像关系型数据库的非关系型数据库(主要用于爬虫以及大数据领域)
3.memcache:已经被redis淘汰了
五、MySQL简介
1.MySQL版本问题
5.6X:前几年使用频率最高的版本
5.7x:最近尝试迁移的版本(频率+)
8.0x:最新版,功能很强大,但是线上环境(上线产品)几乎不用,稳定型不高(本地自己用非常好用)。
'''虽然版本有区别,但是操作几乎没有区别,主要提现在底层运作'''
2.下载与安装
2.1访问官网:https://www.mysql.com/
2.2点击DOWNLOADS
2.3点击community server
2.4点击archives
2.5选择版本几点download
3.解压安装
上述下载的压缩包里含有服务端和客户端,支持本地操作。
4.主要文件介绍
bin文件夹:
mysqld.exe服务端
mysql.exe客户端
data文件夹:存储数据
my-default.ini:默认配置文件
六、Mysql基本安装
cmd建议你使用管理员身份打开
1.切换到mysql的bin目录下先启动服务端
在终端敲mysqld
2.保持窗口不关闭 重新打开一个新的cmd窗口 输入mysql -u用户名 -p密码
3.切换到mysql的bin目录下启动客户端
1.先把bin目录添加到环境变量
复制bin的路径,到高级系统设置中添加环境变量
清空之前打开的cmd窗口 一定要把之前用cmd启动的服务端关闭(ctrl+c)
2.将mysql添加到系统服务中
1.如何查看系统服务
鼠标右键任务栏选择服务
cmd输入services.msc回车
2.以管理员身份打开cmd窗口
mysqld --install
3.首次添加不会自动启动 需要人为操作一下
1.鼠标右键点击启动
2.命令行启动
net start mysql
"""
如果想卸载重新按照
1.先关闭服务端
net stop mysql
2.移除系统服务
mysqld --remove
"""
1.修改密码
方式1:mysqladmin
# mysqladmin -u用户名 -p原密码 password 新密码
方式2:直接修改存储用户数据的表
方式3:冷门操作 有些版本可能还不支持
修改当前登录用户的密码 ----->set password=password('新密码')
2.忘记密码
方式1:卸载重新装
方式2:把data目录删除 拷贝同桌的目录
方式3:小把戏操作
1.关闭正常的服务端
2.以跳过授权表的方式重启服务端(不校验密码)
3.以管理员身份进入然后修改mysql.user表数据即可
net stop mysql
mysqld --skip-grant-table
mysql -uroot -p
update mysql.user set password=password('123') where Host='localhost' and User='root';
4.关闭服务端 然后以正常方式启动即可
七、SQL与NoSQL
数据库服务端是可以服务多种类型的客户端
客户端可以是自己开发的 也可以是python代码编写 也可以是java代码编写
SQL:操作关系型数据库的语言
NoSQL:操作非关系型数据库的语言
# SQL有时候也指代关系型数据库,NoSQL有时候也指代非关系型数据库
八、数据库重要概念
'''以下概念仅仅视为了小白更快的理解,并不是完全准确'''
库 ------->>> 文件夹
表 ------->>> 文件夹里的文件
记录 ------->>> 文件里一行一行的数据
注:
1.sql语句的结束符: -> ;
2.取消sql语句的执行: -> \c
九、基本的SQL语句
1.基于库的增删改查
1.增
# create database 库名;
mysql> create database jia;
Query OK, 1 row affected (0.00 sec)
2.查
# show create database 库名 或者 show databases
mysql> show create database jia;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| jia | CREATE DATABASE `jia` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
3.改
# alter database 库名 charset='编码';
mysql> alter database jia charset='utf8';
Query OK, 1 row affected (0.01 sec)
mysql> show create database jia;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| jia | CREATE DATABASE `jia` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
4.删
# drop database 库名
mysql> drop database jia;
Query OK, 0 rows affected (0.04 sec)
2.基于表的增删改查
1.增
# create table 表名(字段1 字段类型,字段2 字段类型,字段3 字段类型);
# 操作表之前先确定库,再操作表
mysql> create database jia;
Query OK, 1 row affected (0.00 sec)
mysql> use jia;
Database changed
mysql> create table student(id int,name varchar(12),age int);
Query OK, 0 rows affected (0.02 sec)
mysql> create table student(id int,name varchar(12),age int);
Query OK, 0 rows affected (0.02 sec)
2.查
# show tables;
# show create table 表名;
# describe 表名 / desc 表名
mysql> show tables;
+---------------+
| Tables_in_jia |
+---------------+
| student |
| teacher |
+---------------+
2 rows in set (0.00 sec)
mysql> describe student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> desc teacher;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
3.改
# alter table 旧表名 rename 新表名;
mysql> alter table teacher rename teach;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+---------------+
| Tables_in_jia |
+---------------+
| student |
| teach |
+---------------+
2 rows in set (0.00 sec)
4.删
# drop table 表名
mysql> drop table teach;
Query OK, 0 rows affected (0.04 sec)
3.基于记录的增删改查
1.增
# insert into 表名 values(数据1,数据2);
mysql> insert into student values(1,'jason',18),(2,'jia',20);
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0
2.查
# select * from 表名
mysql> select * from student;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | jason | 18 |
| 2 | jia | 20 |
+------+-------+------+
2 rows in set (0.00 sec)
3.改
# update 表名 set 字段名 = '新数据' where 条件;
mysql> update student set name = 'xin' where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | jason | 18 |
| 2 | xin | 20 |
+------+-------+------+
2 rows in set (0.00 sec)
4.删
# delete from 表名 / delete from 表名 where 筛选条件
mysql> delete from student where id = 1;
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+------+------+------+
| id | name | age |
+------+------+------+
| 2 | xin | 20 |
+------+------+------+
1 row in set (0.00 sec)