1、MySQL(MySQL-8.0.35-winx64)
1.1、下载安装、配置、初始化、安装服务
-
进入MySQL官网下载安装MySQL:
-
步骤一:解压完成后需进行文件的配置,在安装目录下新建一个my.ini的文件,并将下面配置写入其中(版本不同可能配置文件也有所不同,自行上网查询配置)并保存(需要注意写入的MySQL安装路径)。
注意:当通过启动指令来启动服务时,报 mysql服务无法启动,服务没有报告任何错误 时,可能就是当前配置与版本不匹配。
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录 ----------是你的文件路径-------------
basedir=D:\Application\MySQL\mysql-8.0.35-winx64
# 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹,后边会用命令行自行创建
datadir=D:\Application\MySQL\mysql-8.0.35-winx64\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
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
如图:
- 步骤二:配置环境变量。
在电脑桌面右击【我的电脑】,依次点击属性、高级系统设置、环境变量,进入环境变量设置页面。在环境变量设置页面 ,双击系统变量中的Path变量,按下图顺序添加环境变量。其中,③处的值需要按照实际情况写至Mysql的bin目录为止。
-
步骤三:以管理员身份运行命令提示符窗口并进入软件安装路径的bin目录下后,输入 mysqld --initialize –console 指令进行初始化数据库,并生成随机登录密码。且初始化后将会自动创建data文件,并会在data文件夹里生成文件。
、
- 步骤四:输入 mysqld install 指令进行数据库服务的安装。(提示Service successfully installed.表示服务安装成功)
1.2、服务的启动与停止
1.2.1、使用windows命令提示符操作
在bin目录下输入 net start mysql 指令来启动mysql服务。
在bin目录下使用 net stop mysql 指令来停止mysql服务。
1.2.2、使用图形界面进行操作:(在任务管理器中操作)
1.3、登录与退出
1.3.1、使用MySQL自带工具(mysql.exe)进行登录
打开命令提示符输入 mysql -h 主机名 -u 用户名 -p 指令进行登录
参数说明:
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项
1、本机登录 MySQL 数据库:
mysql -u root -p # 方式一
mysql -h 127.0.0.1 -P 3306 -u root -p # 方式二
(1)、进入软件安装路径的bin目录下,并输入 mysql -u root -p 命令,按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应:
Enter password:
(2)、若密码存在, 输入密码即可登录(初始化服务时生成的随机密码)。若密码不存在则直接按回车登录。
(3)、登录成功后你将会看到 Welcome to the MySQL monitor… (如图)的提示语。且命令提示符会一直以 mysql > 加一个闪烁的光标等待命令的输入。
(4)、可输入 exit 或 quit 退出登录。
2、远程登录MySQL数据库:
(1)、开启远程登录权限:
在命令行窗口,启动服务并连接登录到MySQL数据库,依次输入以下命令来开启MySQL的远程访问权限。
use mysql;
select User,authentication_string,Host from user;
update user set host='%' where user='root';
flush privileges;
select User,authentication_string,Host from user;
(2)、远程连接登录:
在命令行窗口,输入如下指令(替换成本机IP和配置里的端口号),尝试连接登录到MySQL。
mysql -uroot -h 192.168.1.112 -p -P3308
1.3.2、(使用Python模块进行登录)
需安装第三方模块pymysql,在虚拟环境中安装要注意加入虚拟环境的地址,如下图。
pip install pymysql
import pymysql
# 连接MySQL
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456', charset='utf8')
# 创建一个邮标
cursor = conn.cursor()
"""
进行具体操作
.....
......
......
"""
# 断开连接
cursor.close()
conn.close()
1.4、修改密码
需启动服务,并连接登录到Mysql数据库,输入 ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新的密码’; 指令并按回车确定(把新的密码 修改成你想要的密码),密码即已修改完成。按exit退出,并重新连接,输入修改后的密码登录即可。
1.5、报错与重置密码
报错一:提示此应用无法在电脑上运行,并拒绝访问。
原因:
出现在切换目录上,没有进入到bin目录下就运行了命令。
解决方法:
进入bin目录在运行命令(如下图)。
报错二:密码输入错误,忘记密码。(需重置密码)
提示:错误 1045 (28000):用户“root”@“localhost”的访问被拒绝(使用密码:YES)如图:
原因:
root用户没有使用权限(密码错误了)。
解决方法:(重置密码)
- 步骤一:使用管理员打开第一个cmd命令提示符窗口,进入bin目录,用 net start mysql 指令来连接数据库,在使用 mysqld –console –skip-grant-tables –shared-memory 指令运行。
- 步骤二:接着以管理员身份打开第二个cmd命令提示符窗口,进入bin目录,输入 mysql -uroot -p 指令进入登陆界面,不输入密码直接回车登录即可,之后依次输入 use mysql 指令并回车, updata user set authentication_sting=’’ where user=’root’ 指令并回车(成功重置密码),最后输入quit退出。(报错可net start mysql连接一下数据库试试)
- 步骤三(修改密码):重新使用管理员身份打开cmd命令提示符窗口,进入bin目录,连接服务,输入 mysql -uroot -p 指令进入登陆界面,不输入密码直接回车登录,输入 ALTER USER ‘root’@‘localhost’ IDENTIFIED BY’新密码’; 指令并回车,设置密码成功。(新密码为你要设置的密码,注意加上英文分号),输入quit退出,重新进行登录输入你设置的密码即可。(如图)
1.6、完整删除MySQL
- 步骤一:在命令提示符窗口,使用停止的指令进行停止服务。
- 步骤二:按下"win+R"快捷键,打开运行对话框,输入 regedit 指令,点击确定按钮,打开注册表编辑器,并在注册表编辑器页面, 按如下路径找到待删除文件,将其删除,效果如图所示。
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\EventLog\Application\MySQLD Service
- 步骤三:在命令行窗口,输入 mysqld -remove 指令,删除Mysql,效果如图所示。
1.7、用户管理
1.7.1、账户管理
1、创建账户
create user '用户名'@'连接者的IP地址' identified by '密码';
# 案例:
create user jack@localhost identified by '123456'; -- (localhost)表示只能在本地登录。
create user jack@'127.0.0.%' identified by '123456'; -- 指定IP网段才能登录,(%表示任意的)。
create user jack@'%' identified by '123456'; -- 相当于任意IP都能登录。
2、删除账户
需登录到root账户,再去删除其他的子账户。
drop user 用户名@'连接者的IP地址';
# 案例:(创建的是什么样子的就删除什么)
drop user jack@127.0.0.1;
drop user jack@'1277.0.0.%';
drop user jack@'%';
3、修改用户和IP地址
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
4、修改密码
set password for '用户名'@'IP地址' = Password('新密码');
1.7.2、权限管理
1、授予权限
grant 权限 on 数据库.表 to '用户名'@'IP地址';
# 案例:
grant all privileges on *.* to 'jack'@'127.0.0.1'; -- jack拥有对数据库中所有数据的所有权限。
all privileges -- 所有的权限(除grant外)
select -- 查询权限
insert -- 插入权限
注意:flush peivileges -- 刷新(将数据读到内存中,从而立即生效)。
2、查看权限
show grants for '用户名'@'IP地址';
3、取消权限
revoke 权限 on 数据库.表 from '用户名'@'IP地址';
# 案例:
revoke all privileges on *.* from 'jack'@'localhost'; -- 取消jack的所有权限。
2、数据库、数据表及数据的管理
使用客户端(命令提示符)时,所有的指令以;结束,\c 退出当前行命令,\q退出mysql命令行(与quit同理)。
使用客户端(命令提示符)操作MySQL时,注释以 – 来表示。
2.1、数据库(文件夹)的管理
2.1.1、内置客户端操作
-
进入数据库
use 数据库名字;
-
创建数据库
create database 数据库名字; -- create database 数据库名字 DEFAULT CHARSET 编码; create database 数据库名字 DEFAULT CHARSET utf8; -- create database 数据库名字 DEFAULT CHARSET 编码 COLLATE 排序规则; create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
查看数据库
show databases; -- 查看当前所有的数据库
-
删除数据库
drop database 数据库名字;
2.1.2、使用Python操作
数据库(表)名字尽量使用英文。
import pymysql
# 连接MySQL
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456', charset='utf8')
# 创建一个邮标
cursor = conn.cursor()
# 查看数据库
cursor.execute("show databases;")
a = cursor.fetchall()
print(a)
# 创建数据库
cursor.execute("create database 第一;")
conn.commit()
# 删除数据库
cursor.execute("drop database 第一;")
conn.commit()
# 进入某个数据库查看库中所有数据表
cursor.execute('use 数据库名字;')
cursor.execute("show tables;")
b = cursor.fetchall()
print(b)
# 断开连接
cursor.close()
conn.close()
2.2、数据表(表格)的管理
2.2.1、内置客户端操作
-
查看数据表
use 数据库名字; --进入某个数据库 show tables; -- 查看当前数据库下的所有数据表
-
删除数据表
drop table 数据表名字;
-
创建数据表(并添加一些数据)
create table 数据表名字( 列名 类型, 列名 类型, 列名 类型 )default charset=utf8; -- 案例一: create table tb1( id int primary key, -- 主键。(id列的值:不允许为空,不能重复) name varchar(16) not null, -- name列的值:不允许为空。 email varchar(32) null, -- email列的值:可以为空(默认)。 age int default 3 -- 输入数据时,如果不给age列设置值,默认值为3。 )default charset=utf8; -- 案例二: create table tb2( id int not null auto_increment primary key, -- 不允许为空 & 自增 & 主键。 name varchar(16) not null, -- name列的值:不允许为空。 email varchar(32) null, -- email列的值:可以为空(默认)。 age int default 3 -- 输入数据时,如果不给age列设置值,默认值为3。 )default charset=utf8; -- 注意:一个数据表中只能有一个自增列。(一般为主键)
2.2.2、使用Python操作
import pymysql
# 连接MySQL
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456', charset='utf8')
# 创建一个邮标
cursor = conn.cursor()
# 进入某个数据库查看库中所有数据表
cursor.execute('use 数据库名字;')
cursor.execute("show tables;")
b = cursor.fetchall()
print(b)
# 创建一个数据表
sql = """
create table TB1(
id int not null auto_increment primary key,
name varchar(16) not null,
email varchar(32) null,
age int default 3
)default charset=utf8;
"""
cursor.execute(sql)
conn.commit()
# 删除数据表
cursor.execute("drop table TB1") # 方式一(数据库中存在此表时则删除,不存在程序报错)
conn.commit()
cursor.execute("drop table if exists tb5") # 方式二(加上if exists关键字,避免程序报错)
conn.commit()
# 断开连接
cursor.close()
conn.close()
2.3、数据表中关于列的常见数据类型
2.3.1、整型
int # 表示有符号,取值范围为-2147483648 ~ 2147483647。
int unsigned # 表示无符号,取值范围为0 ~ 4294967295。
int(5)zerofill # 仅用于显示,当数据不满五位时,按照左边补0。例:00045
2.3.2、小数
decimal(m,d) # m表示数据整体位数(符号除外),d表示小数部分
2.3.3、字符串
char(m)
"""
定长字符串,m代表字符串长度,最多容纳255个字符。
当输入的数据不满m个字符时,依然以m个字符存储;超出时,要么报错,要么自动截取最大255个字符。(取决于配置文件是否严格模式)
适应于固定长度内容
"""
varchar(m)
"""
变长字符串,m表示字符串长度,最多容纳65535个字节。
当输入的数据不满m个字符时,按实际实际m个字符存储;超出时,要么报错,要么自动截取最大65535个字符。(取决于配置文件是否严格模式,MySQL默认是严格模式,)
"""
text # 一般用于保存较长的大字符串,如:文章、新闻等。
2.3.4、时间
datetime # YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 / 9999-12-31 23:59:59
timestap # YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 / 2037年
2.4、数据表中数据的管理
2.4.1、内置客户端操作
-
查看数据
-- 返回列名,属性(不返回数据,但返回默认值) desc 表名; -- 查看表中所有数据的属性。 -- 只返回列名和数据(列下没有数据时,只返回空,不返回列名) select * from 表名; -- 查看表中所有的数据。 select 列名,列名,列名 from 表名; -- 按列名查看相应数据并返回。 select 列名 as 别名 from 表名; -- 按列名查看相应数据并将其作为别名返回。 select 列名 from 表名 where 条件; -- 在表中按条件查看列中符合条件的数据并返回。
-
增加(插入)数据
# 增加列(列不存在新增列) alter table 表名 add 列名 类型; alter table 表名 add 列名 类型 DEFAULT 默认值; alter table 表名 add 列名 类型 not null default 默认值; # 添加主键(列已经存在修改其为主键,使其具有主键的属性) alter table 表名 add primary key(列名); # 在列中插入数据(列已存在,新增数据) insert into 表名(列名1,列名2) values(列名1的数据,列名2的数据); 例:insert into L1(age,num) values(7759,489);
-
删除数据
# 整个数据表清空(不删除列名,只删除列下的数据) delete from 数据表名字; -- 速度相对较慢。 delete from 数据表名字 where 条件; -- 按条件删除。 truncate table 数据表名字; -- 速度相对较快,且无法回滚撤回。 # 删除列的默认值(不删除列名,前面赋值过的也不删除,后面新增数据不默认添加) ALTER TABLE 表名 ALTER 列名 DROP DEFAULT; # 删除列(会将列名和数据一起删除) alter table 表名 drop column 列名; # 删除主键(只删除主键的相关属性,不删除其数据和列名。) alter table 表名 drop primary key;
-
修改数据
# 修改列下的数据(只修改列下面的数据,不修改列名)
update 表名 set 列名=值; -- 会把此列的所有值都修改成你给的值。
update 表名 set 列名=值 where 条件;
# 修改列的类型
alter table 表名 modify column 列名 新类型;
# 修改列的类型和列名
alter table 表名 change 原列名 新列名 新类型;
# 修改列的默认值
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 1000;
2.4.2、使用Python操作
import pymysql
# 连接MySQL,并自动进入tb1数据库(databases='tb1')以免每次都需要进入的麻烦。
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456', charset='utf8',databases='tb1')
# 创建一个邮标
cursor = conn.cursor()
# 新增数据
cursor.execute('insert into tb3(id,name) values(99,78);')
conn.commit()
# 删除数据
cursor.execute('delete from tb3;')
conn.commit()
# 修改数据
cursor.execute('update tb3 set name="肖";')
conn.commit()
# 查看数据
cursor.execute("select * from tb3;")
c = cursor.fetchall()
print(c)
# 断开连接
cursor.close()
conn.close()