Python学习day01(mysql)
Mysql 一般用来做网站,
Redis 一般用来做缓存
Mongodb 做非关系数据库
SQL : 结构化查询语言,
SQL:语言分为:
DQL: 数据查询语言,用于对数据进行查询,如select
DML: 数据操作语言,对数据进行增加,删除,修改,如insert,update,delete.
TPL:事务处理语言,对事务进行处理,包括begin,transaction,commite,rollback.
DCL:数据控制语言,进行授权与权限回收,如grant,revoke,
DDL:数据定义语言,进行数据库,表的管理等,如create,drop
CCL: 指针控制语言,通过控制指针完成表的操作,如declare cursor
使用数据的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间
常用数据类型如下:
。整数:int,bit
。小数:decimal decimal(5,2)表示有5位其中2位是小数
。字符串:varchar(可变) char
。日期时间:data,time,datetime
。枚举类型(enum)
特别说明如下:
。Decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
。Char表示固定长度的字符串,如char(3)若位数达不到会在末尾补空字符
。字符串text表示储存大文本,当字符大于4000时推荐使用
。对于图片,音频,视频等文件,不存储在数据库中,而是上传到某个服务器,然后在表中存储这个文件的保存路径
约束:
。主键primary key
:物理上存储的顺序
。非空not null:此字段不允许填写空值
。外键foreign key(存储别的表的主键到自己表中就是外键):对关系字段进行约束,
MySQL数据库操作的基本语句;
Show databases; //展示数据库
show create database wuliu //展示创建数据库wuliu的语句
查看当前使用的数据库: select database();
查看表结构: desc +具体表名;
修改表--添加字段: alter table 表名 add 列名类型;
修改表---修改字段:不重命名版
alter table 表名modify 列名类型及约束;
alter table students modify birthday date;
修改表---修改字段:重命名版
alter table 表名change 源表名新名类型及约束;
alter table students change birthday birthdate default “1990-01-01”;
删除表字段:alter
table 表名 drop 列名;
alter table students drop high;
删除表:drop table表名;
查看表创建语句:show create
table students; //就会显示创建表的语句
---修改表内容:
update 表名 set 列1=值1,列2=值2..... where 条件;
---删除
----物理删除
----- delete
from students; ---整个数据表中得所有数据全部删除
---逻辑删除
--- 用一个字段来表示这条信息是否已经不能再使用了
---- 给students表添加一个 is_delete 字段 bit 类型
alter tablestudents add is_delete bit default 0;
数据库语句的查询
---查询
-----查询所有字段
----- select *from 表名;
------ 查询指定字段
----- select 列1,列2,.... from 表名
-----使用 as 给字段起别名
----- select 字段 as 名字,.... from 表名;
-----可以通过as 给表起别名
select s.name ,s.age from students as s;
------消除重复行
------ distinct 字段 select distinct gender from student //把表中相同的数据筛选掉。
----条件查询
--比较运算符
---- select .......from表名where ......
--- >
, <, >=,= !=或者< >
--- or 表示或者
--- not
---不在 18岁以上的女性这个范围内的信息
select *from students where not age >18 and gender =2;
select *from students where not (age >18 and gender =2);
not 在谁前面就否定谁,加括号使后面的先运行。
----模糊查询
----like
---- % 替换1个或者多个
---- _ 替换1个
---- 查询姓名中以“小“开始的名字”
---- rlike 正则
--- 查询以周开始的姓名 select name from students where name relike “^周.*”;
----范围查询
--- in(1,3,8)表示在一个非连续的范围内
-- 查询年龄为18, 34 的姓名
select name,agefrom students where age =18 or age = 34
或者select name age from students where age in (19,34)
---not in 不在什么范围之类
----between and 表示在一个连续的范围内
-----not between and 表示不在一个连续的范围内
----空判断
--- 判断is null
-- 查询身高为空的信息
----判断非空is not null’
---排序
----order by 字段
----asc 从小到大排序,即升序
--- desc 从大到小的排序,即降序
----聚合函数
---总数
---count
---查询男性有多少人,女性有多少人
select count(*)from students where gender=1;
select count(*)
as 男姓人数fromstudents where gender =1;
---最大值
--max
---查询最大的年龄
select max(age)from students;
---最小值
---min
---求和
---sum
select sum(age)from students;
--平均值
---avg
---计算平均值
select avg(age)
from students; 或者selectsum(age)/count(*) from students;
----四舍五入 round(123.23 ,1) 保留1位小数
---- 计算所有人的平均年龄,保留两位小数
select round(sum(age)/count(*),2) from students ;
----分组
----group by
--- 按照性别分组,查询所有的性别
---group_concat(字段名称),显示分组详情
----having
----查询平均年龄超过30岁的性别,以及姓名having avg(age)>30;
----分页
--- limit start,
count (start:开始位置,count:个数)
----限制查询出来的数据个数
select *fromstudents where gender=1 limit 2;
---查询前5个数据
select *fromstudents limit 0,5;
----连接查询
---inner join ... on
----select ...from 表 A inner join表B;
select * from students inner join classes;
--- 查询有能够对应班级的学生以及班级信息
select *fromstudents inner join classes on students.cls_id = classes.id
---- 按照要求显示姓名,班级
selectstudents.name, classes.name from students inner join classes on students.cls_id= classes.id;
--- 给数据表起名字
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
----left join (以左边表里面的所有信息为基准到右边表里面去匹配)没有就补NULL
[if !vml]
[endif]
而内连接是需要两个表都要才取出来
[if !vml]
[endif]
---- 查询每位学生对应的班级信息
selectc.name,s.* from students as s left joinclasses as c on s.cls_id = c.id
注意:外键填另一个表里面的主键。
------内关联
-----用一张表来解决关联问题叫做内关联(后面的字段关联前面的字段)即能不能将两张表合为一张表
[if !vml]
[endif]
数据库设计必须要满足三范式