[从零开始学数据库] 基本SQL
注意我们的主机就是我们的Mysql数据库服务器 这里我们可以用多个库
SQL分类(核心是字段的CRUD)
重点是我们的对表中字段的crud(特别是我们的查询 注意多表查询 条件查询 分页查询(插件)等)
javase? mysql
DDL:库 表 字段管理
这里我们看的懂就可以DDL-数据库操作
注意这里我们的[] 就代表是可写可不写
if not exists:存在则创建 不存在则不创建
字符集:utf8mb4 等(通常不写)
DDL-表操作-查询
使用表操作需要先使用use database(库–>表–>字段)
对应我们表的管理操作我们的图形化界面就可以了
DDL-表操作-创建
这里就使用了我们的图形化界面可以一键创建对应的表结构(字段 字段类型 字段的约束等(如唯一 主键 自增等))
我们的表创建出来 怎么和表中的字段交互(SQL+mybatis 对应了我们的entity+vo等 看我们的ssm+项目)
DDL-表操作-数据类型
(看重点)MySQL中的数据类型主要分为三类:数值类型,字符串类型,日期时间类型
数值类型
注意我们的unsigned
常用: tinyint int double decima (unsigned)
(现在一般使用图形化界面)这里我们的double数据类型 需要指定两个参数 xxx double(a,b)
a:小数总位数 b:小数的占用位数
(和我们java中对应 集合只能存包装类 integer Long Double)
字符串类型
char性能高,varchar性能较差(时间换空间)
char:定长 如果我们使用的长度没有达到我们定义的长度 会使用空格补充
varchar:变长 存储多少占用多少空间 但是超过了我们定义的长度会扩容再复制 然后使用的时候会先计算长度
eg:苍穹 定义性别就使用了我们的char存储sex
(这里我们的mybatis就对应了我们的Localdate 和Localdatetime 对应上了mysql中的date和datetime)
看date datetime
DDL-表操作-修改
这里是添加我们的字段
DDL-表操作-删除
使用truncate后,数据库会删除原表并创建一张不含数据的空表
DML(核心 表数据CRUD)
(因为mysql的本质是二维表 这里我们就使用条件精确到单行)DML全称是Data Manipulation Language(数据操作语言), 用来对数据库中表的数据记录进行增删改操作
idea图形化界面 来理解我们的查询!!!(去我们的苍穹来学) 我们就用idea内置的连接数据库的(和dategrip一样)
DML-添加数据
注意这里我们的插入非批量就插入一个
分清楚这里批量和指定
DML-修改数据
注意这里我们的动态SQL本质优化了 这里我们的项目表通常是怎么设计的
DQL(核心)
(注意mybatis有驼峰命名选项)DQL全称是Data Query Language(数据查询语言),用来查询数据库中表的记录
列表:对应多个的意思 如条件列表就是多个条件
熟悉从基础的查询语句到各种细致的查询语句(查询语句的各个部分可以组成一个复杂仔细的查询语句)
DQL-基础查询(别名)
as可省略(通常我们就直接省略 直接起表/字段的别名 然后用.判断对应的属性 这样我们控制台获得的就是别名对应的字段) 我们起别名本质是为了区分
我们给表起了别名就不能使用原先的表名 只能使用别名来访问对应的字段
并且我们配合mybatis是用别名返回封装(如两个表都有name这个字段 我们实体类只有一个name 则可以将一个字段起别名然后封装到实体类对应的同名属性)
不建议使用*****,因为会影响效率,并且不直观
这里我们的去重可以单独对一个字段处理
DQL-条件查询(核心是过滤我们查询的表 成一个符合条件的新表)
看我们的执行顺序理解 我们的查询几次注意我们的条件有很多
这里我们的模糊查询就使用了like+concat %占位符 (%代表匹配任意字符)
这里我们就使用了like模糊查询 concat函数是为了凭借我们的字符这里使用凭借是因为我们要使用#{} 来读我们的属性
between之后的是最小值
注意in()是在列表里面之一都可以
多个条件就用逻辑运算符组装起来
DQL-聚合函数
**聚合函数将一列函数作为一个整体,进行纵向计算(注意我们的聚合函数是作用于我们表中的某一列(字段/字段列表就是作用于我们的全部字段)的)**注:null值不参与所有聚合函数的运算
DQL-分组查询
注意我们先执行where 查询到的再group by 然后再having分组
聚合函数也得等where初步筛选
<font style="color:rgb(0, 0, 0);">GROUP BY</font>
子句会按照指定列的值对数据进行分组。也就是说,该列中值相同的行就会被归为同一组。
(这样就会出现同一组的其他字段值无规律 这样我们通常就还会查询 分组字段配合聚合函数)
这样我们就可以使用聚合函数去配合对应的组处理
注意这里我们查询无关字段 也是只会显示第一个字段值
注意我们的表设计是和我们的业务相关
DQL-排序查询
asc为默认值,可省略
通常我们只依靠单字段排序我们的行
DQL-分页查询
我们实际开发通常都是使用我们的pagehelper插件
DQL-执行顺序(*)
from -> where(>聚合) -> group by -> select -> order by(having) -> limit
(这解释了为什么我们给表起别名 我们select的时候就可以使用别名了 但是我们的字段别名不能在我们的where条件使用)
什么表–>什么条件–>怎么分组–>查什么字段–>怎么排序
DCL
DCL全称Data Control Language(数据控制语言), 用来管理数据库用户,控制数据库的访问权限(我们不用关心)
DCL-用户管理
-- 创建用户 itcast ,只能够在当前主机localhost访问,密码123456
create user 'itcast'@'localhost' identified by '123456';
-- 创建用户 heima ,可以在任意主机访问该数据库,密码123456
create user 'heima'@'%'identified by'123456';
-- 修改用户 heima 的访问密码为 1234
alter user'heima'@'%' identified with mysql_native_password by '1234';