python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
操作数据库(DDL)
Cmder是一个软件包它被创建出来用于Windows上替代模拟器的cmder官网https://cmder.net/安装完成后把安装目录下的bin文件夹添加到环境变量里才能正常使用跟安装python类似。
- 连接数据库
mysql -u用户名 -p
enter password密码
此时把密码单独以密文的形式输入进入mysql的操作环境。
- 显示数据库
show databases;
从1可以看出mysql语句的结尾用分号(;)或者(\g)显示出来的数据库跟SQLyong里的一样。
语句的书写不区分大小写show DataBases;
得到的结果也一样用键盘上的上箭头调出上一条语句如果语句结尾没有分号或者\g程序会一直等待用户继续输入直到遇见分号或者\g。 - 显示数据库的版本号
select version();
- 查看当前的时间
select now();
- 退出数据库
exit;quit;
- 创建数据库
在SQLyong的图形界面我们是点右键进行数据库和表的创建。
在mysql中用语句进行创建注意’-'在mysql语句中是个特殊的字符一般不使用如果要用的话在英文状态下用tab和1之间的上波浪线把数据库名字括起来。charset=utf8为指定编码集防止中文出现乱码。
create database + 数据库名;
create database + 数据库名 charset=utf8;
- 显示创建的数据库
show create database + 数据库名(`mytest-01`);
- 查看当前使用的是哪个数据库
select database();
当前没有使用任何数据库所以得到的结果为NULL。
这些命令都是针对数据库的操作没有数据库就无法对数据表操作没有数据表就无法对数据进行操作。 - 使用数据库
use 数据库名;
- 删除数据库
drop database 数据库名;
数据库在删除后再用 show databases();删除的数据库就不再显示了。
注意SQL语句不区分大小写每行必须以英文状态下的分号作为结束当数据库名有特殊字符的时候使用``进行包括。
练习
创建数据库my_test查看已创建的数据库查看当前使用的数据库是否是my_test若不是则切换至my_test数据库删除my_test数据库。
操作数据表
- 查看当前数据库中的所有表
show tables;
- 创建表
create table 数据表名(字段类型约束);
需求创建表名为mytable1字段id为int并且字段name为varchar(30)创建表名为mytable2指定id为主键并且字段name为varchar(30)
- 查看表的创建语句
show create table 数据表名;
- 查看表描述信息
desc 数据表名;
练习
创建students表(id、name、age、high、gender、cls_id)创建classes表(id、name)
创建student表时设置id为int型、主键、非空、自增age默认为18性别默认为保密。
- 添加表字段
alter table add 字段 类型;
- 修改表字段
alter table 数据表名 modify 字段 类型; -- 不重命名
alter table 数据表名 change 原字段名 新字段名 类型及约束; -- 将字段重命名
- 删除表字段
alter table 数据表名 drop 字段;
在cmder中运行和SQLyong中运行的结果一样的SQLyong中运行的代码可以进行保存。
注意代码需要选中再运行也可以点击F9运行运行结果需要在表数据中刷新一下才能显示。
操作数据
增删改数据
- 整行插入
insert into 数据表名 values(值1,值2,值3...);
- 指定列中插入数据
insert into tabname(字段1,字段2...) values(值1,值2...);
- 指定列中插入多条数据
insert into 数据表名(字段1,字段2,...) values(值1,值2...),(值1,值2...);
- 修改数据
update 数据表名 set 字段1=新值,字段2=新值 [where 条件];
如果后面不加条件会全部更新 - 删除数据
delete from 数据表名 [where 条件]
如果不加条件会删除全部数据。
查询数据
查询数据直接在结果中显示就不用再切换到表数据中去刷新查看了。
- 查询整个表数据
select * from 数据表名;
- 查询指定字段数据
select 字段1,字段2 from 数据表名;
查询2个以上的字段时不能加括号会报错 - 查询指定字段数据并给字段起别名
select 字段1 as 别名,字段2 as 别名 from 数据表名;
- 查询指定字段并去重
select distinct 字段1 from 数据表名;
逻辑运算符
运算符 | 描述 |
---|---|
a and b | 当同时满足ab时则为True |
a or b | 当满足a或b其中一个时则为True |
not a | 否定 |
模糊查询
用 like 关键字来进行模糊查询并结合’%‘以及’_'使用
- % 表示任意多个任意字符
- _ 表示一个任意字符
范围查询
关键字 | 描述 |
---|---|
in | 表示在一个非连续的范围内 |
between…and… | 表示在一个连续的范围内 |
空判断
关键字 | 描述 |
---|---|
is null | 判断空 |
is not null | 判断非空 |
常用的聚合函数
- count 总数
- max() 最大值
- min() 最小值
- sum 求和
- avg 平均值
分组
在数据库中通过group by 将查询结果按照1个或多个字段进行分组字段值相同的为一组。
select 查询内容 from 表名 group by 分组字段;
group_concat(); 查看每组的详细信息
with rollup; 计算分组后的总数
分组后的筛选
原始数据集 where 条件 group by 分组 having 子句group by 分组后再进行筛选的时候用having
排序
order by 字段; 默认升序从小到大排列
order by asc 字段; 指定字段升序
order by desc 字段; 指定字段降序
限制
limit可以限制网页的数据都是分页、分条显示。
limit start,count;
start 为偏移量从哪一条开始默认起始为0count为条数一页显示的条数。
limit 不能写数学公式只能写在末尾。
表连接
当查询结果的列来源于多张表时需要将多张表连接程一个大的数据集再选择合适的列返回mysql这时就要使用表连接。
内连接
仅选出两张表中互相匹配的记录。如果不指定匹配列将对两个表进行拼接。
select * from 表1 inner join 表2 on 表1.列 = 表2.列;
外连接
- 左连接以左表为主
查询的结果为两个表匹配的数据左表持有的数据对于右表中不存在的数据使用null填充。
select * from 表1 left join 表2 on 表1.列 = 表2.列;
- 右连接以右表为主使用和左连接相同
查询结果为两个表匹配到的数据右表持有的数据对于左表中不存在的数据使用null填充。
select * from 表1 right join 表2 on 表1.列 = 表2.列;
子查询
某些情况下当进行查询的时候需要的条件是另外一个select语句的结果这时就要用到子查询。
更改引擎
不同的引擎支持不同的功能查看引擎 show engines默认使用的引擎为MyISAM这个引擎是不支持外键的要更改为INNODB找到MySQL的安装路径找到my.ini文件更改default-storage-engine=INNODB然后到data文件夹里删除ib_logfile0 和 ib_logfile1 这两个文件重启MySQL就可以更换引擎了。
自关联
可以简单的理解为自己与自己进行连接查询。如一张areas表里有省市区我们需要通过这一张表查询某省对应的所有市。select * from areas as p inner join areas as c on p.id = c.pid having p.name='省份';
比如省市区三级联动选择表中选择省份在城市里就会显示相应省份的城市在地区里也会显示相应城市的地区。
在数据库的provinces表中湖南省的provinceid 为430000在cities表中长沙市到湘西土家 的城市provinceid 也为430000做查询的时候首先找到provinces表中湖南省的provinceid然后根据provinceid 到cities表中去查询。
外键(foreign key)
多表关联保持数据的完整和一致性。
MySQL的外键约束是表的一个特殊字段对于两个具有关联关系的表而言相关联字段中的主键所在表就是主表(父表)外键所在的表就是从表(子表)。
注意主键不能包含空值但允许在外键中出现空值也就是说只要外键的每个非空值出现在指定的主键中这个外键的内容就是正确的。
student表cls_id和classes表中id看似内容一致如果没有做任何设置更改classes表中id的值student表中的cls_id不会发生变化需要利用外键建立两个表之间的联系classes表中的主键id为student表的外键(cls_id)。一旦两张表建立了联系可以直接删除子表但是不能直接删除主表。
创建外键方式 constraint 约束名 foreign key 子表的字段 references 主表名 主键
修改 alter删除为drop