python每日笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: python每日笔记

今天主要学习的内容是数据库的相关操作,知识很零散,命令很多,大家多练习,希望都记下来。


知识梳理


数据表的相关操作:

字段名 f_xx

字段类型  ty_xx

使用数据库;

   use db_xxxx;

查看当前数据库中的所有数据库;

   show tables;

创建数据表;

   create table t_xxx(字段名 字段类型,f_xx ty_xx, ......);

查看数据表创建信息;

   show create table t_xxx;

查看表的结构:

   desc t_xxx;

改-为表添加新字段:

   alter table t_xx add new_f_xx ty_xx;

改 - 修改字段类型:

  alter table t_xx modify f_xx new_ty_xx;

改 - 修改字段名:

  alter table t_xx change old_f_xx new_f_xx ty_xx;

删除字段:

   alter table t_xx drop f_xx;

删除表:

   drop table t_xx;


数据操作:

插入单条数据1

insert into t_stu value(1,'tom',12,'boy',180);

插入单条数据2

insert into t_stu values(2,'jack',13,'boy',190);

插入指定字段数据

insert into t_stu (name,gender) value('rose','girl');

插入多条数据

insert into t_stu (name,age,gender) value('tony',18,'boy'),('alice',20,2),('alex',13,1);

insert into t_stu (name,age,gender) values('tony',18,'boy'),('alice',20,2),('alex',13,1);

更新

update t_stu set height = 123.6789;

update t_stu set age = 25 where name = 'rose';

删除数据

语法1:truncate 表名

语法2:delete from 表名 [条件]

导入导出数据库:

<  输入重定向  > 输出重定向

导出整个数据库

  • 语法:mysqldump –uroot –p(注意不要输入密码) 要导出的数据库名 要导出的数据表 ... > 目标文件.sql

mysqldump -uroot -p School > school_bak.sql

导入整个数据库

  • 语法:mysql -uroot -p 数据库名 < 要导入的文件.sql

mysql -uroot -p sch < school_bak.sql


注意点:

  1. 在导入数据库的时候,要注意数据库文件xx.sql存放位置,放到家目录用户目录下面。然后导入的时候是退出数据库在外面直接进行操作的。
  2. 导入数据库的时候先创建一个空数据库。

约束:

约束就是一种限制和条件,为了让数据准确。

数据完整性:

域完整性:取值范围

实体完整性:记录

参考完整性:引用完整性,多个表,一个表参考另一个表去看。

数据常见问题:

  • 数据冗余  
  • 失去数据完整性
  • 数据缺少唯一标示
  • 失去实体完整性
  • 失去域完整性
  • 失去引用完整性

数据库常用约束:

  • 主键约束  
  • 唯一性,非空性,主键在一张表中只能有一个
  • create table tpk(id int(5) primary key,name char(10));
  • 数据库在屏幕上都是以表格的形式显示,但是实际上就不一定了
  • insert into tpk values(1,'tom');
  • id的值不允许重复,也不允许为空,必须传入数据
  • 自动增长作用      
  • 只能用来修饰整型字段,一般和主键配合使用。编号增长时,从1开始,如果插入数据为0时,那么就会进行自动增长。
  • auto_increment
  • show create table tai; 查看表信息,里面的auto_increment记录了自动增长的下一个值,如果是0,那么就按这个值进行填充
  • 自动增长相当于缺省参数,你给了id就按你给的id显示,如果不给,就自动增长。
  • 本来是1,2自动增站的,如果你给了10,那么auto_increment记录的就是11。从11开始往后增长,前面的3,4这些还可以手动插入。自动增长的时候,按最大的索引来记录下一个值。
  • delete不能删除 alter可以删除。
  • 唯一性约束
  • unique
  • 保证该字段中的数据唯一
  • create table tui(id int primary key,name char(10) unique);
  • 主键显示PRI,唯一性显示UNI
  • 非空约束
  • not null
  • 修饰后,字段不允许有空值  NULL
  • create table tnn (id int primary key ,name char(10) not null);
  • 默认值约束
  • default
  • 如果在给字段插入数据时,如果没有给定数据,那么就是用默认值,如果给了那就用给定的数据
  • create table tdf (id int, name char(10) default 'No Name');
  • 外键约束
  • foreign key(字段名) references 表名
  • 也叫引用约束,参考约束
  • 需要有多张表来进行参考
  • create table tclass (id int primary key,name char(10));
  • 参照关联的表
  • create table student(id int primary key, name char(10), class_id int, foreign key(class_id) references tclass(id));
  • 在数据删除时,被引用的数据表中的数据,不能随意删除。
  • 先删除引用的,才能删除被引用的。
  • 解决引用完整性的问题


单表操作:

导入数据库的两种方式;

一:

1.将数据库.sql文件放到一个目录下,然后cd切换到该目录下,然后连接数据库MySQL,

2.创建一个新的数据库

3.use 创建的新数据库

4.source 文件路径/数据库名

二:

看前面



查询基本操作:

as加别名:可以写as,也可以直接不写,加一个空格:

select c_id as 编号, c_name as 姓名, c_gender 性别, c_address 地址 from t_student;

消除重复数据 distinct了解一下,不怎么用

单字段:

select distinct c_address 地区分布 from t_student;

多字段:

select distinct c_gender,c_address from t_student;

两个算一个整体,然后如果两个都一样才算重复的,才删除。


指定查询条件和关系运算符

select c_id,c_name,c_gender,c_address from t_student where c_id = 5;

先执行from,再执行where,最后是select

select c_id from t_student where c_id != 8;关系运算符放的位置注意一下


逻辑运算符

select c_id ,c_gender,c_name from t_student where c_id <10 and c_gender = '女';

select c_id ,c_gender,c_name from t_student where c_id <10 or c_gender = '女';

select c_id ,c_gender,c_name from t_student where not (c_id <10 or c_gender = '女');

select c_id ,c_gender,c_name from t_student where not c_id <10 or c_gender = '女';


模糊查询:

like

%表示任意多个字符

_表示任意一个字符

select c_id,c_name,c_gender from t_student where c_name like '孙%';

select c_id,c_name,c_gender from t_student where c_name like '%小%';

select c_id,c_name,c_gender from t_student where c_name like '孙__';

select c_name,c_phone from t_student where c_gender = 2 and c_phone like '138%';

select c_name,c_phone from t_student where c_gender = 2;


范围查询

非连续范围 in

select c_name ,c_id from t_student where c_id in (1,3,5,7,9);

可以是数字,可以是汉字的字符串

SQL注入:

select c_name ,c_id from t_student where c_id = 1 or c_id = 3 or c_id =5 or 7 or 9;  它的意思是将7和9认为是真,就是将所有的东西都拖出来,叫做“拖库”

连续范围

select c_id, c_name,c_age from t_student where c_age between 18 and 20;是一个闭区间

between只能在数字上使用。


空判断(很重要)

下面这些都不可以:

mysql> select * from t_student where c_age = 0;
Empty set (0.00 sec)
mysql> select * from t_student where c_age = '';
Empty set (0.00 sec)
mysql> select * from t_student where c_age = NULL;
Empty set (0.00 sec)
mysql> select * from t_student where c_age = 'NULL';
Empty set, 1 warning (0.00 sec)
select * from t_student where not c_age is null;与下面的is not null相比较效率低

下面的很重要

select * from t_student where c_age is null;
select * from t_student where c_age is not null;


查询结果排序

null比零还小

select * from t_student order by c_age;

排序是一个在查询数据时非常重要的操作。比如买东西时,想按一定的条件进行有序显示。就需要使用排序

asc(默认) 升序 / desc 降序 语法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]

  1. 单字段排序

select * from t_student orderby c_age;

select * from t_student orderby c_age asc;

  1. 默认使用就是升序排序,可以不指定 asc ,效果相同。
  2. 多字段排序 可以对多个字段进行排序,只需将字段的排序方式依次写在 order by 后面即可,字段间使用逗号分隔

select * from t_student orderby c_age desc,c_id asc;

多个字段间用逗号隔开,每个后面都要跟着asc或者desc,

先按第一个排序,没有结果再看第二个,依次往下。

查询所有性别为女的数据按年龄升序排序

select * from t_student where c_gender = 2 order by c_age asc;

先筛选再排序



分页查询

select 字段名 from 表名 limit start=0,count =*;
• 从start开始,获取count条数据
• start默认值为0
• 需要获取数据的前n条的时候可以直接写 limit n
start是起始索引,从0开始,可以省略(只有从0开始时)
count是显示条数,一次查询时,条数不可变。
计算当前页的起始索引(current_page - 1)*count
查询性别为女的年龄最小的三个人
select * from t_student where c_gender = 2 order by c_age asc limit 3;分页放在最后。


聚合函数

sum()
avg()
count()   用*  ,其他的指定字段
min()
max()
select sum(c_age),avg(c_age),max(c_age),min(c_age),count(c_age) from t_student;  这里面不包括NULL的数据
select sum(c_age),avg(c_age),max(c_age),min(c_age),count(*) from t_student;     *代表所有的数据



分组

select c_gender,c_address from t_student group by c_gender,c_address;
select c_gender from t_student group by c_gender;
分组的时候,后面的group跟着的字段名是啥,前面select就是啥
分组可以跟着聚合函数来使用
查看分组内的数据 group_concat(要查看的字段)
select c_gender,c_address,group_concat(c_age) from t_student group by c_gender,c_address;
select c_gender,c_address,group_concat(c_age) from t_student where c_gender = 2 group by c_gender,c_address;
select c_gender,c_address,group_concat(c_age) from t_student group by c_gender,c_address having c_gender = 2;找到全是女的

先where筛选,在分组,然后对分组之后的数据进行操作

where读取数据源,在from后用

having在分组中用

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
21 3
|
1月前
|
存储 开发工具 Python
【Python项目】外星人入侵项目笔记
【Python项目】外星人入侵项目笔记
38 3
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
42 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
13 0
|
1月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
10 0
|
1月前
|
并行计算 Python
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
135 0
|
1月前
|
索引 Python
【免费分享编程笔记】Python学习笔记(一)
【免费分享编程笔记】Python学习笔记(一)
37 0
|
3月前
|
Python
【python】】Python 的 queue 模块使用笔记
【python】】Python 的 queue 模块使用笔记
41 0
|
3月前
|
Python
Python笔记9 类
本文是作者的Python复习笔记第九篇,深入探讨了Python中的类和面向对象编程。文中详细解释了如何创建类、实例化对象、定义和使用类方法,以及类的继承、重写方法和嵌套类的使用。此外,还讨论了类模块的导入和导出,包括处理类之间的依赖关系。通过示例代码,文章展示了类在Python编程中的应用和重要性。
27 0