目录
mysql
数据存取演变史
1.文本文件
基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。
但是事实上它会存在许多问题:
·文件路劲不一致 C:\a.txt D:\aaa\b.txt E:\ccc.txt
·数据格式不一致 jason|123 tony$123 kevin@123
2.软件开发目录规范
规定了数据文件的大致位置:db文件夹
针对数据格式还是没有完全统一,比如统一json文件但是内部键值对不同
3.数据库服务
统一了存取位置,也统一了数据格式(完全统一)
数据库软件应用史
1.单机游戏
不同计算机上的相同程序,数据无法共享
数据库服务全部在本地完成
2.网络游戏
不同计算机的相同程序,数据可以共享
数据库服务单独在网络上架设
"""数据库服务集群:提升数据的安全性"""
数据库的本质
'数据库' 这三个字在不同的角度下描述的意思是不一样的
1.站在底层原理的角度
数据库指的是专用于操作数据的进程
即:运行在内存中的代码
2.站在现实应用的角度
数据库指的是拥有操作界面的应用程序
即:用于操作数据进程的快捷界面
我们不做特殊说明的情况下提出的数据库其实是在指数据库软件
我们也称数据库软件本质是一款cs架构的应用程序
即:所有的程序员理论上都可以编写>>>:市面上已经有许多数据库软件了
数据库的分类
1.关系型数据库
·数据的组织方式有明确的表结构
关系型数据库存取数据的方式可以看作是表格
·表与表之间可以建立代码层面的关系
用户表--(有关系)--房屋表
只要获取到用户表的一条数据,就可以获取到与之相关的其他数据
'''
MySQL、PostgreSQL、MariaDB、Oracle、sqlite、db2、sql、server
MySQL:开源,使用最为广泛、入门必学
PostgreSQL:开源,支持二次开发
MariaDB:开源,与MySQL是同一个人写的,用法极其相似
Oracle:收费,安全性非常高,主要用于银行各大重要机关
sqlite:小型数据库,主要用于本地色测试
'''
2.非关系型数据库
·数据的组织方式没有明确的表结构,是以K:V键值对的形式组织的
{'name':'lisa'}
{'habby':'sing、dance'}
·数据之间无法直接建立代码层面的关系
'''
redis、mongoDB、memcache
redis:目前最火,使用频率最高,是一个缓存型数据库
mongoDB:稳定型数据库,最像关系型的非关系型,主要用于爬虫、大数据
memcache:已经被redis淘汰
'''
MySQL数据库简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司
MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS
(Relational Database Management System,关系数据库管理系统) 应用软件之一
1.MySQL版本问题
5.6X:前几年使用频率最高版本
5.7X:最近尝试迁移的版本问题
8.0X:最新版,功能很强大,但是线上环境几乎不用(本地自己用非常好用)
'''虽然版本上有区别,但是操作几乎没有区别,主要体现在底层运作'''
2.下载与安装
1.访问官网
2.点击DOWNLOADS
3.点击GPL
4.点击community server
5.点击archives
6.点击download
3.解压安装
上述方式下载的压缩包里含有服务端和客户端 支持本地操作
4.主要文件介绍
bin文件夹
mysqld.exe服务端 mysql.exe客户端
data文件夹
存取数据
my-default.ini
默认配置文件
基本使用
1.首先切换到mysql的所在盘
C:\Users\***>D:
2.查找mysql文件位置
D:\>cd mysql-5.6.44-winx64\bin
3.输入mysql启动文件
D:\mysql-5.6.44-winx64\bin>mysqld
4.再开启新的cmd窗口
作为客户端使用,直接敲mysql回车是游客模式
5.用户密码登录
mysql -u用户名 -p密码(mysql默认密码为空)
6.使用游客登陆和使用管理员密码登录是有区别的
管理员用户密码登录:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
游客登录:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
7.退出
exit、quit
系统服务制作
1.如何解决每次都需要切换路径查找文件的缺陷
添加环境变量(D:\mysql-5.6.44-winx64\bin)
2.将mysql服务端制作成系统服务(随着计算机的开启而启动 关闭而结束)
·以管理员身份打开cmd窗口
·执行系统服务命令
mysqld --install
Service successfully installed.
·启动服务端
1.右键直接点击启动
2.命令启动
net start mysql
'''
1.查看系统服务的命令
services.msc
2.关闭mysql服务端
net stop mysql
3.移除系统服务
1.先确保服务已经关闭
2.执行移除命令
mysqld --remove
'''
密码相关操作
1.修改密码
mysqladmin命令
通用方式: # 直接在cmd中写
mysqladmin -u用户名 -p原密码 password 新密码
'Warning: Using a password on the command line interface can be insecure.'
提示这个不是报错,而是提醒你=我们此时这么更改密码是不安全的,密码暴露在了外面
第一次修改:mysqladmin -uroot -p password 123,首次修改因为mysql默认密码为空所以-p后面什么都没有
第二次修改:mysqladmin -uroot -p123 password 321
偏门方式(有些版本无法使用): 需要先登录,更改的是当前登录的这个账号的密码
set password=PASSWORD('新密码');引号必须要加
2.忘记密码
直接重装\拷贝对应文件(user.frm、user.MYD、user.MYI)
了解知识:
先关闭服务端 然后以不需要校验用户身份的方式启动 再修改 最后再安装正常方式启动
1.net stop mysql
2.mysqld --skip-grant-tables(跳过授权表,不校验用户的密码,可以直接进去)
3.mysql -uroot -p
4.update mysql.user set password=password(123) where Host='localhost' and User='root';
5.net stop mysql
6.net start mysql
SQL和NoSQL
数据库的服务端支持各种语言充当客户端
MySQL服务端仅仅是用来管理数据的,没有其他操作
eg:以MySQL服务端为例
MySQL客户端、python代码编写的客户端、java代码编写的客户端
为了能够兼容所有类型的客户端 有两种策略
1.服务端兼容
不合理 消耗数据库服务端资源!!!
2.制定统一标准
SQL语句、NoSQL语句
SQL与NoSQL
SQL语句的意思是操作关系型数据库的语法
NoSQL语句的意思操作非关系型数据库的语法
ps:SQL有时候也用来表示关系型数据库 NoSQL也用来表示非关系型数据库
基本SQL语句
1.SQL语句结束符是分号
;
2.取消SQL语句的执行
\c
3.将查询结果进行按列打印,可以使每个字段打印到单独的行
\G
4.基本常用语句
show databases; 查看所有的数据库
show tables; 查看所有的表
select * from mysql.user; 查看user表里面所有的记录
\G使用前,显示效果很差
\G使用后即将查到的结构旋转90度变成纵向
1.针对库的基本SQL语句
1.增
create database 库名;
2.查
show databases;
show create database 库名;
3.改
alter database 库名 charset='gbk';
4.删
drop database 库名;
-----------------------------------客户端sql语句执行-------------------------------
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> show create database school;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| school | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter darabase school charset='gbk';
ERROR 1064 (42000): 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 'darabase school charset='gbk'' at line 1
'根据错误提示检查发现单词写错了,要学会看错误修改错误'
mysql> alter database school charset='gbk';
Query OK, 1 row affected (0.00 sec)
mysql> drop database school;
Query OK, 0 rows affected (0.03 sec)
2.针对表的基本SQL语句
"""
查看当前所在的库名
select database();
如果没有切换指定的库 那么默认是NULL
use 库名;
"""
1.增
create table 表名(字段名 字段类型,字段名 字段类型,字段名 字段类型);
2.查
show tables;
show create table 表名;
describe 表名;
desc 表名;
3.改
alter table 旧表名 rename 新表名; # 改表名
4.删
drop table 表名;
-----------------------------------客户端sql语句执行-------------------------------
'创建数据库'
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
'使用数据库'
mysql> use school;
Database changed
'在当前数据库中创建表'
mysql> create table student(
-> id int,
-> name varchar(20),
-> age int,
-> habby varchar(50));
Query OK, 0 rows affected (0.05 sec)
'查看表里的信息'
mysql> select * from student;
Empty set (0.02 sec)
'展示当前数据库中的表'
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
'展示表的数据,会告诉这个表是怎么写的,带有编码和引擎'
mysql> show create table student;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`habby` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
'对表的介绍'
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| habby | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
'修改表的名字'
mysql> alter table student rename students;
Query OK, 0 rows affected (0.03 sec)
'删除表'
mysql> drop table students;
Query OK, 0 rows affected (0.01 sec)
3.针对记录的基本SQL语句
"""
既然想操作记录 那么肯定的先有库和表
辛辛苦苦一个月 换来的就是一条SQL语句 修改你的账户余额
"""
1.增
insert into 表名 values(数据,数据);
insert into 表名 values(数据,数据),(数据,数据),(数据,数据);
2.查
select * from 表名; # *表示查看所有字段
select 字段1,字段2 from 表名;
ps:如果表中字段较多出现了错乱 可以结尾写\G
3.改
update 表名 set 字段名=新数据 where 筛选条件;
4.删
delete from 表名; # 删除表中所有的数据
delete from 表名 where 筛选条件 # 按照条件删除数据
-----------------------------------客户端sql语句执行-------------------------------
'添加数据'
mysql> insert into student values(1,'aa',18,'eat');
Query OK, 1 row affected (0.00 sec)
'查看数据'
mysql> select * from student;
+------+------+------+-------+
| id | name | age | habby |
+------+------+------+-------+
| 1 | aa | 18 | eat |
+------+------+------+-------+
1 row in set (0.00 sec)
'指定要查询的数据'
mysql> select id, name from student;
+------+------+
| id | name |
+------+------+
| 1 | aa |
| 2 | bb |
| 3 | dd |
+------+------+
3 rows in set (0.00 sec)
'添加多条数据'
mysql> insert into student values(2,'bb',19,'sing'),(3,'cc',20,'dance');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+------+------+------+-------+
| id | name | age | habby |
+------+------+------+-------+
| 1 | aa | 18 | eat |
| 2 | bb | 19 | sing |
| 3 | cc | 20 | dance |
+------+------+------+-------+
3 rows in set (0.00 sec)
'修改表中的数据'
mysql> update student set name='dd' where id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+------+------+------+-------+
| id | name | age | habby |
+------+------+------+-------+
| 1 | aa | 18 | eat |
| 2 | bb | 19 | sing |
| 3 | dd | 20 | dance |
+------+------+------+-------+
3 rows in set (0.00 sec)
'删除数据'
mysql> delete from student where id=3;
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+------+------+------+-------+
| id | name | age | habby |
+------+------+------+-------+
| 1 | aa | 18 | eat |
| 2 | bb | 19 | sing |
+------+------+------+-------+
2 rows in set (0.00 sec)
标签:set,数据库,SQL,初识,sec,mysql,MySQL,0.00
From: https://www.cnblogs.com/zjl248/p/16916240.html