一、数据库概述
1、什么是数据(Data)
描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机。
在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,如:
1,alex,male,18,1999
单纯的一条记录并没有任何意义,如果我们按逗号分隔,依次定义各个字段的意思,相当于定义表的标题,如下表格:
id |
name |
sex |
age |
birth |
1 |
alex |
female |
19 |
1999 |
2 |
egon |
male |
20 |
1998 |
这样通过表格我们很清楚的知道了某人的详细信息
2、什么是数据库(Database,简称DB)
数据库是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
严格来说,数据库是长期储存在计算机内、有组织、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起,具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。
3、什么是数据库管理系统(DataBase Management System)
在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键,这就用到了一个系统软件---数据库管理系统,如MySQL、Oracle、SQLite、Access、SQL Server等。
MySQL主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码,所以这个数据库是免费的,他现在是甲骨文公司的产品。
Oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
SQL Server是微软公司的产品,主要应用于大中型企业,如联想、方正等。
4、数据库服务器、数据库管理系统、数据库、表与记录的关系(重点理解!!!)
数据库服务器:一台计算机(对内存要求比较高)
数据库管理系统:如mysql(是一个软件)
数据库:oldboy_stu(即文件夹)
表:student,school,class_list(即文件)
记录:1 alex male 20(多个字段的信息组成一条记录,即文件中的一行内容)
总结:
数据库服务器:一台计算机,上边运行数据库管理软件;
数据库管理系统:一个管理数据库的软件;
数据库:即文件夹,用来组织文件/表;
表:即文件,用来存放多行内容/多条记录;
二、什么是MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
数据库管理软件的分类:
关系型:如MySQL,SQLite,db2,Oracle,Access,SQL Server,注意:sql语句通用;
非关系型:mongodb,redis,memcache;
两者的区别可以简单理解为:
关系型数据库需要有表结构;
非关系型数据库是key-value存储的,没有表结构;
MySQL其实就是用于管理我们的文件的软件,是一个基于socket(内部封装了socket)编写的C/S架构的软件。
对于MySQL来说有两个软件:
a、服务器:
1)MySQL服务端开启;
2)解析指令(sql语句);
3)对文件夹、文件以及数据的增删改查;
b、客户端:
1)开启MySQL客户端并连接服务端;
2)发送指令(sql语句);
解释:对于服务器软件中的socket服务器是一直开着,等待客户端来连接,并且还有创建文件、删除文件等等的操作;对于客户端软件中的scoket客户端,我们得需要发送指令去命令scoket服务端对文件进行操作。
三、MySQL的下载安装和配置(本文以windows 64位操作系统下安装mysql 5.7.23版本 为例)
1、下载安装包
下载地址:https://dev.mysql.com/downloads/mysql
2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:D:mysql-5.7.23-winx64
注意:文件夹mysql-5.7.23-winx64下的bin文件夹中mysqld.exe是服务端, mysql.exe是客户端。
3、添加环境变量
将MySQL的bin目录路径,如:D:mysql-5.7.23-winx64in,追加到变量值中,用分号 ; 分割。
4、初始化
以管理员身份打开终端,输入命令:
mysqld --initialize-insecure
注意:执行完成后,D:mysql-5.7.23-winx64目录下增加了一个data文件夹;
5、启用mysql服务
在终端输入命令:
mysqld
注意:结果虽然能将mysql服务启用,但是终端会hung住;此时mysql服务器已经启动成功。
6、启动mysql客户端并连接mysql服务器
以管理员身份再打开一个cmd窗口,输入命令:
mysql –uroot -p
出现mysql> 表示已经进入mysql,输入exit退出。然后通过任务管理器结束mysql进程,即停止mysql服务。
7、将MySQL服务制作成windows服务来解决启用mysql服务后终端hung住的问题:
# 在终端执行如下命令,注册MySQL的windows服务 mysqld --install # 注册成功后,就可以用如下windows命令启动和关闭MySQL服务,且终端也不会hung住 # 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql # 如下命令可以移出MySQL的windows服务(知道即可,不用执行) mysqld --remove
8、windows下设置MySQL客户端的登录密码
用root账号登录,在终端输入如下命令:
mysql –uroot –p
登录后可查看当前用户,命令如下:
select user();
注意:管理员为root(拥有最高权限,管理员账号),初始密码为空,以无密码的方式登录了管理员账号,是非常危险的一件事情,所以要为管理员账号设置密码,如下命令:
mysqladmin –uroot –p password "123"; # 设置密码为123,此方法行不通可以用下面的方法,方式一 update mysql.user set authentication_string =password('123') where User='root'; 方式二
alter user 'root'@'localhost' identified by "123"; 方式三
修改密码:若想将密码123改为456可执行如下命令:
mysqladmin –uroot –p"123" password "456";
9、忘记密码后如何破解密码
1)以管理员身份打开cmd;
2)停掉mysql服务;
3)执行如下命令跳过授权表:
C:Windowssystem32>mysqld --skip-grant-tables # 加了约束条件即跳过授权表
注意:此命令执行完毕后mysqld进程就开启了;
4)再次查看,直接用root账号,密码为空登录,命令如下:
mysql –uroot –p # 不用密码登录 select user(); # 查看是不是root账号
5)现在就可以通过修改mysql.user文件来任意更改密码了,继续执行如下命令:
update mysql.user set authentication_string =password(‘’) where User=’root’;
注意:上面这句话是将root密码置为空;
6)刷新权限(更改完成一定要记得刷新),继续执行如下命令:
flush privileges;
7)退出mysql,继续如下命令:
exit;
8)查看当前mysql进程,执行如下命令:
tasklist |findstr mysql
9)杀死当前的进程,执行如下命令:
taskkill /F /PID XXXX # 注意:XXXX是进程号,上一步执行结果能得知
10)现在就可以启动mysql服务了,命令为:net start mysql
登陆后可以无密码登录root用户了,命令为:mysql –uroot –p
也可以更改密码了,比如改为123,命令为:mysql –uroot –p password “123”
10、统一字符编码
进入mysql客户端,执行 s 查看字符编码,默认结果如下:
为了统一字符编码,可以执行如下操作:
1)在D:mysql-5.7.23-winx64文件夹下创建my.ini文件(my.ini文件是mysql的配置文件);
2)将如下代码拷贝保存到my.ini文件中:
[mysqld] # 设置mysql的安装目录 **里面的路径一定是自己电脑的mysql的目录** basedir= D:mysql-5.7.23-winx64 # 设置mysql数据库的数据的存放目录,必须是data datadir= D:mysql-5.7.23-winx64data sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # mysql端口 port=3306 # 字符集 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8
3)以管理员身份重启服务,执行如下命令:
net stop mysql
net start mysql
注意:更改了配置文件一定要重启服务;
4)在cmd中进入mysql客户端,执行 s,显示字符编码为utf8,则表示修改成功;
四、初识SQL语句
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列:一列(数据元素)包含了相同的数据, 例如邮政编码的数据。
行:一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
1、操作库(文件夹)
a、增:
create database db1 charset utf8;
b、删:
drop database db1;
c、改:
alter database db1 charset gbk;
d、查:
# 查看当前创建的数据库
show create database db1;
# 查看所有的数据库
show databases;
2、操作表(文件)
a、增:
create table t1(id int,name char);
b、删:
drop table t1;
c、改:
# name字段修改为6个字符 alter table t1 modify name char(6); # 改变name为大写的NAME alter table t1 change name NAME char(7);
d、查:
# 查看当前的这张t1表
show create table t1;
# 查看所有的表
show tables;
# 查看表的详细信息
desc t1;
3、操作文件内容(记录)
a、增:
# 插入一条数据,规定id,name insert into t1(id,name) values(1,”alex01”),(2,”alex02”),(3,”alex03”);
b、删:
delete from t1; delete from t1 where id=2;
c、改:
update db1.t1 set name=’zhangsan’; update db1.t1 set name=’alex’ where id=2;
d、查:
select id from db1.t1; select id,name from db1.t1; select * from db1.t1;
五、MySQL创建用户和授权
我们知道MySQL的最高权限管理者是root用户,它拥有着最高的权限操作,包括select、update、delete、grant等操作,那么一般进入公司之后DBA工程师会创建一个用户名和密码,并给这个用户设置某个权限(或所有权限,但是grant权限只有root用户可以有),让你去用此用户名和密码去连接数据库进行操作,接下来我们来简单了解一下如何创建用户和密码、如何给用户授权以及如何移除当前用户的权限。
进入mysql客户端,执行show databases;命令,可以看到有默认如下4个数据库:
information_schema
mysql
performance_schema
sys
MySQL的用户管理在mysql数据库中。
1、如果你想创建一个新的用户,并授予某些权限,则需要以下操作:
a、进入到mysql数据库中,执行如下命令:
mysql>use mysql Database changed # 说明已经进入
b、对用户的查询和增删改操作
1)查询数据库中所有用户和其拥有权限,命令如下:
select * from mysql.userG; # G是格式化显示
2)创建新用户,命令如下:
# 指定IP为192.168.1.1的用户名为wll,密码为123的用户登录 create user ‘wll’@’192.168.1.1’ identified by ‘123’; # 指定IP为192.168.1.开头的用户名为wll,密码为123的用户登录 create user ‘wll’@’192.168.1.%’ identified by ‘123’; # 指定任何IP的用户名为wll,密码为123的用户登录 create user ‘wll’@’%’ identified by ‘123’;
3)删除用户
drop user ‘用户名’@’IP地址’;
4)修改
# 修改用户名 rename user ‘用户名’@’IP地址’ to ‘新用户名’@’IP地址’; # 修改密码 set password for ‘用户名’@’IP地址’=Password(‘新密码’);
c、对用户授权管理
1)查看数据库中具体某个用户的权限
show grants for ‘用户名’@’IP地址’;
2)授权
# 授权wll用户仅对db1库中的t1表有查询、插入和更新的操作 grant select,insert,update on db1.t1 to ‘wll’@’%’;
#授权wll用户对db1下的t1文件可执行任何操作(除grant权限,这是root才有的) grant all privileges on db1.t1 to "wll"@'%';
# 授权wll用户对db1数据库中的所有文件可执行任何操作 grant all privileges on db1.* to "wll"@'%';
# 授权wll用户对所有数据库中的所有文件可执行任何操作 grant all privileges on *.* to "mjj"@'%';
3)取消权限
# 取消来自远程服务器的wll用户对db1库中的t1文件的所有操作权限 revoke all on db1.t1 from ‘wll’@’%’;
# 取消来自远程服务器的wll用户对数据库db1中的所有表的所有操作权限 revoke all on db1.* from ‘wll’@’%’;
# 取消来自远程服务器的wll用户对所有数据库中的所有表的所有操作权限 revoke all privileges on *.* from ‘wll’@’%’;
PS:在公司中,一般情况下是DBA工程师来做这些授权工作,他给你一个用户名和密码,你来连接就可以了,连接的命令为:mysql –u用户名 –h IP地址 –p密码
2、MySQL备份操作
# 备份:数据表结构 + 数据 mysqldump –u root db1 > db1.sql -p
# 备份:数据表结构 mysqldump –u root -d db1 > db1.sql -p
# 导入现有的数据到某个数据库 create database db10; # 先创建一个新的数据库db10 mysqldump –u root –d db10 < db1.sql –p # 将已有的数据库文件导入到db10数据库中