• 关系型数据库 ( SQL )

代表:MySQL , Oracle , SQL Server , SQLite , DB2 , …
关系型数据库通过主外键关联来建立表与表之间的关系

  • 非关系型数据库 ( NOSQL )

代表:Redis , MongoDB , …
非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

常用可视化工具

navicat 破解版 ,百度自行下载即可

建库/表语句

1、创建数据库 : create database [if not exists] 数据库名;
2、删除数据库 : drop database [if exists] 数据库名;
3、查看数据库 : show databases;
4、使用数据库 : use 数据库名;

例子
CREATE TABLE `allure_jenkins_job` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NULL DEFAULT NULL,
  `job_name` varchar(50) NOT NULL,
	`job_number` int(10) NOT NULL,
  `retries_run` int(10) NOT NULL DEFAULT '0',
  `passed` tinyint(4) NOT NULL DEFAULT '0',
  `failed` int(10) NOT NULL DEFAULT '0',
	`retries` int(10) NOT NULL DEFAULT '0',
  `execute_time` varchar(50) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_ucrt` (`job_name`,`job_number`)
)
数据值类型

数据类型

类型

说明

长度

数值

tinyint

非常小的数据

1字节

smallint

较小的数据

2字节

mediumint

中等大小的数据

3字节

int

标准整数

4字节

bigint

较大的整数

8字节

float

单精度浮点数

4字节

double

双精度浮点数

8字节

decimal

字符串形式的浮点数

字符串

char[(M)]

固定长字符串,检索快但费空间,0<=M<=255

M字符

varchar[(M)]

可变字符串,0<=M<=65535

变长度

tinytext

微型文本串

2^8-1字节

text

文本串

2^16-1字节

日期和时间型数值类型

DATE

YYYY-MM-DD,日期格式

1000-01-01~9999-12-31

TIME

Hh:mm:ss,时间格式

-838:59:59~838:59:59

DATETIME

YY-MM-DD hh:mm:ss

1000-01-01 00:00:00至9999-12-31 23:59:59

TIMESTAMP

YYYYMMDDhhmmss格式表示的时间戳

197010101000000~2037年的某个时刻

YEAR

YYYY格式的年份值

1901~2155

其他类型

NULL

理解为 “没有值” 或 “未知值” ,默认为NULL , 即没有插入该列的数值

UnSigned

无符号的,声明该数据列不允许负数

ZEROFILL

0填充的,不足位数的用0来填充 , 如int(3),5则为005

Auto_InCrement

1、自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)2、通常用于设置主键 , 且为整数类型3、可定义起始值和步长4、当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表5、SET @@auto_increment_increment=5;影响所有使用自增的表(全局)

NOT NULL

如果设置为NOT NULL , 则该列必须有值

DEFAULT1、

默认的2、用于设置默认值3、例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值

主外键

主键约束;

primary key

外键约束:

foreign key

非空约束:

not null

默认约束:

default

唯一约束:

unique

检查约束:

check

枚举约束:

enum

sql 增/删/改/查

# 多表查询
	内连  : select查询内容
      		from A inner join B on A.主键=B.外键
     		where查询条件
	嵌套  : select name,age from person 
            where age > 
  (
        	select age from person 
        	where name = '孙权'
    )  
# 字段去重 distinct
select distinct * from table
select distinct c_name,c_year,c_month from table
# 分组
group by  对数据分组(分组字段) 可用来做指定字段去重
SELECT * FROM t_wishingwall_xinnianqiyuan GROUP BY to_user_id
# having
having  对数据二次分组(分组后条件)  聚合函数
# order by 排序
order by    order by desc
# limit 截取
limit 截取某段  例:截取第五到十行记录 limit(4,6)

insert   into  表名  字段名 values(要插入的数据)
Delete from + 表名:删除表
Update  表名  set 要修改的字段名=修改值

# 删除表命令:
drop table 删除表数据及表结构
truncate table 仅删除表数据
注意:
不能与where一起使用。
truncate删除数据后是不可以rollback的=
truncate删除数据后会重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的ID数。
truncate删除数据后不写服务器log,整体删除速度快。
truncate删除数据后不激活trigger(触发器)。

mysql常用函数

  • ABS(x) 返回x的绝对值
  • RAND()返回0-1的随机数
  • PI()返回圆周率
  • TRUNCATE(x,y)返回数值x保留小数点后y位值 ,不会四舍五入
  • ROUND(x)返回距离x最近的整数,可以理解为约等于
  • ROUND(x,y)返回数值x保留小数点后y位值 ,会四舍五入
    【数学运算函数】


    【字符串函数】


    【日期时间函数】


python pymysql示例

# 封装
import pymysql

from common.LoggerHandler import logger


def mysql(sql):
    try:
        db = pymysql.connect(host='******', port=****, user='root',
                             password='******', charset='utf8')
    except Exception as e:
        logger.error(f'mysql connect fail {e}')
    else:
        cursor = db.cursor()
        if 'select' in sql:
            try:
                cursor.execute(sql)
            except Exception as e:
                logger.error(f'执行查询语句ERROR{e, sql}')
            res = cursor.fetchall()
            cursor.close()
            db.close()
            return res

        else:
            try:
                cursor.execute(sql)
            except Exception as e:
                logger.error(f'执行增/删/改ERROR{e, sql}')
                db.rollback()
            db.commit()
            cursor.close()
            db.close()
# 调用实例
# insert
sql = "INSERT INTO `auto_test`.`allure_jenkins_job`(`created_at`, `job_name`, `job_number`, `retries_run`, `passed`, `failed`, `retries`, `execute_time`) " \
          "VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")"\
          % (job_time, job_name, job_number, retries_run, passed, failed, launch_retries, execute_time)

# update
update_sql = "UPDATE `auto_test`.`day_allure_job` " \
                     "SET `created_at` = \"%s\", `job_name` = \"%s\", `day_job_count` = \"%s\", `day_retries_run` = \"%s\", `day_passed_count` = \"%s\", `day_failed_count` = \"%s\", `day_retries_count` = \"%s\" " \
                     "WHERE `day_time` = \"%s\"" \
                     % (job_time, 'skr_autotest', int(day_job_count), int(day_retries_run), int(day_passed_count), int(day_failed_count),
                        int(day_retries_count), str(day_time))

# select
select_sql = "select COUNT(*),SUM(retries_run),SUM(passed),SUM(failed),SUM(retries) FROM `auto_test`.`allure_jenkins_job` WHERE created_at BETWEEN \"%s\" AND \"%s\"" % (start_time, end_time)
select_sql1 = "select * FROM `auto_test`.`day_allure_job` WHERE day_time = \"%s\"" % (str(day_time))

# delete