MySQL数据库
一、MySQL数据库的介绍
发展史:
1996年 MySQL1.0
2008年1月16日 Sun公司收购MySQL
2009年4月20日 Oracle收购Sun公司
MySQL是一种开放源代码的关系型数据库管理系统 (RDBMS) 使用最常用的数据库管理语言 SQL(结构化查询语言) 进行数据库管理
介绍:
MySQL是一个关系型数据库管理系统 由瑞典MySQLAB公司研发 目前属于Oracle旗下产品 MySQL是最流行的关系型数据库管理系统之一 MySQL软件采用了双授权正则 分为社区版和商业版 由于体积小 速度快 总体拥有成本低 尤其是开放源代码这一个特点 一般中小型网站开发都选择MySQL作为网站数据库
社区版和企业版本的区别
主要有以下俩点的区别:
- 企业版只包含稳定之后的功能 社区版含所有MySQL最新的功能 也就是说 社区版是企业版的测试版 但是社区版的功能多于企业版
- 官方的支持服务只针对企业版 用户在使用社区版本时 出现的任何问题 MySQL官方概不负责
下载:
进入MySQL官网 : https://www.mysql.com
二、数据库的分类
关系型与非关系型数据库
关系型数据库的优势:
-
复杂查询
可以使用SQL语句 很方便的在一个表以及多个表之间进行复杂的数据查询
-
事物处理
对于数据安全性要求很高的功能得以实现
非关系型数据库的优势
-
性能
NOSQL 是基于键值对的 可以想象成表中的主键和值对应关系 不需要经过SQL层的解析 所以性能很高
-
可扩展性
同样也是因为基于键值对 数据之间没有耦合性 所以容易水平扩展
三、进入到MySQL数据库
(1)简单模式
mysql -uroot -p
输入密码 123456
(2) 标准模式
mysql -h127.0.0.1 -uroot -p
输入密码
参数:
-h host 主机
-u user 用户名
-p passsword 密码
(3) 概念理解
MySQL数据库(软件名称) ----》很多数据库(比如 想要有一个装大米的库 你就可以在mysql数据库下创建大米库 )---->表(真正存储数据的)
表:
用户表 存的就是用户信息的
地址表 存储的就是用户的地址数据
购物车表 存储的就是用户加入购物车的数据
商品表 存储当前商品数据的表
四、对于MySQL数据库的操作
对于库和表的操作的单词
**创建 ** create
删除 drop
查看 show
修改 alter
(1) 查看所有的数据库
show databases;
(2) 选择数据库
use 数据库名称
(3) 查看当前数据库下有哪些表
show tables;
(4) 查看当前所在的库
select database();
(5) 创建数据库
create database 库名;
(6) 查看当前创建库的信息
show create database 库名;
(7) 修改数据库字符编码
alter database 库名 character set utf8;
(8) 修改表的字符编码
alter table 表名 character set utf8;
(9) 修改表中字段的字符编码
alter table 表名 modify 字段名 字段类型 约束条件 character set utf8;
(10) 删除库/删除表
drop database 库名
drop table 表名
(11) 创建数据库并设置字符编码
create database 库名 character set utf8;
(12) 防止删除不存在的库报错
drop database if exists today;
(13) 查看创表的结构
show create table 表名;
show create table 表名 \G;
(14) 查看表结构
desc 表名;
(15) 撤销当前命令
\c
(16) 数据库的退出
- \q
- exit
- quit
注意:
- MySQL语句的结尾为分号
- 数据库的切换直接use就可以 就进行了数据库的切换
- 如果创建库的时候 忘记更改字符编码 那么在创建的表都是当前数据库的编码 存入中文可能会乱码 怎么解决?先改库的编码 在改表的编码 在改字段的编码 所以很麻烦 不如直接删掉 重新创建
- windwos下库名和表名不区分大小写 Linux下严格区分
(17)删除一个表,并将默认排序改为从1开始
delete from 表名;
alter table 表名 auto_increment=1;
五、MySQL表的创建
字段类型
(1) 数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
tinyint | 1字节 | -128~127 | 0~255 | 小整数值 |
smallint | 2字节 | -32768~32767 | 0,65535 | 大整数值 |
int | 4字节 | -214748364~2147483647 | 大整数值 | |
float | 4字节 | 单精度浮点型 | ||
double | 8字节 | 双精度浮点型 | ||
decimal | decimal(m,d) 为m+2 | 依赖于m和d的值 | 依赖于m和d的值 | 小数值(更加精准) |
创建表的语句结构:
create table 表名(
字段名称 字段类型 约束条件 可选项,
...
索引名称 索引类型
...
)
实例:
创建表语句:
mysql> create table testnum(
-> ttinyint tinyint,
-> tsmallint smallint,
-> tint int,
-> tfloat float(6,2),
-> tdouble double(6,2),
-> tdecimal decimal(6,2)
-> );
查看表结构
mysql> desc testnum;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ttinyint | tinyint(4) | YES | | NULL | |
| tsmallint | smallint(6) | YES | | NULL | |
| tint | int(11) | YES | | NULL | |
| tfloat | float(6,2) | YES | | NULL | |
| tdouble | double(6,2) | YES | | NULL | |
| tdecimal | decimal(6,2) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
表插入语句:
insert into 表名(字段1,字段2…) values(值1,值2…); 可以指定想要插入值的字段
insert into 表名 values(值1,值2…); 需要将所有字段都插入值
(2) 日期和时间类型
类型 | 大小 | 格式 | 用途 |
---|---|---|---|
date | 3 | YYYY-MM-DD | 日期值 |
time | 3 | HH:MM:SS | 时间值 |
year | 1 | YYYY | 年分值 |
datetime | 8 | YYYY:MM:DD HH:MM:SS | 混合日期和时间值 |
timestamp | 4 | YYYYMMDDHHMMSS | 混合日期和时间值 |
创建表语句
mysql> create table testtime(
-> tdate date,
-> ttime time,
-> tyear year,
-> tdatetime datetime default now(),
-> ttimestamp timestamp
-> );
(3) 字符串类型
类型 | 大小 | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-255 | 变长字符串 |
text | 0-65535 | 长文本数据 |
lonetext | 极大文本数据 | |
enum(成员1,成员2…) | 65535个成员 | 枚举:可赋予某个枚举成员 |
set(成员1,成员2…) | 64个成员 | 集合:可赋予多个集合成员 多个集合成员用逗号隔开 |
创建表语句:
mysql> create table teststr(
-> tchar char(11),
-> tvarchar varchar(5),
-> ttext text,
-> tenum enum('w','m'),
-> tset set('a','b','c','d')
-> );
字符串类型注意事项:
- char和varchar的区别
- char执行效率高于varchar (但是占用空间大)
- varchar就相对于节省空间
- char和varchar长度存储范围都在255
- 当给char类型传入值的长度低于给定的长度 则使用空格填充到指定的长度
- varchar类型传入的值小于给定的长度 不会使用空格填充
2)enum和set的区别
- enum只能选择多个成员中的一个成员
- set可以选择多个成员 如果存在重复的成员 则会自动去重
- enum和set 都只能选择给定的成员
六、字段约束
-
unsigned 无符号 只能存储正数
只能用于设置数值类型 不允许出现负数
最大存储长度会增加一倍
实例:
mysql> create table testunsigned( -> age1 tinyint, -> age2 tinyint unsigned -> );
-
zerofill 零填充
只能用于设置数值类型 在数值之前会自动用零补齐不足的位数
实例:
mysql> create table tz( -> num int(5), -> num2 int(5) zerofill -> );
-
default 默认值 如果不给定 则为默认null
实例:
mysql> create table testdef(
-> username varchar(5) default 'lucky', -> age tinyint unsigned -> );
-
auto_increment 自增 配合主键使用
用于设置字段的自动增长 每增加一条记录 那么该字段的值会自动增加
实例:
mysql> create table test( -> id int unsigned primary key auto_increment, -> username varchar(10) default 'lucky' -> );
注意:
插入数据的时候 自增无须给值 会从1 自动递增 (当然给值也可以)
-
null 和 not null
字段没有给定默认值的情况下 默认为null
如果你设置了 not null 那么该字段就必须在插入数据的时候 给值 否则默认为null 但是又不能为null 所以报错
实例:
mysql> create table test( -> id int unsigned primary key auto_increment, -> username varchar(10) default 'lucky', -> sex tinyint not null -> );
-
comment 设置说明
mysql> create table user( -> id int unsigned primary key auto_increment, -> username varchar(20) not null default 'lucky' comment '存储用户名' -> ); alter table 表名 comment="表说明"
七、null注意事项
(1) null 意味着没有值 或者未知值
(2) 不能对null 进行算数运算
(3) 对null进行运算 结果还是为null
(4) 0或者null 都是假值False 其余都为真
八、MySQL索引
MySQL下有四种索引
- 主键索引 primary key
- 唯一索引 unique
- 常规索引 index
- 全文索引 fulltext
(1) 主键索引
主键索引是关系型数据库中最常见的索引类型 主要作用是确定表里的一条数据的确定位置 我们可以使用 primary 可以 进行设置主键
注意事项:
- 最好为每张表指定一个主键索引 但不是必须的
- 一个表只能指定一个主键索引 值不能为null 通常和auto_increment 搭配使用
创建:
create table test(
id int unsigned primary key auto_increment
)
自增归位
当删除掉数据库中的数据的时候 那么自增依然保持原来的增长位置 这样就浪费了之前的存储位置 所以要进行自增归位
- truncate 表名; 清空所有的表中数据 并进行归位
- alter table 表名 auto_increment=1; 将自增改为1
(2) 常规索引 index
常规索引是关系型数据库中 最重要的技术 如果要提升数据库的性能 索引优化是首先应该考虑 因为它能使我们的数据库的性能得到最大提升
缺点:
- 多占用磁盘空间
- 会减慢插入 修改 和删除的操作
创建常规索引
创建常规索引 可以和 index 或者key 关键字 进行一同创建
实例:
起索引名称
mysql> create table user(
-> id int unsigned primary key auto_increment,
-> username varchar(20),
-> index u_index(username)
-> );
索引名称为 u_index 给username字段添加常规索引
不起索引名称
mysql> create table user(
-> id int unsigned primary key auto_increment,
-> username varchar(20),
-> index username
-> );
说明:
如果给索引起名称 那么索引名就是你起的名称 如果不起则为字段名
注意:
- 在给mysql创建常规和唯一索引的时候 不要写在一行 否则会报错
- 一个表中可能会存在多个常规索引 但是要根据具体情况去设置 设置某个字段在有大量查询的时候
(3) 唯一索引 unique
唯一索引与主键索引一样 都可以防止创建重复的值 但是不同之处在于 每个数据表只可以有一个主键索引 但是可以有多个常规索引 可以使用unique进行定义唯一索引
注意:
如果在给表中插入数据的时候 出现了报错 并且数据都没有问题 那么查看一下 是否有唯一索引存在
实例:
mysql> create table user2(
-> username varchar(10),
-> sex tinyint,
-> unique u_username(username)
-> );
给username添加了唯一索引 索引名称为u_username
不起名称
mysql> create table user2(
-> username varchar(10),
-> sex tinyint,
-> unique(username)
-> );
(4) 全文索引 fulltext(了解)
全文索引 fulltext 只能用于MyISAM表类型 并且只能设置字段为char、varchar或text的字段类型上
缺点:
fulltext是不支持中文索引的
实例:
create table test_fulltext(
article text,
fulltext key article(article)
)
九、数据表类型与存储位置
MyISAM与innodb 是最为重要的俩种表引擎类型
MyISAM与innodb的区别:
- MyISAM表类型会产生三个文件 innodb有俩个
- MyISAM表类型效率更高
- innodb的安全性高于MyISAM
- innodb支持事物处理 MyISAM不支持
- MyISAM不支持外检 innodb支持
MyISAM与innodb存储文件的区别和代表的含义
修改表存储引擎
alter table 表名engine=myisam/innodb;
MyISAM与innodb引擎相同存储文件
.frm 存储数据表的框架结构 文件名与表名是相同的 每个表对应一个同名的frm文件
innodb
.ibd 存储数据库表数据和索引
MyISAM
.MYD my data 表数据文件
.MYI my index 索引文件
数据库:
数据库也是以文件形式存储在磁盘上 Data文件中
九、innodb的事物处理
如果mysql的配置文件没有更改过 那么默认为MyISAM 可以在my.ini配置文件中 更改为innodb
(1) 查询当前是否为自动提交
select @@autocommit
如果值为1则为自动提交
(2) 开启事物处理
set autocommit = 0;
(3) 开始事物
begin
(4) 执行SQL语句
insert into user2 values(‘lucky’,0)
(5) 提交或回滚
commit work;
rollback work;
注意:
- 如果开启了事物 在处理数据后 没有进行提交或回滚 那么你的操作和没有操作一样 也就是相当于回滚了
- 只有innodb支持事物 MyISAM不支持 所以当你插入数据所有执行都没有问题 那么查看是否为MyISAM表存储引擎
十、建表的注意事项
- 表的字段之间要是用逗号隔开 最后一个字段的结尾 不需要添加逗号
- 数据表名 不要和字段名重名
- 字段名不要使用表类型或者数据库中的任何关键字 否则会出现问题
- auto_increment 属性 必须依赖于主键索引
十一、对表结构的操作
-
给表添加一个新的字段
alter table 表名 add 字段名 字段类型 约束条件 说明
alter table user add info varchar(40) default ‘个人信息’ comment ‘个人信息’;
-
删除一个字段
alter table 表名 drop 字段名
alter table user drop sex;
-
更改字段名
alter table 表名 change 原字段名 新字段名 字段类型 约束条件 说明
alter table user change username name varchar(20) default ‘xxx’ comment ‘用户名’;
-
修改字段信息
alter table 表名 modify 字段名 字段类型 约束条件 说明
alter table user modify name varchar(10) default ‘lucky’;
-
更改字段位置
alter table 表名 modify 字段名 字段类型 约束条件 说明 first/after 字段名 排在第一位或者某个字段的后面 默认为最后一个
alter table user modify sex enum(‘w’,‘m’) default ‘w’ first;
alter table user modify sex enum(‘w’,‘m’) default ‘w’ after name;
-
表添加索引
alter table 表名 add 索引类型 索引名称(字段名) 添加索引名
alter table user add key i_name(name);
alter table 表名 add 索引类型(字段名) 不添加索引名
alter table user add unique(sex);
-
删除索引
alter table 表名 drop key 索引名;
alter table user drop key sex;
-
创建一个和a表一样表结构的b表
create table b like a;
十二、数据的添加 insert
-
指定字段添加值
insert into 表名(字段1,字段2…) values(值1,值2…)
insert into user(name,sex,info) values(‘lucky’,‘w’,‘lucky的个人信息’);
-
不指定字段添加值
insert into 表名 values(值1,值2…)
insert into user values(null,‘lucky’,‘w’,‘lucky的个人信息’);
-
指定字段添加多个值
insert into 表名(字段1,字段2…) values(值1,值2…),(值1,值2…)…
insert into user(name,sex,info) values(‘lucky’,‘w’,‘lucky的个人信息’),(‘张三’,‘m’,‘张三的个人信息’);
-
不指定字段添加多个值
insert into 表名 values(值1,值2…),(值1,值2…)…
insert into user values(null,‘lucky’,‘w’,‘lucky的个人信息’),(null,‘张三’,‘m’,‘张三的个人信息’);;
注意:
指定字段与不指定字段在添加值的时候 按照从左至右依次对应添加
十三、select 查询
-
不指定字段的查询(不建议)
select * from 表名
-
指定字段查询
select 字段名,字段名… from 表名
-
对查询的字段起别名
select name username,sex my_sex from user;
select name as username,sex as my_sex from user;
-
给查询的结果添加一个新字段
select id,name,sex,‘北京’ as address from user;
十四、update 修改
-
修改一个字段的值
update user set name=‘赵四’; 错误注意写法 修改了当前user表中name字段的所有值
update user set name=‘赵四’ where id=1; 修改id为1的name的值为赵四
-
修改多个字段的值
update user set name=‘张三’,sex=‘m’ where id=2;
-
给字段的值在原有的基础上改变
update user set age = age+2 where id=3; 把id为3的数据的年龄 在原有的基础上加2
注意:
在进行数据的修改的同时 一定记得给where条件 如果没有给定where 条件 则修改的为整张表当前字段的值
十五、delete 删除
主体结构:
delete from 表名 [where]
实例:
delete from 表名 删除表中的所有数据…
注意:
删除一定注意要添加where条件 否则会删除整张表中的所有数据 并且auto_increment自增字段的值 不会改变 所以需要将自增归位
十六、where条件
表结构:
+-------+---------------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+----------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | MUL | lucky | |
| sex | enum('w','m') | YES | | w | |
| age | tinyint(3) unsigned | YES | | 18 | |
| info | varchar(40) | YES | | 个人信息 | |
+-------+---------------------+------+-----+----------+----------------+
(1) 比较运算符
-
>
select * from user where age > 18;
-
<
select * from user where age < 28;
-
>=
select * from user where age >= 18;
-
<=
select * from user where age <= 18;
-
=
select * from user where age = 18;
-
!=/<>
select * from user where age != 18;
select * from user where age <> 18;
(2) 逻辑运算符
-
and 逻辑与 俩侧为真才为真
select * from user where age=18 and sex = ‘m’; 查询性别为m并且年龄为18的数据
-
or 逻辑或 满足一侧条件即可
select * from user where age=18 or sex=‘w’; 查询年龄为18或者 性别为w的数据
-
between … and … 在…范围之内 包含本身
select * from user where age between 18 and 20;
select * from user where age >=18 and age <=20;
-
not between … and … 不在…之间
select * from user where age <18 or age >20 ;
select * from user where age not between 18 and 20;
-
in … 在…里
查询年龄为18或20的数据
select * from user where age in(18,20);
select * from user where age=18 or age=20;
-
not in 不在…里
查询年龄不为18或20的数据
select * from user where age!=18 and age!=20;
select * from user where age not in(18,20);
(3) order by 排序 升序/降序
升序(默认) asc
查询数据 按照年龄升序查询
select * from user order by age asc;
select * from user order by age;
降序 desc
查询数据 按照年龄降序
select * from user order by age desc;
(4) limit 取值
结构:
limit x; 取出x条数据
limit x,y; 从x的位置 取出y条数据
取出3条数据
select * from user limit 3;
select * from user limit 0,3;
分页实例:
每页数据展示10条
第一页 0,10
第二页 10,10
第三页 20,10
…
公式:
(nowPage-1)*everyPage
(5) is is not 查询为null的数据
查询name为null的数据
select * from user where name is null;
查询name为不null的数据
select * from user where name is not null;
注意:
因为 null 是特殊的值 所以不能使用= 或者!= 进行查询
(6) like 模糊查询
-
‘%字符’ 查询以字符结尾的数据
查询以四结尾的name值数据
select * from user where name like ‘%四’;
-
‘字符%’ 查询以字符开头的数据
查询以赵开头的name值的数据
select * from user where name like ‘赵%’;
-
‘%字符%’ 查询包含字符的数据
查询name字段值中包含四的数据
select * from user where name like ‘%四%’;
-
‘_’ 通配符 代表匹配任意一个字符
查询name字段值 有俩个字符的数据
select * from user where name like ‘__’;
select * from user where name like ‘_四’; 查询第二位为四第一位为任意字符的俩位长度的数据
-
not like
查询name字段除了包含四以外的所有数据
select * from user where name not like ‘%四%’;
(7) distinct 去除重复的数据
select distinct name from user;
(8) 子查询 (查询的条件 还是一条SQL语句)
select * from 表名 where 字段名 in (SQL语句)
select * from user where age in (select age from user where sex=‘w’);
十七、聚合函数
- count 统计个数
- max 最大值
- min 最小值
- sum 求和
- avg 求平均数
select count(*) as count,max(age) as max,min(age) as min,avg(age) as avg,sum(age) as sum from user;
注意:
如果想统计数据总条数 不建议统计某个字段 如果字段为空 则统计数据条数不准确 建议count(*)
十八、group by 分组
主体结构:
select count(字段) from 表名 group by 字段
统计 男生和女生分别有多少人
select sex,count(*) from user group by sex;
统计每班有多少人
select class,count(*) from user group by class;
统计每个班的男生和女生分别有多少人
select class,sex,count(*) from user group by class,sex;
having子句 分组的条件 相当于where
查询班级人数2人以上的班级
select class,count(*) as total from user group by class having total>2;
统计三班和四班的人数
select class,count(*) as total from user group by class having class in(‘online3’,‘online4’);
统计三班和四班的人数 并且人数在2人以上的
只想统计三班和四班女生的人数
十九、多表联查
user表
mysql> desc user;
+-------+---------------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+----------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | MUL | lucky | |
| sex | enum('w','m') | YES | | w | |
| age | tinyint(3) unsigned | YES | | 18 | |
| info | varchar(40) | YES | | 个人信息 | |
| class | varchar(20) | YES | | online5 | |
+-------+---------------------+------+-----+----------+----------------+
address
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| uid | int(11) | YES | | NULL | |
| address | varchar(20) | YES | | NULL | |
| phone | char(11) | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+
(1) 隐示内连接
主体结构
select … from 表1,表2… where 表1.字段名=表2.字段名…
查询 id为1的用户的信息和地址信息
select * from user,address;
select * from user u,address a;
select * from user as u,address as a;
select u.id,u.name,u.sex,a.address,a.phone from user u,address a;
最终版
select u.id,u.name,u.sex,a.address,a.phone from user u,address a where u.id=1 and u.id=a.uid;
注意:
会将关联条件的数据进行查询
实例:
SELECT
u.id,
u. NAME,
u.sex,
a.address,
a.phone
FROM
USER u,
address a
WHERE
u.id = a.uid;
(2) 显示内连接 inner join
主体结构:
select … from 表1 inner join 表2 on…
查询 id为1的用户的信息和地址信息
实例:
select * from user u inner join address a;
select u.id,u.name,u.sex,a.address,a.phone from user u inner join address a;
select u.id,u.name,u.sex,a.address,a.phone from user u inner join address a on u.id = a.uid;
select u.id,u.name,u.sex,a.address,a.phone from user u inner join address a on u.id = a.uid and u.id=1;
注意:
会将关联条件的数据进行查询
(3) 左链接 left join
主体结构:
select … from 表1 left join 表2 on 条件…
查询 id为1的用户的信息和地址信息
实例:
select * from user u left join address a on u.id=1 and u.id=a.uid
注意:
左链接以做表为主表 右表为辅表 会将主表的数据都查询出来 辅表没有对应的数据 则使用 null来占位
select * from address a left join user u on u.id=1 and u.id=a.uid
(4) 右链接 right join
主体结构:
select … from 表1 right join 表2 on 条件…
查询 id为1的用户的信息和地址信息
实例:
select * from user u right join address a on u.id=1 and u.id=a.uid
select * from address a right join user u on u.id=1 and u.id=a.uid
注意:
右关联以右表为主表 左表为辅表 会将主表的数据全部查询出来 辅表没有对应的数据使用Null来占位
二十、其它操作(了解)
(1) 修改密码
set password for 用户名@localhost=password(‘新密码’);
(2) 创建其它用户分配权限
-
使用MySQL数据库
user mysql
-
查看当前库下有哪些用户
select user from user;
-
创建用户
create user 用户名 identified by ‘密码’;
create user lucky identified by ‘123456’;
-
赋予权限
grant all on 库.* to 用户名
all 代表增删改查
grant all on today.* to lucky;
-
回收权限
revoke all on 库.* from 用户
revoke all on today.* from lucky;
-
删除用户
drop user 用户名;
-
刷新权限
flush privileges
二十一、Python操作mysql数据库
安装:
pip install pymysql
使用:
import pymysql
(1) 连接MySQL数据库
db = pymysql.connect(主机名,用户名,密码,数据库名)
(2) 设置字符集
db.set_charset(‘utf8’)
(3) 创建游标对象
cursor = db.cursor()
(4) 执行SQL语句
cursor.execute(sql语句)
(5) 获取结果集
获取所有
cursor.fetch_all()
获取一条
cursor.fetch_one()
(6) 获取受影响的行数
cursor.rowcount
(7) 关闭数据库链接
db.close()
注意:
pymysq 默认开启了事物处理 所以需要提交或回滚
db.rollback()
db.commit()