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

操作数据库(DDL)

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

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

此时把密码单独以密文的形式输入,进入mysql的操作环境。
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第1张图片

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

操作数据表

  1. 查看当前数据库中的所有表 show tables;
  2. 创建表 create table 数据表名(字段,类型,约束);
    需求:创建表名为mytable1,字段id为int并且字段name为varchar(30);创建表名为mytable2,指定id为主键并且字段name为varchar(30)
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第7张图片
  3. 查看表的创建语句 show create table 数据表名;
  4. 查看表描述信息 desc 数据表名;
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第8张图片
    练习
    创建students表(id、name、age、high、gender、cls_id);创建classes表(id、name)
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第9张图片
    创建student表时,设置id为int型、主键、非空、自增;age默认为18;性别默认为保密。
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第10张图片
  5. 添加表字段 alter table add 字段 类型;
  6. 修改表字段
alter table 数据表名 modify 字段 类型;            -- 不重命名
alter table 数据表名 change 原字段名 新字段名 类型及约束; -- 将字段重命名
  1. 删除表字段 alter table 数据表名 drop 字段;
    在cmder中运行和SQLyong中运行的结果一样的,SQLyong中运行的代码可以进行保存。
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第11张图片
    注意:代码需要选中,再运行,也可以点击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...);
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第12张图片
  4. 修改数据 update 数据表名 set 字段1=新值,字段2=新值 [where 条件]; 如果后面不加条件,会全部更新
  5. 删除数据 delete from 数据表名 [where 条件],如果不加条件,会删除全部数据。
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第13张图片

查询数据

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

  1. 查询整个表数据 select * from 数据表名;
  2. 查询指定字段数据 select 字段1,字段2 from 数据表名;查询2个以上的字段时,不能加括号,会报错
  3. 查询指定字段数据,并给字段起别名 select 字段1 as 别名,字段2 as 别名 from 数据表名;
  4. 查询指定字段并去重 select distinct 字段1 from 数据表名;
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第14张图片

逻辑运算符

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

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

模糊查询

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

  • % 表示任意多个任意字符
  • _ 表示一个任意字符
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第16张图片

范围查询

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

空判断

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

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

常用的聚合函数

  1. count 总数
  2. max() 最大值
  3. min() 最小值
  4. sum 求和
  5. avg 平均值
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第18张图片

分组

在数据库中,通过group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组。

select 查询内容 from 表名 group by 分组字段;
group_concat();  查看每组的详细信息
with rollup;  计算分组后的总数

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

分组后的筛选

原始数据集 where 条件 group by 分组 having 子句,group by 分组后再进行筛选的时候用having
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第20张图片

排序

order by 字段;  默认升序,从小到大排列
order by asc 字段; 指定字段升序
order by desc 字段; 指定字段降序

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

限制

limit可以限制网页的数据都是分页、分条显示。
limit start,count; ,start 为偏移量,从哪一条开始,默认起始为0;count为条数,一页显示的条数。
limit 不能写数学公式,只能写在末尾。
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第22张图片

表连接

当查询结果的列来源于多张表时,需要将多张表连接程一个大的数据集,再选择合适的列返回mysql,这时就要使用表连接。

内连接

仅选出两张表中互相匹配的记录。如果不指定匹配列,将对两个表进行拼接。
select * from 表1 inner join 表2 on 表1.列 = 表2.列;
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第23张图片

外连接

  • 左连接,以左表为主
    查询的结果为两个表匹配的数据,左表持有的数据,对于右表中不存在的数据,使用null填充。
    select * from 表1 left join 表2 on 表1.列 = 表2.列;
  • 右连接,以右表为主,使用和左连接相同
    查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使,用null填充。
    select * from 表1 right join 表2 on 表1.列 = 表2.列;
    python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第24张图片

子查询

某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这时就要用到子查询。
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第25张图片

更改引擎

不同的引擎支持不同的功能,查看引擎 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='省份';
比如省市区三级联动选择表中,选择省份,在城市里就会显示相应省份的城市,在地区里也会显示相应城市的地区。
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第26张图片
在数据库的provinces表中湖南省的provinceid 为430000,在cities表中长沙市到湘西土家 的城市provinceid 也为430000,做查询的时候首先找到provinces表中湖南省的provinceid,然后根据provinceid 到cities表中去查询。
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第27张图片

外键(foreign key)

多表关联,保持数据的完整和一致性。
MySQL的外键约束是表的一个特殊字段,对于两个具有关联关系的表而言,相关联字段中的主键所在表就是主表(父表),外键所在的表就是从表(子表)。
注意:主键不能包含空值,但允许在外键中出现空值,也就是说只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
student表cls_id和classes表中id看似内容一致,如果没有做任何设置,更改classes表中id的值,student表中的cls_id不会发生变化,需要利用外键建立两个表之间的联系,classes表中的主键id,为student表的外键(cls_id)。一旦两张表建立了联系,可以直接删除子表,但是不能直接删除主表。
创建外键方式 constraint 约束名 foreign key 子表的字段 references 主表名 主键
修改 alter,删除为drop
python-MySQL数据库基础(二)操作数据库、数据表进行增删改查、分组、排序、连接_第28张图片

你可能感兴趣的:(数据库,mysql,sql,python)