python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接

操作数据库(DDL)

Cmder是一个软件包,它被创建出来用于Windows上替代模拟器的,cmder官网:https://cmder.net/,安装完成后把安装目录下的bin文件夹添加到环境变量里才能正常使用(跟安装python类似)。

  1. 连接数据库
mysql -u用户名 -p
enter password:密码

此时把密码单独以密文的形式输入,进入mysql的操作环境。
在这里插入图片描述

  1. 显示数据库,show databases;,从1可以看出mysql语句的结尾用分号(;)或者(\g),显示出来的数据库跟SQLyong里的一样。
    在这里插入图片描述
    语句的书写不区分大小写,show DataBases;,得到的结果也一样,用键盘上的上箭头调出上一条语句,如果语句结尾没有分号或者\g,程序会一直等待用户继续输入,直到遇见分号或者\g。
  2. 显示数据库的版本号 select version();
  3. 查看当前的时间,select now();
  4. 退出数据库,exit;quit;
    在这里插入图片描述
  5. 创建数据库
    在SQLyong的图形界面,我们是点右键进行数据库和表的创建。
    在mysql中用语句进行创建,注意’-'在mysql语句中是个特殊的字符,一般不使用,如果要用的话,在英文状态下,用tab和1之间的上波浪线把数据库名字括起来。charset=utf8为指定编码集,防止中文出现乱码。
create database + 数据库名;
create database + 数据库名 charset=utf8;
  1. 显示创建的数据库
show create database + 数据库名(`mytest-01`);
  1. 查看当前使用的是哪个数据库select database();
    在这里插入图片描述
    当前没有使用任何数据库,所以得到的结果为NULL。
    这些命令都是针对数据库的操作,没有数据库就无法对数据表操作,没有数据表就无法对数据进行操作。
  2. 使用数据库 use 数据库名;
  3. 删除数据库 drop database 数据库名;
    在这里插入图片描述
    数据库在删除后,再用 show databases();,删除的数据库就不再显示了。
    注意:SQL语句不区分大小写;每行必须以英文状态下的分号作为结束;当数据库名有特殊字符的时候,使用``进行包括。
    练习
    创建数据库:my_test;查看已创建的数据库;查看当前使用的数据库是否是my_test;若不是,则切换至my_test数据库;删除my_test数据库。
    在这里插入图片描述

操作数据表

  1. 查看当前数据库中的所有表 show tables;
  2. 创建表 create table 数据表名(字段,类型,约束);
    需求:创建表名为mytable1,字段id为int并且字段name为varchar(30);创建表名为mytable2,指定id为主键并且字段name为varchar(30)
    在这里插入图片描述
  3. 查看表的创建语句 show create table 数据表名;
  4. 查看表描述信息 desc 数据表名;
    在这里插入图片描述
    练习
    创建students表(id、name、age、high、gender、cls_id);创建classes表(id、name)
    在这里插入图片描述
    创建student表时,设置id为int型、主键、非空、自增;age默认为18;性别默认为保密。
    在这里插入图片描述
  5. 添加表字段 alter table add 字段 类型;
  6. 修改表字段
alter table 数据表名 modify 字段 类型;            -- 不重命名
alter table 数据表名 change 原字段名 新字段名 类型及约束; -- 将字段重命名
  1. 删除表字段 alter table 数据表名 drop 字段;
    在cmder中运行和SQLyong中运行的结果一样的,SQLyong中运行的代码可以进行保存。
    在这里插入图片描述
    注意:代码需要选中,再运行,也可以点击F9运行,运行结果需要在表数据中刷新一下才能显示。

操作数据

增删改数据

  1. 整行插入 insert into 数据表名 values(值1,值2,值3...);
  2. 指定列中插入数据 insert into tabname(字段1,字段2...) values(值1,值2...);
  3. 指定列中插入多条数据 insert into 数据表名(字段1,字段2,...) values(值1,值2...),(值1,值2...);
    在这里插入图片描述
  4. 修改数据 update 数据表名 set 字段1=新值,字段2=新值 [where 条件]; 如果后面不加条件,会全部更新
  5. 删除数据 delete from 数据表名 [where 条件],如果不加条件,会删除全部数据。
    在这里插入图片描述

查询数据

查询数据直接在结果中显示,就不用再切换到表数据中去刷新查看了。

  1. 查询整个表数据 select * from 数据表名;
  2. 查询指定字段数据 select 字段1,字段2 from 数据表名;查询2个以上的字段时,不能加括号,会报错
  3. 查询指定字段数据,并给字段起别名 select 字段1 as 别名,字段2 as 别名 from 数据表名;
  4. 查询指定字段并去重 select distinct 字段1 from 数据表名;
    在这里插入图片描述

逻辑运算符

运算符 描述
a and b 当同时满足a,b时,则为True
a or b 当满足a或b其中一个时,则为True
not a 否定

在这里插入图片描述

模糊查询

用 like 关键字来进行模糊查询,并结合’%‘以及’_'使用

  • % 表示任意多个任意字符
  • _ 表示一个任意字符
    在这里插入图片描述

范围查询

关键字 描述
in 表示在一个非连续的范围内
between…and… 表示在一个连续的范围内

空判断

关键字 描述
is null 判断空
is not null 判断非空

在这里插入图片描述

常用的聚合函数

  1. count 总数
  2. max() 最大值
  3. min() 最小值
  4. sum 求和
  5. 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 为偏移量,从哪一条开始,默认起始为0;count为条数,一页显示的条数。
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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hwwaizs/article/details/128722534