RDBMS 翻译意思就是关系形的数据库的管理系统:

c/s架构:客户端,服务器模型
B/s架构:浏览器服务器模型

当前主要两种类型的数据库:关系类型数据库、非关系类型数据库,mysql是根据c/s架构的

所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
关系型数据库主要产品:

oracle:在以前的大型项目中使用,银行,电信等项目。
mysql:web时代使用 最广泛的关系型数据库
sql server:在微软的项目中使用
sqlite:轻量级数据库:主要应用在移动平台

什么是数据库:一种特殊文件,通过特殊的方式读写和普通的文件是不一样的,

SQL :SQL是结构化查询语言,是一种用来操作RDEMS的数据库语言,当前关系数据库都支持使用SQL语言进行操作,也就是可以通过SQL操作等等所有关系型数据库

sql语句基本使用
查询语言select
增、删、该:insert delete update
事务处理语言,对事务进行处理,包括begin transaction,commit,rollback
数据控制语言,进行授权与权限回收,如grant,revoke
数据定义语言,进行数据库,表的管理等,如create,drop
指针控制语言,通过控制指针完成表的操作,如declare cursor

linux命令:

开启数据库:service mysql start
停止数据库:service mysql stop
重启数据库: service mysql restart
查看mysql版本号select version();

类型约束:

int,bit 整数
decimal 小数
varchar,char 字符串
date,time,datetime 日期时间
enum枚举类型
日期时间,
decimal 表示浮点数,如decimal(5,2)表示共存5位数,小数点占2位
char表示固定长度字符串
varchar表示可变长度字符串
字符串text表示储存大文本

约束:

主键:primary key :物理上存储的顺序
非空:not null 此字段的值不允许为空
唯一 ubique此字段的值不允许重复
默认 default 当不填写此值会使用默认值,如果填写时以填写为准
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在如果存在则天写成功,如果不存在则填写失败并抛出异常

说明:虽然外键约束可以保证数据的有效性,但是在进行数据crud(增加、修改、删除、查询)时都会降低数据库的性能,所以不推荐使用,那么数据的有效性怎么保证呢:可以在逻辑层进行控制

--数据库:
--查看所有数据库:
show databases;--使用数据库:
use 数据库名字--查看当前数据库:
select database();--创建数据库
create database 数据库名 charset utf8;--删除数据库
drop database 数据库名字--查看数据库里面所有表
show tables;--创建表
create table text(id int, name varchar(30))--设置主键不为空,且主机自动增长auto_increment
create table text(id int primary key not null auto_increment, name varchar(30))--查看表结构
desc 表名--模板:
create table students(id int unsigned not null auto_increment primary key, --取正值unsigned name varchar(30),age tinyint unsigned default 0, # 默认值为0high decimal(5,2), --表示共存5位数,小数点占2位gender enum('男', '女', '中性', '保密') default '保密', --enum枚举只能选择列举出来的四个不选就是默认值cls_id int unsigned
);
--插入数据
insert into students values(0, '老王', 18, 188.88, '男', 0);--查询数据
select * from students;--删除数据库
drop database 数据库名--修改表结构
--修改表--添加字段add
alter table 表名 add 列名 类型
--模板:alter table students add birthday datetime;--修改表--修改字段:重命名change
alter table 表名 change 原名 新名 类型及约束;
--模板:alter table students change birthday birth date default "1990-001-01"--修改表--修改字段--modify
alter table 表名 modify 列名 类型及约束
--模板:alter table students modify birthday date;--修改表--删除字段drop
alter table 表名 drop 列名;
--模板:alter table students drop high;--删除表
drop table 表名;
--模板:drop table students;--查看表源码
show create table students;Mysql存储引擎--MylSAM与lnnoDB

增删改查(curd):

curd的解释:代表创建(Create)、更新(Update)、读取(Retrieve)、和删除(Delete)
在插入数据时枚举里面没有出现的值不能插入,枚举里面的下标是从1开始,插入数据时可以写下标

插入有两种:一种是insert into 表名 values()必须插入全部
第二种:insert into 表名 (需要插入的字段名) values(插入的数据)
一次插入多个:insert into 表名 (需要插入的字段名) values(插入的数据),(需要插入的数据)

修改:update 表名 set 修改字段=值 where 条件;

查询别名显示:
select name as 姓名, age as 年龄 from 表名;

表模板:
create table text1(id int unsigned primary key auto_increment not null,name varchar(30) default '',age tinyint unsigned default 0,height decimal(5,2),gender enum('男','女','中性','保密') default '保密',cls_id int unsigned default 0,is_delete bit default 0)create table class(id int unsigned auto_increment primary key not null,name varchar(30) not null
)insert into text1 values
(0,'孙悟空',18,180.00,2,1,0),
(0,'猪八戒',20,170.00,2,2,1),
(0,'沙和尚',18,140.00,1,1,0),
(0,'唐僧',33,150.00,1,2,1),
(0,'牛魔王',44,160.00,1,2,0),
(0,'白骨精',44,140.00,1,1,1),
(0,'蜘蛛精',33,130.00,4,2,0),
(0,'诸葛亮',66,150.00,3,1,1),
(0,'黄月英',33,170.00,2,2,0),
(0,'小明',12,190.00,4,1,1),
(0,'小红',44,170.00,3,2,0),
(0,'小绿',31,150.00,1,1,1),
(0,'小蓝',63,160.00,2,2,0),
(0,'小花',23,150.00,2,1,1),
(0,'小月月',43,140.00,1,2,0),
(0,'大月月',55,110.00,1,1,1);

查询重复的,使用关键字distinct字段:

select distinct gender from text1;--条件查询:
select * from text1 where age>18;

逻辑运算符:

and or not
与 或 不再not只会对它后面的第一个语句生效,所以要想对后面的语句块生效需要用括号

模糊插选使用 like 正则rlike

select name from text1 where name like "小%"; -- 名字开头,中间%小%
select name from text1 where name like "__" --查询二个字的名字,三个字用三个下划线select name from text1 where name like "__%" --查询至少两个字 --rlike 正则表达式:
select name from text1 where name rlike "^小.*" --以小开头--正则匹配多个字符:
--匹配多个字符的相关格式:
* ----->匹配前一个字符出现0此或者无限次,即可有可无
+ ----->匹配前一个字符出现1次或者无限次,至少一次
? ----->匹配前一个字符出现1次或者0次,即要么有1次要么没有
{m}---->匹配前一个字符出现m次
{m,n}-->匹配前一个字符从m到n次

范围查询:in (18,12,30)不连续 --表示查询年龄为18 12 30

select name from text1 where age in (18,12,30)select name from text1 where age not in(18,20,30)--不在这三个范围内的--between连续表示某一个值到某一个值:
select name from text1 where age between 18 and 33
--不在
select name from text1 where age not between 18 and 33

排序: order by 字段:

--asc 从小到大排序,即升序,
--desc 从大到小,即降序
select * from text1 where (age between 18 and 34) and gender=1 order by age desc;select * from text1 order by age asc,height desc;--按照年龄从小到大,身高从高到矮排序

分页查询:

limit start,count
start开始值 count个数
limit (第n页-1)×每页的个数, 每页的个数,必须写在最后一个

连接查询内链接:inner join – on 意味着条件

--内链接 on 意味着调节
select * from text1 inner join class on text1.cls_id=class.id;
--起别名:
select * from text1 as t1 inner join class as c on t1.cls_id=c.id;-- 左链接,表示已左边的表里面所有的记录为基准表进行查询:left join,要是右边没有数据就用null填充
select * from  students as s left join class as c on s.cla.id = c.id;-- 右链接,反意 right join  on 只需要使用做链接移动一下表位置
--条件判断:在原表里面用where 查出来结果集里面找东西用havig


自关联:

表示一个表里面的一个字段关联另外一个字段

导入sql文件,直接source sql文件名 必须进入当前所在目录在进入数据库

学习建立是数据库拆表:

--创建‘京东’数据库
create database jing_dong charset=utf8;--使用‘京东’数据库
use jing_dong--创建一个商品goods数据表
create table goods(id int unsigned primary key auto_increment not null,name varchar(150) not null,cate_name varchar(40) not null, -- 分类brand_name varchar(40) not null, --品牌price decimal(10,3) not null default 0, --价格is_show bit not null default 1, --是否显示is_saleoff bit not null default 0 --是否卖完
);insert into goods values(0,'r519vc 15.6英寸笔记本','笔记本','华硕','3399',default,default);
insert into goods values(0,'y400n 14.0寸笔记本','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸笔记本','游戏本','雷神','8499',default,default);
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default);
insert into goods values(0,'x240 超级本','超级本','联想','4880',default,default);
insert into goods values(0,'u330p 13.3英寸超级本','超级本','联想','4299',default,default);
insert into goods values(0,'svp13226scb 触控超级本','超级本','索尼','7999',default,default);
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default);
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default);
insert into goods values(0,'ideacentre c340 20英寸一体电脑','台式机','联想','3499',default,default);
insert into goods values(0,'vostro 38000-r1206 台式电脑','台式机','戴尔','2899',default,default);
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default);
insert into goods values(0,'at7-7414lp linux','台式机','宏基','3699',default,default);
insert into goods values(0,'z33.sff f4f06pa工作站','服务器/工作站','戴尔','5388',default,default);select cate_name,group_concat(name) from goods group by cate_name;分组:select name from goods group by name;--求所有商品平均值avg() 保留两位小鼠round(x,2)
select round(avg(price),2) from goods;--显示每种商品的平均价格:
slecet cate_name, avg(price) from goods group by cate_name;--查询每种类型的商品中最贵,最便宜,平均价、数量:
select cate_name, max(price),min(price),avg(price),count(*) from goods group by cate_name;--查询所有价格大于平均价格的商品,并且按价格降序排序:
需要利用子查询:select * from goods where price>(select avg(price) from goods);--查询每种商品中最贵的电脑信息:
select *
from (select cate_name,max(price) as max_price from goods group by cate_name) as g_new
left join goods as g
on g_new.cate_name=g.cate_name and max_price=price;

拆表:

if not exists 表示要是没有这个表就新建:create table if not exists goods_cates(id int unsigned primary key auto_increment,name varchar(40) not null
);--把另外一个表里面的信息查询之后insert into 添加到这个表里面
insert into goods_cates (name) select cate_name from goods group by cate_name;--修改goods表,表goods_cates和goods表对应用id去替换
update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id--给表添加外键:并进行关联
alter table godos add foreign key (cate_id) references goods_cates(id);--外键作用就是当前表和主键表那列进行对比--品牌表:创表和数据一起执行
--注意此时的表里名的字段name 和 需要添加的数据字段必须一样
create table goods_brands(id int unsigned primary key auto_increment,name varchar(40) not null) select brand_name as name from goods group by brand_name;--同步数据:
update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name = b.id;--修改表结构:
alter table goods change brand_name brand_id int unsigned not null;--给brand_id添加外键约束
alter table goods add foreign key (brand_id) references goods_brands(id);--取消外键:外键名称可以先查
alter table goods drop foreign key 外键名称--在实际开发中,很少会使用到外键约束,会极大的降低表更新效率

[python复习8] 数据库mysql操作相关推荐

  1. python 数据导入mysql_用python批量向数据库(MySQL)中导入数据

    用python批量向数据库(MySQL)中导入数据 现有数十万条数据,如下的经过打乱处理过的数据进行导入 数据库内部的表格的数据格式如下与下面的表格结构相同Current database: pyth ...

  2. python批量导入mysql_用python批量向数据库(MySQL)中导入数据

    用python批量向数据库(MySQL)中导入数据 现有数十万条数据,如下的经过打乱处理过的数据进行导入 数据库内部的表格的数据格式如下与下面的表格结构相同 Current database: pyt ...

  3. Python高级:数据库CRUD操作

    文章目录 知识目标 知识点 ①Python数据库接口 ②连接MySQL数据库 ③数据库的操作 知识目标 1.了解PyMySQL 2.掌握PyMySQL连接数据库 3.掌握PyMySQL操作数据库的步骤 ...

  4. python达梦数据库_python 操作达 梦数据库

    python 达梦数据库操作流程 连接数据库 dm.connect( ... ) 获取游标 dm_conn.cursor() 编写SQL语句 sql_str 执行SQL语句 dm_cursor.exe ...

  5. python数据库mysql_python数据库(mysql)操作

    一.软件环境 python环境默认安装了sqlite3,如果需要使用sqlite3我们直接可以在python代码模块的顶部使用import sqlite3来导入该模块.本篇文章我是记录了python操 ...

  6. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  7. python的sqlite数据库_Python操作SQLite数据库

    ### 连接数据库 从2.5版本开始,Python的标准库中就有了一个专门用于SQLite的sqlite3模块.连接SQLite数据库方式如下: ~~~ import sqlite3 as dbapi ...

  8. lua mysql 事务_Lua数据库/MySQL操作

    对于简单的数据操作,我们可以使用文件,但是,有时候这些文件操作效率不高,可扩展性和强大不好.所以我们可能会经常切换到使用数据库. LuaSQL是从Lua一些数据库管理系统的一个简单的接口. LuaSQ ...

  9. tp5 mysql大数据_Tp5入门——数据库(MySQL)操作

    MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之 ...

最新文章

  1. mrp软件Java模拟器下载_mrp模拟器
  2. 洛谷P4609 [FJOI2016]建筑师 【第一类斯特林数】
  3. Oracle Lsnrctl - 关于oracle监听器的命令和解释
  4. 应用营销策略知多少?
  5. socket下server端支持多客户端并发访问简单实现
  6. 能力的齿轮每一次卡不上点的时候都是下一个批评的开始
  7. 标准SQL的update语句三种用法
  8. 小程序背景图满屏_竞赛答题小程序
  9. halcon裁剪图像_Halcon学习之七:改变图像的现实方式和大小
  10. 计算机信息安全技术计算题,计算机信息安全技术练习题.doc
  11. centos光盘修复引导_CentOS 6.5 修复grub引导
  12. laravel中when的使用
  13. 深信服虚拟服务器大融合,从虚拟化向云计算转型 深信服选择了超融合
  14. EL| EL表达式总结
  15. 51c语言延时程序怎么编写,C51中延时程序的编写
  16. 【中创福利】有一种年味叫公司发年货
  17. PD3.1 140W双C快充解决方案
  18. 《富爸爸穷爸爸》读后感
  19. 上架发布应用市场资料准备iOS和Androd
  20. 如何从小白起步成为百万博主|配音运营工具必不可少

热门文章

  1. 山东省淄博市谷歌高清卫星地图下载
  2. Taro小程序跨端开发入门实战
  3. java计算机毕业设计疫情期间高校师生外出请假管理系统录屏源代码+系统+数据库+lw文档
  4. 开源直播课丨大数据集成框架ChunJun类加载器隔离方案探索及实践
  5. matlab怎么根据图像求职,图像处理求职简历模板
  6. iOS好用的第三方框架/插件
  7. 批量抠图,只需要这几行python代码!
  8. 国内十大活跃报表 BI 产品深度对比及点评
  9. ros2 foxy 报错缺少“diagnostic_updater“,By not providing “Finddiagnostic_updater.cmake“ in CMAKE_MODULE_P
  10. 39 Spring Boot Shiro权限管理【从零开始学Spring Boot】