mysql与pymysql

mysql基本命令脚本

关系型数据库

1.支持复杂的sql语句查询python

2.支持事务mysql

非关系型数据库

1.NQSQL不须要通过SQL层的处理sql

2.可扩展性,由于是键值对的形式因此水平扩展很是容易数据库

事务

事务是逻辑上的一组操做,组成这组操做的各个单元,要不所有成功,要不所有失败,这个特性就是事务安全

注意:MYSQL支持事务,可是要求必须是innoDB引擎

解决这个问题: mysql的事务解决这个问题,由于mysql的事务特性,要求这组操做,要不全都成功,要不全都失败,这样就避免了某个操做成功某个操做失败。利于数据的安全bash

如何使用:

1.在执行sql语句以前,咱们要开启事务start transaction; 2.正常执行咱们的sql语句; 3.当sql语句执行完毕,存在2种状况 第一种;所有成功,咱们讲sql语句对数据库形成的影响提交到数据库中,commit 第二种;某些sql语句失败,咱们执行rollback(回滚),将对数据库的操做赶忙撤销函数

一 进入到数据库

net start mysql57fetch

-h host 主机名ui

-u user 用户名编码

-p password 密码

启动数据库

mysql -hlocalhost -uroot -p

注:root超级管理员 能够建立和管理其余的用户,root用户不能够远程登陆

二 对于库的操做

CREATE 建立

DROP 删除

ALTER 修改

SHOW 展现

(1) 查看全部的数据库

show databases;

(2) 建立数据库

create database 库名;

create database if not exists 库名; 防止建立同名的库出现错误

(3) 查看创库语句

show create database 库名;

(4)使用数据库(进入到当前的库中)

use 库名

(5)查看当前所在的数据库

select database

(6)数据库的删除

drop database 库名

(7)建立数据库并设置字符集

create database 库名 character set utf8;

(8)建立数据库 并设置字符集

create database 小杰 character 字符集;

三 对于表的操做

0.查看全部的表

show tables;

1.建立表

mysql> create table if not exists fs(
    -> id int unsigned primary key auto_increment,
    -> username varchar(20),
    -> sex tinyint,
    -> age tinyint unsigned,
    -> info varchar(100)
    -> );
复制代码

2.查看表结构

desc 表名;

mysql> create table if not exists fs(
    -> id int unsigned primary key auto_increment,
    -> username varchar(20),
    -> sex tinyint,
    -> age tinyint unsigned,
    -> info varchar(100)
    -> );
复制代码

3.删除表中的某个字段

alter table 表名 drop 字段名;

4.删除表

drop table if exists 表名;删除表若是该表存在

5.增长表中的数据

insert into 表名 字段名 values(值);

6.查看表数据

select * from 表名;

7.查看创表语句

show create table 表名(\G);(竖着查看)

8.重命名表名

rename table 原表名 to 新表名;

9.修改表结构

alter table 表名 add|change|drop 字段名 (类型);

四 MYSQL表的建立

字段类型

(1) 整形

类型 大小 范围 无符号范围 用途 tinyint 1字节 -128,127 0,255 小整数值 smallint 2字节 -32768,32767 0,65535 大整数值 int 4字节 2-》10位置 4... 10 位的 大整数值 float(m,n) 4个字节 单精度浮点型 double(m,n) 8个字节 双精度浮点型 decimal(m,n) 根据存储的值 小数据值(更加精准) 浮点数中的m表明当前存储的长度 n表明小数的位数 m-n表明整数的位数 超出则报错 整形后面的数字的意义: 整形后面给定数字 并非限定当前存储值的长度 并无任何的意义 除非配合可选参数 zerofill 零填充 才有意义 字符串类型后面给定的长度 则是限制当前存储数据的长度 整形默认长度会比自己长度大1,由于是符号位

(2) 字符串类型

char和varchar的相同和不一样点 :

char和varchar的存储长度都为0-255

char的执行效率高于varchar

varchar要比 char更节省存储空间

当char存储的值达不到指定的长度时 则使用空来占位

enum和set区别

enum只能选择其中的一个值

set能够选择多个值 多个值使用逗号来隔开

(3) 时间和日期

五 字段约束

unsigned 无符号 正数

只能用于数值类型 不容许出现负数 存储长度会扩大一倍

zerofill 零填充

只能用于数值类型 当指定的位数不足的时候 零填充

default 默认值

若是当前字段没有传值 则值为默认值 (不设定默认值 默认为null)

null 和 not null

默认为null 当不插入值则插入的为null,当设置当前字段为 not null的时候

则该字段必须传值

comment 设置当前字段的说明

auto_increment 自增

注意

SQL 语句以分号做为结束

SQL命令 不区分大小写

数据库的切换使用use

\c 撤销当前命令

\G 竖着查看

当遇到在终端中 无论怎样输入命令都不执行 name查看一下左侧 是否为->

在Windows下 不区分库,表名的大小写 可是在Ubuntu下区分

退出数据库的几种方式

\q exit quit

六 数据操做

1 增

a 全列插入

格式:insert into (表名) values(...);

说明:主键列是自动增加,可是在全列插入时须要占位,一般使用0,插入成功之后以实际数据为准

b.缺省插入

格式:insert into 表名 (字段1,字段2,...) values (...)

c.同时插入多条数据

格式:insert into 表名 values (...),(...),...

2.删

格式:delete from 表名 where 条件;

示例:delete from student where id=4;

注意: !!没有条件是所有删除,慎用;

3改

格式:update 表名 set 字段1=值1,字段2=值2,.... where 条件

示例:update student set age=16 where id = 7;

注意:若是没有条件,是所有字段都修改;

4查

1.基本语法

格式:select * from 表名

说明:from 关键字后面是表名,表示数据来源于这张表

select 后面写表中的字段名," * " 表示全部字段名,  
       在select 后面字段名,可使用as为字段名起别名
       这个别名显示在结果集中
       若是要查询多个字段,直接使用逗号分隔
复制代码

示例:select name,age from student; select name as a,age from student;

2.消除重复行

在select后面字段名的前面使用distinct能够消除重复的行

示例:select distinct genger from student

3.条件查询

a.语法: select * from 表名 where 条件;

b.比较运算符

等于
 大于
 小于
 大于等于
 小于等于
 不等于
复制代码

需求:查询id大于8的全部数据

示例:select * from student where id > 8;

逻辑运算符

and or not

需求;查询id>7的女同窗

示例;select * from student where id>7 and gender=0;

d.模糊查询

like %:表示任意多个任意字符 :表示任意一个字符 需求:查询姓习的同窗 示例:select * from student where name like "习%"; 示例:select * from student where name like "习";

e.范围查询

in:表示在一个非连续的范围内

between..and...:表示在一个连续的范围内

需求:查询编号为8,10,12的学生

示例:select * from student where id in(8,10,12);

需求;查询编号为6-8的学生

示例; select * from student where id between 6 and 8;

f:空判断

注意:null与" "是不一样的

判断空: isnull

判断非空: is not null

需求:查询没有地址的同窗 示例;select * from student where address is null

g:优先级

小括号,not 比较运算符,逻辑运算符 and比or优先级高

4.聚合

为了快速获得统计的数据,提供了5个聚合函数

a.   count(*)   表示计算总行数,括号中能够写*和字段名;
b.   max(列)   表示求此列的最大值
c.   min(列)   表示求此列的最小值
d.   sum(列)   表示求此列的和
e.   avg(列)   表示求此列的平均值
复制代码

需求:查询学生总数:

示例:select count(*) from student;

需求:查询女生编号的最大值;

示例:select max(id) from student where gender=0;

需求:查询女生编号的最小值;

示例:select min(id) from student where gender=0;

需求:查询全部学生的年龄和

示例:select sum(age) from student;

需求:查询全部学生的年龄平均值

示例:select avg(age) from student;

5 分组

按照字段分组,表示此字段相同的数据会被放到一个集合中,分组后,只能查询出相同的数据列。对于有差别的数据列,没法显示在结果集中,能够对分组后的数据进行统计,作聚合运算

语法:select 列1,列2,聚合...... from 表名 group by 列1,列2,列3,......

需求:查询男女生总数

示例:select gender,count(*) from student group by gender;

python操做mysql

python操做mysql步骤

import pymysql

(1) 连接mysql数据库

db = pymysql.connect(主机名,用户名,密码,数据库名)

(2) 设置字符编码

db.set_charset('utf8')

(3) 建立游标对象

cursor = db.cursor()

(4) 准备sql语句

sql = '...'

(5) 执行sql语句

cursor.execute(sql)

(6) 获取全部结果集

cuesor.fetchall()

(7) 获取一条结果集

cursor.fetchone()

(8) 获取受影响的行数

cursor.rowcount

(9) 关闭数据库连接

db.close()

pymysql的事务处理

默认开启事物处理

须要提交或者回滚

import pymysql
db = pymysql.connect('127.0.0.1','root','123456','hz03')
db.set_charset('utf8')
cursor = db.cursor()
try:
    sql = 'insert into goods values(null,1,"商品名称",12.1)'
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()
print(cursor.rowcount)
db.close()
复制代码

示例: import pymysql

1.链接mysql数据库

db = pymysql.connect('localhost','root','abcdef','test')

2.设置字符编码

db.set_charset('utf8')

3. 建立游标对象

cursor = db.cursor()

4. 准备sql语句

sql = 'select * from hz03'

5. 执行sql语句

cursor.execute(sql)

6. 获取全部结果集

date = cursor.fetchall() print('结果集为',date)

7. 获取受影响的行数

print('受影响的行数为',cursor.rowcount)

8. 关闭数据库链接

db.close()

相关文章
相关标签/搜索