sql数据库知识点

一、 sql简介

数据的存储用open打开文件,用read和write写文件
但是文件不利于扩展。用文件记录交易数据不好统计
所以用数据库来存储,读写速度高,修改查找特别快速。
用数据库可以存上百万条也改的快,将来数据库在程序里时政是怎么样呢?持久化存储(不会因为关机就关了)数据库存储在硬盘上,但是要想把东西存储在硬盘上必须是文件。所以数据库是一种特殊的文件。
我怎么知道数据库的文件在哪里存着呢?

/var/lib/mysql

进入到里边可以看到他以文件的形式存储,所以数据库是一个特殊的文件。那怎么操作?
不可以用特殊vim打开,如果不小心改了,那可能打不开。那怎么用文件呢?可知文件用特殊的手段抽象成一个表。可以查看到类似表的数据结构就可以

python数据库库中把列称之为字段,行称之为记录
id1.2.3.4称之为主键可以唯一标记某个字段就是主键(不重复唯一标记)
mysql是关系型数据库
关系型数据库就是两张表有关联
RDMS是一种程序的简称,后面的阶段会用到xxx?
mongoDB是非关系型数据库
rdms自己改可是怎么自己改?源码又不会,所以做成c/s架构。一套软件叫mysql,mysql’自己生成的文件叫做数据库,浏览器和服务器用gttp协议,将来rdbms与服务器通信是用sql语句,可以操作很多种数据库管理系统。
sql是来操作rebms(关系型管理数据库系统)完成增删改查,我们需要学习语言操作数据库管理系统。sql语句特点不区分大小写,支持很多种数据库。
sql语句主要分为:
DQL:数据查询
DML:数据操作
TPL
DCL
其他会简单应用,MYSQL数据库,sun公司是斯坦福大学网络小组的简称。是在做不出来就买了mysql大力发展,很多人都不用oracle了,oracle后来把mysql买了。oracle收费。mysql是开源而且可移植性的。是有c和c++写的。sql数据库引擎 mylsam和innodb

区别innodb支持事务以及行级锁
行级锁:同一时刻修改一行代码的时候很多程序一起修改,谁先抢到这一行谁上锁。
一般数据库引擎都是innodb

二、 sql的安装

更新源更改,如果不是ubantu那么

apt-get install mysql-server

想要查进程则使用ps命令
ps -aux显示很多
ps -aux |grep “mysql”
搜索东西

类型

python里边没有枚举类型:(把可能出现的结果列举出来)
text类型存超过4000字的文字,适合新闻网站
在数据库中图片和影片这种类型的时候不会存储在数据库。而是存储在服务器的路径,可以使用七牛这个免费内存得软件。图片不允许存储在数据库中

约束

约束:default默认 非空not full 唯一 unique 外键存储别的表的主键。同时外键有一个约束,外键必须在另一个表存在。但是外键不是越多越好。
通过这些保证数据稳定可靠
连接数据库
mysql -uroot -p
退出
exit/quit/
查看所有的数据库表
show databases;
使用datagrip连接数据库步骤
在这里插入图片描述
确定好端口和驱动后测试数据库是否可以成功连接
在这里插入图片描述连接成功后点应用,完成后的界面如上图,右边为console输入命令

sql语句命令

一、简单语句

查看版本

select version();

查看现在时间

select now();

查看所有数据库

show databases ;

创建数据库

create database 数据库名字;

删除数据库

drop database 新的数据库;

注意:在创建数据库的设置新数据库名字的时候如果数据库名字有-的话得在数据库名字中加入两个丿
create database new-04;
查看当前使用的数据库

select database();

切换数据库

use 数据库名字;

查看数据库中所有的表

show tables ;

创建表

create table newtable(
    id int,
    name varchar(30)
);

展示表的结构

desc newtable;

插入语句

insert into students values(0,"郭高高",22,178.4,"女",0);

添加一个字段

alter table students add birthday datetime;

修改一个字段

alter table students modify birthday date;
alter table students change birthday  birth date default 19990108;

删除字段

alter table students drop high;

删除数据库中的数据表名

drop table yyyy;

修改全部修改个和按照id修改

update students set gender=1 ;
update students set gender=1 where id = 12;

查询

select * from students where id=2;
select name as 姓名,gender as 性别 from students where id >3;

物理删除

delete from students;
delete from students where name="坚强生活小韩";

逻辑删除

alter table students add is_delete bit default  1;
update students set is_delete=1 where name="休杰克曼"

`查询的语句里有去重,以下代码加入distinct的时候结果只会有不重复的男女和其他而不是所有结果都有

elect distinct gender from students;

二、查询语句

接下来仔细讲解查询语句
查询分为逻辑查询、模糊查询、范围查询。

1. 模糊查询

like

  • %替换1个或者多个
  • _替换1个

例子:查询姓名中以"小"开始的名字

select name from students where name like "小%"

查询姓名中有小的所有名字

select name from students name like "%小%"

查询有两个字的名字

select name from students name like "__"

查询有三个字的名字

select name from students  name like "___"

查询至少有两个字的名字

select name from students  name like  "__%"

rlike 正则
名字以周开头

select name from students  name rlike "^周.*"

名字以周开头以伦结尾

select name from students  name rlike "^周.*伦$"
2. 范围查询

in
查询年龄分别为19,29,39,49的人

select name from students  age in(18,29,39,49)

not in
查询年龄不为19,29,39,49的人

select name from students  age not in(18,29,39,49)

between and
年龄在19到39之间的信息

select * from students where age between 18 and 39

not between and
年龄不在10到30之间的信息

三、排序

年龄设定从小到大

select * from students where
   ( gender = 2 and age >18) order by age asc ;

从大到小

select * from students where
   (gender = 2 and age >18) order by age desc ;

注意加括号
注意:如果排序因素相同的时候会按照主键大小来排相同因素

四、聚合函数

count

select count(*) as 女性人数 from students where gender=1

max
min
avg平均值
round四舍五入
计算所有人的平均年龄,并且保留两位小数

select round(sun(age)/count(*),2)from studesnts

五、分组

分组和聚合搭配用

select gender count(*) from student group by gender

分组想要看组里都有谁’

select gender,gropu_concat(name) from students group by gender

having:和group搭配使用筛选条件

五、分页

limit 限制查询出来的数据个数

select * from students limit 5

同时limit有两个参数 start 和count
*公式:limit (第n页-1)每个的个数,每页的页数

select * from students limit 0,5  # 意味着从0开始查询一共五个
select * from students limit 5,5 
select * from students limit 10,5
# 以上代码完成分页,一页五个

六、连接查询

这次有跨表操作

select * from  students inner join classes on students.cls_id = classes.id

在这里插入图片描述但是两个表中id有重复,所以去掉第二个表的id 代码如下

selecstudent.* ,classes.name from students inner join classes on students.cls_id = classes.id

结果如下

在这里插入图片描述
和group比起来 limit在最后
内连接

select c.name,s.* from students as s  inner join classes as c  on s.cls_id=c.id order by c.name,s.id;

左连接

select c.name,s.* from students as s  left join  classes as c  on s.cls_id=c.id order by c.name,s.id;

右连接

select c.name,s.* from students as s  right join  classes as c  on s.cls_id=c.id order by c.name,s.id;

七、自关联

自关联一般用在省市县,公司之间人员从属关系

七、子查询

查询身高最高的信息嵌套查询

select * from students where height =(select max(height) from  students);

八、数据库设计

设计数据库有一些规范,为范式
第一范式:不能在拆分
第二范式:必须有主键,主键可以有多个字段组成,字段直接依赖于所有主键
第三范式: 在第二范式的基础上不存在传递依赖
ER模型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值