My SQL数据库总结笔记(上)


前言

  • 如果真的要说程序员用得最多的语言,那应该是 SQL 吧。

  • 不仅是前端,或是后端或多或少都要懂得写一些 SQL。甚至接触过很多业务人员,例如产品经理、运营、财务人员,也懂得写 SQL。

  • SQL 作为与数据直接打交道的语言,是与各种前端、后端语言进行交互的“中台”语言。不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地提取自己想要的数据。

  • MySQL 由于免费,而且性能强劲,是目前使用最广泛的数据库产品,同时也是入门门槛最低的数据库产品之一,更重要的是,我们可以以 MySQL 为学习原型,以后去适应和掌握其他数据库产品,思想和原理都是互通的,也不会有太大障碍。`


一、My SQL介绍

数据库的优点与特点

优点特点
数据库的共享体积小
数据类型丰富成本低
读写能力强大开放源代码
数据的独立性免费
数据的集中处理
数据的安全性、可靠性

数据库模型

二、数据库

创建数据库

create database 数据库名

使用数据库

use 数据库名

查看数据库

show databases

删除数据库

drop database 数据库名

三、数据类型

数据类型分类

分类例子说明
char[n]任意字母、符号、数字定长字符串
varchar[n]任意字母、符号、数字变长字符串
text备注、说明大文本数据 ~ 64kb
longtext名著大文本数据 ~ 4GB
int100整数型
float1.797单精度浮点数
double3.1415925双精度浮点数
date2017-12-312008-08-08
datetime2017-12-31 23:29:59日期和时间
timestamp1970-01-01 00:00:00/2038日期和时间值、时间戳
blob图片二进制形式的长文本数据

四、创建表

表的创建

create table 表名{
  字段名1  数据类型,
  ....
  定义主键
  primary key(字段名)
}

五、增删改查

insert into 表名 values
(内容1),
(内容2)
#添加多条内容中间以 逗号(,)隔开

delete from 表名
#删除所有
#如需要单条删除需where后面加条件

update 表名 set 字段名=修改内容 where 条件

select * from 表名
//查询所有
//如需要单条查询需where后面加条件

六、SQL查询

运算符

算术运算符

算术运算符说明
+加法运算符
-减法运算符
*乘法运算符
/或DIV除法运算符,返回商
%或MOD求余运算符,返回余数

比较运算符

比较运算符说明
=等于
< 和 <=小于或小于等于
> 和 >=大于或大于等于
<> 和 !=不等于
IS NULL判断一个值是否为null
IS NOT NULL判断两个值是否不为null
LEACT当有两个或多个参数时返回最小值
GREATEST当有两个或多个参数时返回最大值
BETWEENAND判断一个值是否落在两个值中间
IN判断一个值是IN列表中的任意一个值
NOT IN判断一个值不是IN列表中的任意一个值
LIKE通配符匹配
REGEXP正则表达式匹配

逻辑运算符

逻辑运算符说明
NOT或!逻辑非
AND或&&逻辑与
OR逻辑或
XOR逻辑异步

单表查询语句

排序查询

  • 如果我们需要对读取的数据进行排序,可以使用order by语句进行排序

使用如下

select * from 表名 order by 字段名 [asc | desc]
#asc 代表升序,不屑默认为asc升序
#desc 代表降序

聚合查询

聚合函数作用
count( )统计指定列不为空的记录行数
sum( )计算指定列数值相加的和
max( )获取指定列数值的最大值
min( )获取指定列数值的最小值
avg( )获取指定列数值的平均值
#查询所有员工工资总和
select sum(字段名) as 工资总和 from 表名1,表名2 where 外键=主键
#查询总行数
select count(*) from 表名1,表名2 where 外键=主键
#查询工资平均值
select avg(字段名) from 表名1,表名2 where 外键=主键

分组查询

分组查询是指使用group by对查询信息进行分组

  • 分组后的条件筛选使用 having
  • 分组之后对统计结果进行筛选必须使用having,不能使用where
  • where子句用来筛选from子句中指定的操作所产生的行
  • group by 子句用来分组where子句的输出
  • having 子句用来从分组的结果中筛选行
select * from 表名 group by 分组字段 having 分组条件

分页查询

  • 分页查询在项目中常见,由于数量很大,且显示屏长度有限,因此对数据采用分页显示方式
select * from 表名 limit n
select * from 表名 limit m,n
# m 整数,表示从第几条索引开始
# n 整数,查询多少条数据

七、MySQL约束

主键约束

方法1create table 表名{
   字段名  数据类型  primary key
   .....
}
方法2create table 表名{
   字段名  数据类型
   .....
   primary key(字段名)
}

自增约束

自增约束:auto_increment
特点:

  • 默认情况下,自增约束初始值为1,每增加一条记录,字段值自动加1
  • 一个表中只能有一个字段使用自增约束,且该字段必须有唯一索引
  • 自增约束的字段必须具备not null属性
  • 自增约束的字段只能是整数类型
  • 最大值受数据类型约束
create table 表名{
	字段名  数据类型 auto_increment
	....
	定义主键 
}

非空约束

  • 使用非空约束 NOT NULL 表示该字段不能为空,通常设置在主键上
create table 表名{
	字段名 数据类型 NOT NULL 
	....
	定义主键
}

外键约束

⭐定义一个外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键
    的每个非空值出现在指定的主键中,这 个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或 > 候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
方式一:在创建表时设置外键约束
在 create table 语句中,通过 foreign key 关键字来指定外键,具体的语法格式如下:
[constraint <外键名>] foreign key 字段名 [,字段名2,…] references <主表名> 主键列1 [,主键列2,…]
实现:
-- 创建部门表
create table if not exists dept2(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);
create table if not exists emp(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20),  -- 员工所属部门
  constraint emp_fk foreign key (dept_id) references dept (deptno)- 外键约束
);
 方式2-在创建表时设置外键约束
外键约束也可以在修改表时添加,但是添加外键约束的前提是:
从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。语法如下:
alter table <数据表名> add constraint <外键名> foreign key(<列名>) references 
<主表名> (<列名>);
实现:
-- 创建部门表
create table if not exists dept2(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);
-- 创建员工表
create table if not exists emp2(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20)  -- 员工所属部门
 
);
-- 创建外键约束
alter table emp2 add constraint dept_id_fk foreign key(dept_id) references dept2 (deptno);
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋风.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值