数据库01 /Mysql初识、基本指令、数据库密码相关、创建用户及授权
数据库01 /Mysql初识、基本指令、数据库密码相关、创建用户及授权
1. 数据库概述
-
相关概念
-
数据库:数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
-
所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合
-
库:相当于文件夹
表:相当于文件
记录:表里边的内容
-
-
数据库分类
关系型:每个字段之间的关系紧密,通过任何一个字段都可以查到该组数据
非关系型:只能通过key,去获取value
-
数据库的优势
- 程序稳定性:相对来说,程序会更加稳定
- 数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
- 并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作
- 效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多
2. 数据库管理系统/DBMS
-
DBMS/数据库管理系统 概述
数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。
-
RDBMS/关系数据库管理系统
- 关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
-
mysql数据库
使用的是SQL语言,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
-
oracle数据库
oracle数据库相对于mysql数据库来说比较安全,主要应用范围:传统大企业、大公司、政府、金融、证券等
-
MariaDB数据库
是MySQL数据库的一个分支,为了防止甲骨文公司收购了MySQL之后闭源风险,MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎
-
SQL Server数据库
Microsoft SQL Server是微软公司开发的大型关系数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台,SQL Server的缺点是只能在Windows系统下运行
-
Access数据库
Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业使用
-
NoSQL/非关系型数据库管理系统
- NOSQL的本意是“Not Only SQL” 指的是非关系型数据库,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
-
redis数据库
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
-
MongoDB数据库
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的
-
memcached数据库
Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用
-
关系型数据库和非关系型数据库区别:
可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构
3. 结构化查询语言/SQL
-
SQL概述:
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
-
SQL的作用:
主要用于存取数据、查询数据、更新数据和管理关系数据库系统
-
SQL语言的3种类型:
-
DDL语句 数据库定义语言:
数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
-
DML语句 数据库操纵语言:
插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
-
DCL语句 数据库控制语言:
例如控制用户的访问权限GRANT、REVOKE
-
-
不同数据库系统之间的SQL不能完全相互通用
4. mysql的配置文件
-
在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端
-
配置的用户名和密码,就叫做user和password,不能是username什么的
-
配置文件中的注释可以有中文,但是配置项中不能出现中文
-
my.ini(windows)/my.cnf(linux)
[client] #设置mysql客户端默认字符集 default-character-set=utf8 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 user = 'root' password = '123' [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=E:\mysql-5.6.45-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:\mysql-5.6.45-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
5. mysql基本指令
-
远程登录
mysql -h 127.0.0.1 -p 3306 -u root -p -- -h:mysql服务端ip -- -p:mysql端口 -- -u:登录用户名 -- -p:登录用户名对应的密码
-
操作库/增删改查
-- 1.查看数据库 show databases; -- 2.查看其中的一个库 show create database db1; -- 3.创建数据库 create database db1; -- 4.创建数据库并指定编码 create database db1 charset utf8; -- 5.使用数据库 use db1; -- 6.修改数据库编码 alter database db1 charset utf8; -- 7.删除数据库 drop database db1; -- 8.查看当前所在的库 select database();
-
操作表/增删改查
-- 1.创建表(字段名不能相同) create table stu(id int,name char(16)); 注:char(16)5.6版本以前是字节,5.6版本以后是字符 -- 2.查看当下库的所有表 show tables; -- 3.查看刚刚创建的那一张表 show create table stu; -- 4.查看一张表的基本信息 desc stu; -- 5.修改表的数据类型 alter table class modify class_name char(16); -- 6.修改表的字段名和数据类型 alter table class change class_name name char(18); -- 7.删除表 drop table class; -- 建表后,再给id字段设置自增 alter table books modify id int auto_increment primary key not null;
-
操作记录/增删改查
-- 1.新增一条记录 insert into stu values(1,'张三'),(2,'李四'); insert into stu(id,name) values(1,'张三'),(2,'李四'); -- 2.查记录 select 字段名 from stu;(查询表中某个字段的记录) select * from stu; -- 3.条件查询 select * from stu where id = 1; -- 4.修改记录 update stu set name = 'alisa' where id = 3; -- 5.删除记录 delete from stu where name='张三'; delete from t1; -- 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table t1; -- 数据量大,删除速度比上一条快,且直接从零开始, -- 6.将一个表的内容查出来放到另一个表中 insert into class2 select * from class; -- 7.查当前的时间 select now(); -- 删除不存在的记录不会报错
6. 数据库密码相关
-
用户密码设置以及修改密码的三种方式
方法1: 用SET PASSWORD命令
-- 首先登录MySQL,使用mysql自带的那个客户端连接上mysql。 -- 格式: mysql> set password for 用户名@localhost = password('新密码'); -- 例子: mysql> set password for root@localhost = password('123');
方法2:用mysqladmin
1.mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能
2.不用进入数据库,因为已经将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码,不需要进入mysql里面去修改,但是这样操作不安全
-- 格式: mysqladmin -u用户名 -p旧密码 password 新密码 -- 例子: mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接编辑那个自动的mysql库中的user表
-- 1. 首先登录MySQL,连接上mysql服务端 -- 2. 进入mysql库,这个库是所有的用户表和权限相关的表都在这个库里面 mysql> use mysql; -- 3. 修改用户名对应的密码 mysql> update user set password=password('123') where user='root' and host='localhost'; -- 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的
-
root密码忘记的处理方法
1 关闭正在运行的MySQL服务 net stop mysql -- mysql是添加的mysqld到系统服务时的服务名 2. 打开DOS窗口,转到mysql\bin目录。 1.d:(回车) 2.cd mysql-5.6.45-winx64(回车) 3.cd bin(回车) 3. 输入mysqld --skip-grant-tables 回车。 skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证,因为之所以mysql启动之后,客户端连接的时候需要登陆认证,输入密码什么的,是因为mysql服务端启动的时候,加载了自己内部的一些权限相关信息的授权表、权限认证表什么的,这样就要求客户端必须有认证,如果启动的时没有加载这些表和设置,那么我们客户端再进行登陆的时候,就不需要认证了 4 重新启动一个窗口,连接mysql服务端 5 修改mysql库里面的user表里面的root用户记录的密码: password():mysql的内置函数 update user set password = password('123') where user='root'; 6. 刷新权限(必须步骤):flush privileges; 凡是涉及到密码修改或者权限修改,修改完之后全部要再执行一下这一句 7. 关掉mysqld服务端,指令: tasklist|findstr mysqld taskkill /F /PID 进程号 8. 正常启动服务端(net start mysql)
7. 创建用户和授权
-
对新用户的增删改
1.创建用户: -- 指定ip:192.118.1.1的zhangsan用户登录 create user 'zhangsan'@'192.118.1.1' identified by '123'; -- 指定ip:192.118.1.开头的zhangsan用户登录 create user 'zhangsan'@'192.118.1.%' identified by '123'; -- 指定任何ip的zhangsan用户登录 create user 'zhangsan'@'%' identified by '123'; 2.删除用户 drop user '用户名'@'IP地址'; 3.修改用户 rename user '用户名'@'IP地址' to '新用户名'@'IP地址'; 4.修改密码 set password for '用户名'@'IP地址'=Password('新密码');
-
对当前用户授权管理
-- 查看权限 show grants for '用户'@'IP地址' -- 授权 zhangsan用户仅对db1.t1文件有查询、插入和更新的操作 grant select ,insert,update on db1.t1 to "zhangsan"@'%'; -- 表示有所有的权限,除了grant这个命令,这个命令是root才有的。zhangsan用户对db1下的t1文件有任意操作 grant all privileges on db1.t1 to "zhangsan"@'%'; -- zhangsan用户对db1数据库中的文件执行任何操作 grant all privileges on db1.* to "zhangsan"@'%'; -- zhangsan用户对所有数据库中文件有任何操作 grant all privileges on *.* to "zhangsan"@'%'; -- 取消权限 -- 取消zhangsan用户对db1的t1文件的任意操作 revoke all on db1.t1 from 'zhangsan'@"%"; -- 取消来自远程服务器的zhangsan用户对数据库db1的所有表的所有权限 revoke all on db1.* from 'zhangsan'@"%"; -- 取消来自远程服务器的zhangsan用户所有数据库的所有的表的权限 revoke all privileges on *.* from 'zhangsan'@'%';