Python学习日记(三十三) Mysql数据库篇 一
背景
Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品。Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relational Database Management System)。Mysql是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
其他类似软件:
关系型数据库:sqllite、db2、Oracle、access、sql sever、Mysql
非关系型数据库:MongoDB、redis
安装
在Windows系统上,我们下载完Mysql后安装到任意目录下,可以看到里面有一个bin文件,打开
里面有mysql.exe和mysqld.exe两个执行档,它们分别是客户端和服务端
启用
在取得bin目录路径后,初始化服务端
输入上面语句后我们会发现原目录下会多出一个data的文件夹
然后再启动服务端
之后我们再打开一个新的command,实现客户端连接到服务端
这里默认的用户名是root密码为空,执行时按回车跳过就好
使用show databases;去看data文件下的文件:
也可以创建一个新的db文件:
添加环境变量
如果觉得每次执行时都要加上一长串的路径很麻烦我们可以直接在系统上添加环境变量
获取bin的路径:F:\mysql-8.0.11-winx64\mysql-8.0.11-winx64\bin
然后右键计算机->高级系统设置->高级->环境变量->找到系统变量的Path在后面加上;路径
这样我们在执行服务端和客户端就不用再加上路径了
服务端:
客户端:
制作Windows上的Mysql服务
这样我们就可以在服务的进程上看到了Mysql服务,我们就可以点击左上的启动此服务
或者我们输入下面语句也可以启动服务
如果要停止Mysql服务
移除Mysql服务
创建用户及授权
首先在data文件夹下的文件夹(比如db1)我们可以称为数据库,而db1文件夹下的文件(Excel文件),我们称为表,在这个表中的一行行排列的就是数据行
默认的用户是root,那么这个root被放在哪里呢?
Mysql在一个用户登录的时候会在user中查看里面是否有这个用户的信息
那如何创建新的用户?
语法:
create user 'username'@'IP addres' identified by 'password'; #限制只能在这台机器上登录
create user 'username'@'192.168.43.%' identified by 'password'; #%表示在最后一位数没有要求,只需要考虑前三尾数相同即可
create user 'username'@'%' identified by 'password'; #表示所有机器都可以登入
授权用户
grant 权限名 on db1.t1 to 'username'@'%'; #只能让该用户访问db1文件夹下的表t1
grant 权限名 on db1.* to 'username'@'%'; #能让该用户访问db1文件夹下的所有表
grant 权限名 on *.* to 'username'@'%'; #表示可以让该用户访问所有数据库的内容
权限名称:
all privileges 除grant外的所有权限
select 仅查权限
select,insert 查和插入权限
usage 无访问权限
alter 使用alter table
alter routine 使用alter procedure和drop procedure
create 使用create table
create routine 使用create procedure
create temporary tables 使用create temporary tables
create user 使用create user、drop user、rename user和revoke all privileges
create view 使用create view
delete 使用delete
drop 使用drop table
execute 使用call和存储过程
file 使用select into outfile 和 load data infile
grant option 使用grant 和 revoke
index 使用index
insert 使用insert
lock tables 使用lock table
process 使用show full processlist
select 使用select
show databases 使用show databases
show view 使用show view
update 使用update
reload 使用flush
shutdown 使用mysqladmin shutdown(关闭MySQL)
super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
replication client 服务器位置的访问
replication slave 由复制从属使用
使用
创建一个新用户并给他授权
然后我们重新开启一个客户端并登入新用户资料查看他能够看到的数据
其他用户管理语法:
删除用户:drop user 'username'@'IP address';
修改用户:rename user 'username'@'IP address';
修改密码:set password for 'username'@'IP address' = Password('new password')
其他授权语法:
查看权限:show grants for 'username'@'IP address';
取消授权:revoke 权限名 on 'Database'.'Table' from 'username'@'IP address';
查看用户登录资料
操作数据库及数据表
1.操作文件夹
<1>create database 新的数据库名; 创建一个新的数据库
增加编码的要求:create database 新的数据库名 charset utf8; 这样写这个数据库的默认编码是以utf-8
<2>show databases; 显示所有数据库
<3>drop database 数据库名; 删除现有数据库
2.操作文件
<1>show tables; 显示出所有表格
<2>create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...); 创建一个新的表名
①增加编码要求:create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...) default charset=utf8;
②增加引擎要求:create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...) engine= innodb default charset=utf8;
innodb:支持事务,能恢复到之前的状态,原子性操作
myisum
③null、not null、default、auto_increment:
null->就是我的数据可以为空
not null->就是我的数据不可以为空
default->可以为我的数据设置一个默认值
auto_increment->用于自增,一般来说要搭配primary key使用;primary key的作用为约束(不能重复也不能为空)、加速查找,一个表里面只能有一个自增列,并且要有一个主键
3.操作文件中的内容
<1>insert into 表名(第一列数据名,第二列数据名...) values(值1,值2...); 往表内插入数据
<2>selcet * from 表名; 查看表内所有信息
接上1的步骤结果
再添加一条信息
<3>解决中文数据问题
<4>delete from 表名; 清空这个表的数据
若一个表只有一个自增数,它的id已经增加到3,若使用delete from 去清空这个表,再之后又新增了一笔资料后,它的自增值不重新开始
<5>truncate table 表名; 清空这个表的数据,执行速度快
使用trucate table就不会出现自增值不会不重新计算的情况
<6>drop table 表名; 删除这个表
数据表基本数据类型
按整数去分:
1.int
int unsighed:无符号整数 范围:0 ~ 4294967295
int sighed:有符号整数 范围:-2147483648 ~ 2147483647
2.tinyint
tinyint unsighed:无符号小整数 范围:0 ~ 255
tinyint sighed:有符号小整数 范围:-128 ~ 127
3.bigint
bigint unsighed:无符号大整数 范围:0 ~ 18446744073709551615
bigint sighed:有符号大整数 范围:-9223372036854775808 ~ 9223372036854775807
按小数去分:
1.FLOAT[(m,d)]
并不准确的小数 数值越大越不准确,m是数字总个数,d是小数点后个数
FLOAT unsighed:无符号单精度浮点数 范围:
-1.7976931348623157E+308 ~ -2.2250738585072014E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308 FLOAT sighed:有符号单精度浮点数 范围:
0
1.175494351E-38 to 3.402823466E+38
2.DOUBLE[(m,d)]
并不准确的小数 数值越大越不准确,m是数字总个数,d是小数点后个数
DOUBLE unsighed:无符号双精度浮点数 范围:
-1.7976931348623157E+308 to -2.2250738585072014E-308
0
2.2250738585072014E-308 to 1.7976931348623157E+308
DOUBLE sighed:有符号双精度浮点数 范围:
0
2.2250738585072014E-308 to 1.7976931348623157E+308
3.decimal[(m[,d])]
精准的小数值,m是数字总个数(负号不算),d是小数点后个数,m最大值为65,d最大值为30
按字符串去分:
1.char(m)
char数据类型用于表示固定长度的字符串,可以包含最多达255个字符.其中m代表字符串的长度。即使数据小于m长度,也会占用长度。
2.varchar(m)
varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
创建数据表时把定长的数据往前放置,把不固定长度的数据往后放
3.text
text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符
4.mediumtext
范围:16,777,215 (2**24 − 1)个字符
5.longtext
范围:4,294,967,295 or 4GB (2**32 − 1)个字符
将上传文件存硬盘,DB存路径
按时间类型分:
1.DATE
YYYY-MM-DD(1000-01-01/9999-12-31)
2.TIME
HH:MM:SS('-838:59:59'/'838:59:59')
3.YEAR
YYYY(1901/2155)
4.DATETIME
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
5.TIMESTAMP
YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
按二进制数据分:
1.TinyBlob
2.Blob
3.MediumBlob
4.LongBlob
其他:
1.bit[(m)]
二进制位(101001),m表示二进制位的长度(1-64),默认m=1
2.enum
枚举类型An ENUM column can have a maximum of 65,535 distinct elements.(The practical limit is less than 3000.)
示例:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
3.set
集合类型A SET column can have a maximum of 64 distinct members.
示例:
CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
基本的增删改查
1.插入
insert into 表名(第一列数据名,第二列数据名...) values(值1,值2...);
2.删除
delete from 表名 where id<6; 只删除id小于6的数据
3.修改
①让表中所有的这个列下的值都改成一个固定数据:update 表名 set 列名=修改的固定值;
②基于①但有条件得去修改update 表名 set 列名=修改的固定值 where 列名=值;
4.查看
select * from 表名;
Python学习日记(三十三) Mysql数据库篇 一的更多相关文章
- Python学习日记(三十七) Mysql数据库篇 五
pymsql的使用 初识pymysql模块 先在数据库中创建一个用户信息表,里面包含用户的ID.用户名.密码 create table userinfo( uid int not null auto_ ...
- Python学习日记(四十) Mysql数据库篇 八
Mysql存储过程 存储过程是保存在Mysql上的一个别名(就是一堆SQL语句),使用别名就可以查到结果不用再去写SQL语句.存储过程用于替代程序员写SQL语句. 创建存储过程 delimiter / ...
- Python学习日记(四十一) Mysql数据库篇 九
前言 索引的主要作用是起到约束和加速查找,ORM框架(sqlalchemy)是用类和对象对数据库进行操作 索引的种类 按种类去分 1.普通索引:能够加速查找 2.主键索引:能够加速查找.不能为空.不能 ...
- Python学习笔记9-Python 链接MySql数据库
Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...
- python学习笔记之——操作mysql数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...
- Python学习日记(三十六) Mysql数据库篇 四
MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...
- Python学习日记(三十八) Mysql数据库篇 六
Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...
- Python学习日记(三十九) Mysql数据库篇 七
Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...
- Python学习日记(三十五) Mysql数据库篇 三
使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...
随机推荐
- 支付宝小程序开发——获取位置API没有城市区号的最佳处理方案
前言: 需要对城市区号进行判断,但是支付宝小程序提供的my.getLocation() API返回的数据中只有6位的城市行政代码,诸如:深圳(440300),并没有区号(0755),那么怎么办呢? 需 ...
- IIS6远程代码执行漏洞复现CVE-2017-7269
简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...
- Fiddler抓包工具的简单使用
Fiddler的官方网站:http://www.fiddler2.com Fiddler的官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quic ...
- lvm的一些特殊命令
pvscan --cache # 将lvm信息同步到其他节点 ......未完待续
- [bug]——vue 组件状态外置引发的一个 bug
背景 在编写 .vue 组件时,可以将状态外置来获取一些额外的好处,譬如有这么一个组件(global-components.vue): <template> <div> < ...
- 【剑指offer】数组在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 分析:数组有序,采用二分查找无疑 两种方法,时间复杂度差不多,都是利用二分查找,不过统计k出现的次数有所不同而已 方法1:二分查找k,找到任意一个k的下 ...
- 分布式session一致性
实现思路:当客户端发送请求到服务端后,在后台生成一个token,将token作为key,用户状态信息作为value,存入redis缓存中,并设置过期时间,最后把token返回给客户端 客户端第会保存t ...
- mysql 初级练习题
1.题目 第一题: tb_user: User_id User_name User_phone 1 张三 13800138000 2 李四 13800138001 tb_customer: Custo ...
- 向DataGrid数据表格增加查询搜索框
向DataGrid数据表格增加查询搜索框 效果如下: js代码: $(function(){ var dg = $('#dg').datagrid({ url:"${pageContext. ...
- STVD使用printf输出数据错误
使用STM8L052输出调试信息 重定向put char #include "stdio.h" //必不可缺少 char putchar (char c) { /* Write a ...