My SQL数据库新手基础笔记(上)
- 前言
- 一、My SQL介绍
- 数据库的优点与特点
- 数据库模型
- 二、数据库
- 创建数据库
- 使用数据库
- 查看数据库
- 删除数据库
- 三、数据类型
- 数据类型分类
- 四、创建表
- 表的创建
- 五、增删改查
- 增
- 删
- 改
- 查
- 六、SQL查询
- 运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- 单表查询语句
- 排序查询
- 聚合查询
- 分组查询
- 分页查询
- 七、MySQL约束
- 主键约束
- 自增约束
- 非空约束
- 外键约束
前言
- 如果真的要说程序员用得最多的语言,那应该是 SQL 吧。
- 不仅是前端,或是后端或多或少都要懂得写一些 SQL。甚至接触过很多业务人员,例如产品经理、运营、财务人员,也懂得写 SQL。
- SQL 作为与数据直接打交道的语言,是与各种前端、后端语言进行交互的“中台”语言。不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地提取自己想要的数据。
- MySQL 由于免费,而且性能强劲,是目前使用最广泛的数据库产品,同时也是入门门槛最低的数据库产品之一,更重要的是,我们可以以 MySQL 为学习原型,以后去适应和掌握其他数据库产品,思想和原理都是互通的,也不会有太大障碍。`
一、My SQL介绍
数据库的优点与特点
优点 | 特点 |
数据库的共享 | 体积小 |
数据类型丰富 | 成本低 |
读写能力强大 | 开放源代码 |
数据的独立性 | 免费 |
数据的集中处理 | |
数据的安全性、可靠性 |
数据库模型
二、数据库
创建数据库
create database 数据库名
使用数据库
use 数据库名
查看数据库
show databases
删除数据库
drop database 数据库名
三、数据类型
数据类型分类
分类 | 例子 | 说明 |
char[n] | 任意字母、符号、数字 | 定长字符串 |
varchar[n] | 任意字母、符号、数字 | 变长字符串 |
text | 备注、说明 | 大文本数据 ~ 64kb |
longtext | 名著 | 大文本数据 ~ 4GB |
int | 100 | 整数型 |
float | 1.797 | 单精度浮点数 |
double | 3.1415925 | 双精度浮点数 |
date | 2017-12-31 | 2008-08-08 |
datetime | 2017-12-31 23:29:59 | 日期和时间 |
timestamp | 1970-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约束
主键约束
方法1、
create table 表名{
字段名 数据类型 primary key
.....
}
方法2、
create 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);