admin管理员组

文章数量:1620392

Java第二阶段_day01_MySQL入门

🏠个人主页:不会写代码的满满
🧑个人简介:大家好,我是满满,一个想要与大家共同进步的男人😉😉
目前状况🎉:开学即将大三,目标就是半年内找到一份实习工作👏👏
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

正文开始 ----------

学习目标📋

  • 能够理解数据库的概念
  • 能够安装MySQL数据库
  • 能够启动,关闭及登录MySQL
  • 能够安装使用MySQL图形客户端Navicat
  • 能够使用SQL语句操作数据库
  • 能够使用SQL语句操作表结构
  • 能够使用SQL语句简单查询数据

1.数据库概述👀

1.1 计算机系统如何存储数据

哪些算是计算机数据

​ 1、计算机程序代码,包括操作系统核心、各种运行库、用户应用程序等等。特点是不会经常变换,稳定性较高。

​ 2、支持计算机程序运行的数据,比如说银行系统的账户信息,游戏系统中的玩家角色等级,金币数量、物品信息。

计算机系统的数据存放在哪里的

​ 一个计算机系统,其存储可以分为内存与外存。

​ 内存的特点是高速高吞吐,异失性。比如CPU一级二级缓存,内存等,一旦掉电,所有内存数据都会丢失。

​ 例如:数组,集合;new出来的对象存储在堆中.堆是内存中的一小块空间
​ 优点:内存速度快
​ 缺点:断电/程序退出,数据就清除了.内存价格贵

​ 外存的特点是可以持久保存,可能是磁介质(硬盘),光介质(VCD、DVD、蓝光)、集成电路(U盘,固态硬盘)。但是其代价是存取数据较慢。

​ 例如:普通磁盘文件
​ 优点:永久保存
​ 缺点:查找,增加,修改,删除数据比较麻烦,效率低

​ 当遇到需要长期保留数据,不能因为应用停止,系统关机二丢失数据的话,那么我们只能选择外存来存储这些数据,比方说银行账户系统、qq聊天记录,游戏角色等级记录等等。

最终系统存储永久性数据的,就是通过一个个文件。

仅仅用文件存储数据有什么弊端

​ 对于单用户应用程序,使用文件存储数据不存在太大的问题,但是在多用户、大数据量、强数据私密性的情况下,只使用文件来存储就存在种种弊端。

​ 1、文件的安全性问题,每个访问到文件系统的用户,都可以随意访问文件。

​ 2、文件中查询数据,管理数据并不方便。

​ 3、在文件中存取海量数据,速度和效率并不理想。

​ 4、在程序中控制文件较繁琐。比方说,多个用户打开同一个文件等等。

​ 5、一旦文件损坏(磁盘问题,误删除、误覆盖)等等,会造成无可挽回的数据丢失。

如何解决这些问题

​ 引入数据库系统,通过数据库来管理、存取、备份数据,可以提供多并发、严格用户权限控制、数据安全保障等方面的功能。

​ 比如说,用文件存储数据就好像是你家的书架,2到3个人来看书,摆放百把本书,还是不错的。如果有两三千人来看书,存书数百万册,那么就需要建立一个专门的图书馆,雇佣专门的图书管理员来为大家服务。

​ 这个图书馆就可以理解成一个数据库。

1.2 什么是数据库

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

​ 存储数据的仓库,其本质是一个文件系统,数据库按照特定的格式将数据存储起来,并通过特定的应用程序(数据库管理系统,DataBase Management System),用户可以对数据库中的数据进行增加,修改,删除及查询操作。

**关键字:**文件系统、特定的格式、存储数据、对数据进行增删改查

1.3 数据库的优点

​ 数据库是按照特定的格式将数据持久化存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。

  1. **整体数据结构化:**在数据库系统中,记录的结构和记录之间的联系有数据库管理系统进行维护,从而减轻了程序员的工作量,提高了工作效率。

  2. 数据的共享性高、冗余度低且易扩充:数据共享包括多个用户、多个应用可以同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库中的数据。同时,数据库实现数据共享大大减少了数据冗余,还能够避免数据之间的不相容性和不一致性。(数据的不一致性:指同一数据不同副本的值不一样)

  3. 数据独立性高:数据独立性包括数据的物理独立性和逻辑独立性,即用户的应用程序与数据库中数据的物理存储和数据的逻辑结构均相互独立。

  4. 数据由数据库管理系统统一管理和控制 :利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系,同时数据库管理系统提供了以下几个方面的数据控制功能,以解决数据共享带来的安全隐患。

1.4 数据库管理系统

​ 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

1.5 数据库管理系统、数据库和表的关系

​ 数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。数据库管理系统、数据库和表的关系如图所示:

先有数据库 → 再有表 → 再有数据
一个库包含多个表,一个表可以对应有多条数据

1.6 常见数据库

数据库类型:数据库经过几十年的发展,出现了多种类型。目前最常见的数据库模型主要是:关系型数据库和(noSQL)非关系型数据库。

MySQL:其中的一款关系型数据库管理系统

以下是2020年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:https://db-engines/en/ranking)


MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。

Redis: 是一个开源(BSD许可)的、使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型文件系统,它是内存中的数据结构存储系统,它可以用作数据库(非关系型数据库)、缓存和消息中间件。

**MongoDB:**是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,MongoDB是一个介于关系数据库和非关系数据库之间的产品。

常用数据库MYSQLOracleRedis
在web应用中,使用的最多的就是MySQL数据库,原因如下:

  1. 开源、免费
  2. 功能足够强大,足以应付web应用开发

2.MySQL的安装、卸载与使用🌈

2.1.1 下载安装版本

​ 点击MySQL下载,目前最新版本为8.0.30。

!

​ 下载完成后进行解压

​ 没有安装程序,直接将将解压完成后的目录复制到你计划安装MySQL的目录。

2.1.2 初始化数据库

配置初始化的my.ini文件的文件,解压后的目录并没有的my.ini文件,需自行创建在安装根目录下添加的my.ini(新建文本文件,将文件类型改为的.ini),写入基本配置:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录,需指向自己计划安装MySQL的目录
basedir=C:\Program Files\MySQL
# 设置mysql数据库的数据的存放目录,通常指定到安装目录下的Data文件夹
datadir=C:\Program Files\MySQL\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
# 设置时区为东八区
default-time-zone='+8:00'
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

​ 配置文件中的路径要和实际存放的路径一致(8.0.18不要手动创建Data文件夹)

在初始化时,避免出错我们尽量全部使用管理员身份运行命令行程序,否则会报错,导致安装失败。打开cmd后进入mysql的bin目录。

在MySQL目录下的bin目录下执行命令:

mysqld --initialize --console

注意!输出日志中中root @ localhost:后面的9P0gYk-?0,kT就是初始密码(不含首位空格)。在没有更改密码前,需要记住这个密码,后续登录需要用到。复制密码先保存起来!!!

​ 在系统环境变量中加入MYSQL_HOME,其值为你安装mysql的物理路径。再在系统环境变量PATH中加入一项 %MYSQL_HOME%/bin。完成此操作后,就可以在任意目录下执行mysql相关命令。

2.1.3 安装+启动MySQL服务

执行下面的命令:

mysqld --install [服务名](服务名可以不加默认为mysql)

窗口提示 successfully installed. 即代表成功完成安装服务。

如果出现这个

说明mysql的服务还在把它删掉

用这个命令

SC删除的MySQL

再执行上面安装服务

服务安装成功之后通过命令net start mysql启动MySQL的服务

启动MYSQL: net start mysql
停止MYSQL: net stop mysql

也可以使用Windows服务方式启动
操作步骤:

2.1.4 卸载MySQL

  1. 首先停止window的MySQL服务。
    找到“控制面板”-> “管理工具”-> “服务”,停止MySQL后台服务。
  2. 卸载MySQL服务,用管理员身份启动命令行程序,执行 sc delete mysql
  3. 删除MySQL安装目录下的所有文件。
  4. 删除c盘ProgramDate目录中关于MySQL的目录。路径为:C:\ProgramData\MySQL(是隐藏文件,需要显示出来)

如果还是没有卸载干净,需要删除注册表残留

三、windows+R运行“regedit”文件,打开注册表;

四、删除注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹;

五、删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹,如果没有可以不用删除了;

六、删除C盘下的C:\ProgramData\MySQL 所有文件,如果删除不了则用360粉碎掉即可,该programData文件是隐藏的默认,设置显示后即可见;

七、关键!!!!删除C:\Documents and Settings\All Users\Application Data\MySQL下的文件夹,一定要删;

最好重启下电脑,重新安装就可以了!

2.3 控制台连接数据库

​ MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录,常见的登录方式有以下几种:掌握其中一种即可

本地登录格式1:mysql -u用户名 -p密码
例如:mysql –uroot -proot

后期输入密码的登录方式:

mysql -u用户名 -p回车

密码

远程登录精简格式2:mysql -hip地址 -u用户名 -p密码
例如:mysql –h127.0.0.1 –uroot -proot

远程登录全写格式3:mysql --host=ip地址 --user=用户名 --password=密码
例如:mysql --host=localhost --user=root --password=root

退出MySQL:exit

修改root用户的初始密码

在初始化时,系统自动生成了一个root的密码,但是很复杂,不方便使用。我们可以登录进mysql中重新设置一个好用的密码。

方法是以root身份,使用初始密码登录MySQL后,执行sql:

alter user root identified by "新密码";
flush privileges;

退出后,就可以使用新密码登录。

2.4 常见问题解决

2.4.1 忘记root密码后,如何重置root密码

停止mysql服务以后,以免密码方式登录

mysqld --console --skip-grant-tables --shared-memory

不要关闭cmd窗口,另开一屏

mysql -uroot -p

登入系统后执行以下sql

update mysql.user set authentication_string='' where user='root';

将root用户的密码置为空,然后退出SQL窗口,并关闭免密模式的启动窗口,以正常方式启动mysql。
重新用root用户身份,空密码登录mysql。

ALTER user 'root'@'localhost' IDENTIFIED BY 'xxxxx';

重新为root用户设置密码。

2.4.2 客户端连接服务器报caching-sha2-password错

这是是因为客户端不支持加密插件,可以如下来修改密码模式。

首先以root身份登录MySQL

ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码' PASSWORD EXPIRE NEVER;

这句sql的意思是,将指定用户对应localhost的密码设置为 native 模式的新密码,且此密码永不过期。

2.4.3 登录报时区错误

登录时报告类似如下错误

The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more t

这都是因为安装mysql的时候时区设置的不正确,mysql默认的是美国的时区,而中国大陆要比他们迟8小时,采用+8:00格式。

可以找到mysql的安装目录下的my.ini文件,使用notepad++打开,在mysqld下加入如下代码:

# 设置时区
default-time-zone='+8:00'

之后重启mysql即可。

3.基本操作 😀

脑图

启动MySQL服务

net start mysql

C:\Windows\System32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

关闭mysql服务

net stop mysql

C:\Windows\System32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。

登录mysql服务

注意,地址就是ip,本地可以写localhost和127.0.0.1,端口就是mysql启动服务占用的端口号 默认是3306

mysql -h 地址 -P 端口 -u root -p 密码

退出mysql登录

ctrl + z 回车
exit
quit

显示哪些线程正在运行

show processlist;

查看帮助

help 关键字;

4.数据库可视化操作🔍

​ 上面进行数据库连接登录,以及操作都是通过cmd终端窗口的形式来完成的,这种方式可视化效果较差,且不容易管理。为此,我们可以使用一些可视化管理工具来管理我们的MySQL数据库。

常见的一些数据库可视化管理工具:

NavicatSQLyogWorkbench等等。

3.1 安装Navicat For Mysql


在“选择安装文件夹”窗口,软件默认安装在 C 盘,如果您想安装软件在其他目录请点击【浏览】操作,设置完安装位置点击【下一步】。

选择在“开始”菜单默认创建的快捷方式,点击【下一步】。

在“选择额外任务”窗口,默认选中“Create a deskstop icon”,即创建系统桌面图标,点击【下一步】,如果不想创建桌面图标,取消勾选。

在“准备安装”窗口,安装程序即将安装 PremiumSoft Navicat 12 for MySQL,点击【安装】开始安装。

耐心等待安装完成。

运行 Navicat 12 for MySQL,因为新安装的 Navicat 只有 14 天的免费试用期,打开时会弹出“注册”页面,点击【试用】,后续我们将对此软件破解。

3.2 破解Navicat For Mysql

在网上下载对应版本的注册机,准备开始破解,具体步骤如下:

1、关闭navicat
2、打开注册机,点右上角的path按钮,选择navicat安装到硬盘的路径,选中navicat.exe文件,点确定按钮
3、等注册机出现"cracked"对话框,再点击生成注册码
4、打开navicat,点击注册,输入注册码,注意,有可能出现注册码校验失败,打x的。关闭注册窗口,重新打开注册窗口,里面注册码已经填好,且校验成功。

5、选择我们要注册的MYSQL,选择中文版,选择site license,完了后点击“Generate”生成序列号
6、此时打开软件,将网线拔掉或热点断开,再点注册。

7、由于网络失败,Naticat 报错,提示转到手动激活。

8、这里将请求码中的代码复制到注册机中,再点击generate得到激活码,填入注册界面;

9、点击激活;

5、至此,navicat 12 for mysql中文破解版成功激活,从帮助菜单下可以查看软件已经是企业版本。注意:不要升级版本,以免破解失效。

3.3 使用Navicat For Mysql

启动 Naticat for MySQL,选择菜单: 文件 -》 新建连接 -》 MySQL…

在配置页面上,填入服务器IP或主机名
连接端口
连接用户名
连接密码
等参数,点击测试连接

在配置页面上,填入服务器IP或主机名
连接端口
连接用户名
连接密码
等参数,点击测试连接
若一切正常,即可显示“连接成功”,再点击确定按钮。
这个连接就被 Naticat for MySQL保存下来,下次连接就不需要输入IP、用户名、密码了。

在软件页面上,左侧菜单上就会出现你命名的连接项,左键双击,或在右键菜单中选中“打开连接”。

即可显示数据库服务器上的数据库列表,下一步就可以点击相应菜单,显示表内容,或新建查询,执行SQL。

或者是打开SQL窗口,直接输入SQL语句,选中待执行的语句,快捷键 ctrl+R 执行之。

5. 数据库操作 💻

脑图

对数据库的操作,包括查看当前使用的哪个数据库,使用数据库,查看所有数据库,查看当前时间,查看当前用户,查看数据库版本,查看创建数据库语句,创建数据库,以及删除数据库等围绕着数据库的相关操作

查看当前使用数据库

select database();

查看所有数据库

show databases;

使用数据库

use 数据库;

查看当前时间

select now();

查看当前用户

select user();

查看数据库版本

select version();

查看创建数据库信息

show create database 数据库名;

创建数据库

基本写法

create database 数据库名;

创建数据库指定utf8编码

create database 数据库名 charset utf8;

不存在再创建数据库

create database if not exists 数据库名;

删除数据库

直接删除

drop database 数据库名;

判断删除

drop database if exists 数据库名;


6. 表操作 ❤️

脑图

查看所有表

show tables;

创建班级表 grade

id 主键
grade_name 班名 varchar(100)

创建学生表 stu,添加外键约束

id 主键
name 学生姓名 varchar(100) not null
sex 学生性别

创建数据表 stu ,并在表 stu 上创建外键约束,让它的键 gradeId 作为外键关联到表 grade 的主键 id ,SQL这样写

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]

CREATE TABLE stu (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR (100) NOT NULL,
  age INT (3),
  bir DATE,
  english INT (3),
  chinese INT (3),
  gradeId INT,
  CONSTRAINT fk_stu_grade FOREIGN KEY (gradeId) REFERENCES grade (id)
) ;

注意:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。例如,两者都是 INT 类型,或者都是 CHAR 类型。如果不满足这样的要求,在创建从表时,就会出现“ERROR 1005(HY000): Can’t create table”错误

在修改表时添加外键约束

假如在创建表时,没有添加外键约束,那么可以在创建表后通过修改表给表添加外键约束,语法如下

ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

CREATE TABLE stu (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR (100) NOT NULL,
  age INT (3),
  bir DATE,
  english INT (3),
  chinese INT (3),
  gradeId INT
) ;

ALTER TABLE stu 
  ADD CONSTRAINT fk_stu_grage FOREIGN KEY (gradeId) REFERENCES grade (id) ;

注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键列不能为空。

删除外键约束

通过外键名删除外键,这里演示一下,删除之后会继续添加上的,因为需要这个外键约束

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
ALTER TABLE stu DROP FOREIGN KEY fk_stu_grage;

查看表结构

DESC stu;

显示存储引擎的状态信息

SHOW ENGINES;

修改表

修改表名 rename to

alter table stu rename to stus;

添加一列 add

alter table 表名 add 列名 列数据类型;

ALTER TABLE stus ADD address VARCHAR(255);

修改数据类型 modify

alter table 表名 modify 列名 新的数据类型;

ALTER TABLE stus MODIFY address CHAR(255);

修改字段位置置顶 first

alter table 表名 modify 字段名 字段属性 first;

修改字段位置再什么之后 after

alter table 表名 modify 字段 字段属性 after 字段;

修改列名和数据类型 change

alter table 表名 change 原列名 新列名 新数据类型;

ALTER TABLE stus CHANGE NAME username VARCHAR(255);

删除列 drop

alter table 表名 drop 列名;

ALTER TABLE stus DROP address;

删除表

直接删除

drop table 表名;

判断存在再删除

drop table if exists 表名;

7. 结构化查询语言SQL📌

SQL的概念

什么是SQL

​ 结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

SQL作用

​ 通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。
​ SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

SQL语句分类

  1. DDL(Data Definition Language)数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等

  2. DML(Data Manipulation Language)数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update等

  3. DQL(Data Query Language) 数据查询语言 (掌握)

    DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以把查询语句的语句称作为DQL语言

  4. DCL(Data Control Language)数据控制语言(了解)

    用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等

  5. TCL(Transaction Control Language) 事务控制语言或TPL事务处理语言

    用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等

  6. CCL(Cursor Control Language)指针控制语言(了解)

    像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。多用于存储过程中对结果集的处理。

SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾。

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

    SELECT * FROM student;
    
  4. 3种注释
    单行注释: – 注释内容 或 # 注释内容(mysql特有)
    多行注释: /* 注释 */

延展阅读

SQL标准简介

SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、DB2、Sybase、SQL Server支持它,很多开源的数据库产品如PostgreSQL、MySQL也支持它,甚至一些小型的产品如Access也支持SQL。近些年蓬勃发展的NoSQL系统最初是宣称不再需要SQL的,后来也不得不修正为Not Only SQL,来拥抱SQL。

蓝色巨人IBM对关系数据库以及SQL语言的形成和规范化产生了重大的影响,第一个版本的SQL标准SQL86就是基于System R的手册而来的。Oracle在1979年率先推出了支持SQL的商用产品。随着数据库技术和应用的发展,为不同RDBMS提供一致的语言成了一种现实需要。

对SQL标准影响最大的机构自然是那些著名的数据库产商,而具体的制订者则是一些非营利机构,例如国际标准化组织ISO、美国国家标准委员会ANSI等。各国通常会按照 ISO标准和ANSI标准(这两个机构的很多标准是差不多等同的)制定自己的国家标准。中国是ISO标准委员会的成员国,也经常翻译一些国际标准对应的中文版。标准为了避免采用具体产品的术语,往往会抽象出很多名词,从而增加了阅读和理解的难度,翻译成中文之后更容易词不达意。对于数据库系统实现者和用户而言,很多时候还不如直接读英文版本为好。虽然正式的标准不像RFC那样可以从网络上免费获得,标准草案还是比较容易找到的(例如:http://www.jtc1sc32/doc/)。待批准的标准草案和最终的标准也没有什么实质上的区别,能够满足日常工作的需要。

下面是SQL发展的简要历史:
1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86
1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89
1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)
1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)
2003年,ISO/IEC 9075:2003,SQL:2003
2008年,ISO/IEC 9075:2008,SQL:2008
2011年,ISO/IEC 9075:2011,SQL:2011

细心的读者能发现,从SQL:1999开始,标准简称中的短横线(-)被换成了冒号(:),而且标准制定的年份也改用四位数字了。前一个修改的原因是ISO标准习惯上采用冒号,ANSI标准则一直采用短横线。后一个修改的原因是标准的命名也遇到了2000年问题。

SQL86大概只有几十页,SQL92正文大约有500页,而SQL99则超过了1000页。可以看出,从SQL99开始,SQL标准的个头就非常庞大了,内容包罗万象,已经没有人能够掌握标准的所有内容了。以SQL:2003为例,它包括以下9个部分(中间编号空缺是曾经被占用,之后被废弃的标准造成的):

ISO/IEC9075-1: Framework (SQL/Framework)
ISO/IEC 9075-2: Foundation (SQL/Foundation)
ISO/IEC 9075-3: Call Level Interface (SQL/CLI)
ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9: Management of External Data (SQL/MED)
ISO/IEC 9075-10: Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11: Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13: Java Routines and Types Using the Java Programming Language(SQL/JRT)
ISO/IEC 9075-14: XML-Related Specifications (SQL/XML)

负责具体制定工作的是ISO和IEC联合成立的一个技术委员会JTC1/SC32。正因为关系数据库市场非常成熟,竞争不够激烈,标准本身变得过于庞大等原因,SQL3制定的周期很长,制定期间也存在很多争议。例如文章《Is SQL a Real Standard Anymore?》对SQL标准化进程提出了置疑。

如果要了解标准的内容,比较推荐的方法是泛读SQL92(因为它涉及了SQL最基础和最核心的一些内容),然后增量式的阅读其他标准。标准在每次更新的时候,委员会的成员们都为大家提供比较好的介绍文档。例如针对最新的SQL:2011,SIGMODRecord上就有很不错的介绍:http://www.sigmod/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf

最后再简要介绍一下SQL标准的符合程度。绝大多数人提起SQL标准,涉及的内容其实是SQL92里头最基本或者说最核心的一部分。SQL92本身是分级的,包括入门级、过度级、中间级和完全级。为了验证具体的产品对标准的遵从程度,NIST还曾经专门发起了一个项目,来做标准符合程度的测试集合:http://itl.nist.gov/div897/ctg/sql_form.htm。不过,SQL标准包含的内容实在太多了,而且有很多特性对新的SQL产品而言也越来越不重要了。从SQL99之后,标准中符合程度的定义就不再分级,而是改成了核心兼容性和特性兼容性;也没有机构来推出权威的SQL标准符合程度的测试认证了。

8. 用户管理与权限管理🗓️

用户是我们使用数据库的基础,任何连入数据库的操作,都依托于一个用户,并受到这个用户所具有权限的限制。

用户管理

查看用户

select host,user,authentication_string from mysql.user;

mysql是MySQL数据库中的系统库,所有用户、权限、密码、时区等信息都存放在这个库里。

库名.表名的方式可以让我们跨库来引用某个特定库的表。

创建用户

语法:create user “username”@“host” identified by “password”;

create user 'test'@'localhost' identified by '123';
create user 'test'@'192.168.7.22' identified by '123';
create user 'test'@'%' identified by '123';

host的含义是限制访问的客户端的主机IP,%表示无限制。

语句中的单引号表示字符串,在这里也可以使用双引号,用户名可以不用引号。

密码设置串可以不带,但是带了密码,就必须带引号。

设置用户密码

方法1:用alter修改用户密码
首先需要以root身份登录MySQL。

ALTER USER 'bbb'@'localhost' IDENTIFIED BY '456';
flush privileges; 

方法2:用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码

此语句需用在命令行下

mysqladmin -uroot -p123456 password 123 

方法3:忘记root密码,需要重置root密码

1、首先停止mysql服务

net stop mysql

2、以管理员身份启动命令行,执行

mysqld --skip-grant-tables --shared-memory

这时以忽略密码模式启动了mysql,不要关闭此cmd窗口。

3、再开一屏cmd窗口
用mysql直接登录,不输入用户和密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_psd_123';
FLUSH PRIVILEGES;

完成后此屏可以退出。
前一屏,先ctrl+C强制退出mysqld,再用net start mysql
最后尝试一下root的新密码登录

mysql -uroot -pnew_psd_123

更改密码

 ALTER USER 'zs' @'localhost' IDENTIFIED BY '456';

删除用户

语法:drop user 用户名@主机名;

drop user zhangsan@'%';

drop user命令会删除用户以及对应的权限,执行命令后你会发现mysql.user表和mysql.db表的相应记录都消失了。

权限管理

给用户授权

初始创建的用户,还不能访问数据库,因为还没有给用户赋予相应权限,需要执行用户授权操作。

命令格式:grant 权限码 on 数据库名.表名 to 用户名@主机名 identified by “password”;

grant all on dbname.* to zhrt@localhost identified by '123456';
FLUSH PRIVILEGES;

设置密码的子串可写可不写

权限码表示授予的权限类型,常用的有以下几种类型:

  • all :所有权限。
  • select:读取权限。
  • delete:删除权限。
  • update:更新权限。
  • create:创建权限。
  • drop:删除数据库、数据表权限。

查看用户权限

语法:show grants for 用户名@主机名;

show grants for 'bbb'@'localhost'; 

取消用户授权

语法:REVOKE 权限码 ON 库名.表名 FROM 用户名@主机名;

REVOKE all ON power.* FROM bbb@localhost;

本文标签: 入门mysql