- 关系型数据库 ( 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