MYSQL重点知识点梳理

Posted by Futari on 2021-10-31
Estimated Reading Time 8 Minutes
Words 2.3k In Total
Viewed Times

MYSQL重点知识点梳理

distinct:对查询结果进行去重,写在字段前面,mysql默认不区分大小写

order by:按某字段进行排序,asc为顺序,多个字段或多个顺序规则,使用逗号分隔,当然先按后面条件的前面的顺序进行排序

where查询要确定要查询条件的类型。如果是数字可以直接输,如果是字符串需要加引号

对查询的字段锁定(规定)在某些数据的话,使用in关键字,当用到多个字段属于并列关系时用逗号直接分割,多个条件同时满足时使用and来同时满足

大于:>= 小于:<=

模糊查询:

like: %代表任意长度的通配符,注意不是代表所有),NOT like代表字符串不匹配时则满足当前条件,_下划线代表单个字符,这个字符的长度不能为0,like默认匹配不区分大小写,如果要精确区分的话在匹配字符串前加 binary字段

mysql当sum与groupby联合使用时,sum计算的是各个分组的各自的sum

select from 表名 join 表名 on 条件,注意join和on是两个不同的运算符,只不过可以放一起使用,join和on的运行级别在from之后where之前

CONCAT 函数用于将两个字符串连接为一个字符串

upper将小写转换为大写,lower将大写转换为小写,mysql没有乘法,可以通过对数相加的方式实现乘法,然后用exp去log,默认log的底是e,将数直接用log函数包裹起来就相当于变成对数了。

union:关键字可以将查询结果相加(mysql不区分大小写)

(主要用于将两张不同的表的结果进行拼接,当然column前提得一致)

案例;找出工作岗位是salesman和manager的员工

方法一:select ename,job from emp where job = ‘manager’ or job = ‘salesman’;

+————+—————+
| ename | job |
+————+—————+
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| JONES | MANAGER |
| MARTIN | SALESMAN |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| TURNER | SALESMAN |
+————+—————+
7 rows in set (0.00 sec)

方法二(使用in或or):select ename,job from emp where job in (‘manager’,’salesman’);

select ename,job from emp wher job = ‘manager’ or job = ‘sqlesman’(可以设置取不同字段,区别于in)

方法三(union将查询结果进行相加):select ename,job from emp where job = “manager”

union

select ename,job from emp where job = ‘salesman’;


limit关键字:进行分页查询,去结果集中的部分数据 语法:limit 起始位置 取几个(长度)

注意limit是mysql中特有的关键字

示例:select ename,sal from emp order by sal desc; (降序)

select ename,sal from emp order by sal desc limit 0,5;

select ename,sal from emp order by sal desc limit 5;(不写就是默认从零开始取)

注意:limit关键字的执行顺序优先级最低

执行顺序:select 5进行查询数据结果

from 1先从某一张表中取数据

where 2要取哪一个字段(在分组前进行过滤过滤)

group by 3先进行分组

having 4 使用having在分组后进行过滤(having后面可以使用聚合函数(sql基本函数count等))

order by 6对查询出的数据进行排序

limit 7最后对数据进行截取

从上面可以看出SQL的执行顺序和书写顺序大概是一致的,也就是除了select基本都符合顺序。

通用的标准分页sql:

每页显示pagesize条记录,则第pageno页为:(pageno-1)*pagesize,pagesize

——————————————————————————————————————————————————

创建表

语法格式:create table 表名(

​ 字段名 数据类型,

​ …………………….

);

数据类型:

varchar:根据存入的数据动态的分配空间

而char(x)是指定填入的数据的长度为x,超过则报错,但是char的处理效率极高,所以确定了长度的数据就用char,注意char在c语言中是占一个字节的,Java中是unicode也就是utf-16,是占两个字节。

date:对应java中的java.sql.date

BLOB:二进制大对象,类似于java.object,使用io流进行存取

CLOB:字符大对象(用的不多,图片资源一般不放数据库里)

表在数据库中:一般以t或者tbl开头

学生表:

create table t_student(

​ no bigint,

​ name varchar(255),

​ sex char(1),

​ classno varchar(255),

​ birth char(10)

);

表的复制:

create table 表名 as select语句; 将一张表的查询结果as为一张新的表

更新语句:update

语法格式:update 表名 set 字段名1 = 值1,字段名2 = 值2 where 条件;(根据条件设置(更新)字段的值)

ps:如果没有条件约束的话,自动会把整张表的字段全部修改为值x

删除语句:delete

delete from 表名 约束条件;(同理无约束条件默认删除整张表的所有数据(列级删除))

表级删除(表被截断或清空):truncate table 表名;

删除整个表(表头以至整个被删除):drop命令

drop table if exists t_student;

如果 表名 存在的话 那么删除

先删除,后创建(先删除子目录后删除父目录)

约束:

非空约束:not null

唯一约束:unique 唯一性约束可以为null,注意null !=null,unique是列级约束,写在表结构语句上(直接写在字段后面或者在所有字段后面进行指定哪些字段)

主键约束:primary key(非空且不唯一 = not null + unique)列级约束

外键约束:foreign key

检查约束:check(mysql不支持该约束,oracle有)

主键术语:

主键约束:primary key

主键值:主键字段中的每一个值都是主键值

主键字段:被添加主键的字段

特性:只要主键的值不一样,那么这就是完全不同的两条语句

主键分类:
单一主键

复合主键:primary key(字段一,字段二)(复合的意思是只有两个全部想通过才算是同一个,符合的部分只要有一个不同,那么就是不同的主键)(复合主键违背三范式)

自然主键:一般把从1开始的自然数作为主键(最常用)

业务主键:把某个唯一的数据字段作为主键,比如公民的身份证号,不推荐,因为作为主键后续修改很麻烦

注意一张表的主键约束只能有一个(重点)

主键可以设置自增:auto_increment(推荐)

外键:foreign key

外键中引用的字段所在的表是子表,而被引用的表是父表(一定注意在操作子父表的时候要注意操作的顺序,不能直接操作)

外键语法格式:

create table 表一(

foreign key (字段名) reference 表二(字段名)

); reference:引用

父表的被引用的字段值必须包括子表引用的所有字段值

注意注意:外键值可以为null,被引用的字段必须至少具有unique约束,不然在连接时发挥不了外键的连接作用

mysql default charset = utf8

几种常见的存储引擎(了解):

innodb:支持事务,并且保证数据安全性(默认engine)

myisam:常用的engine,速度中等,但是不支持事务和其他功能

memory:数据存储在内存中,所以易丢失但是速度最快,不支持事务

事务:(注意只有DML才有事务这一概念,因为只有DML才操作了数据)

MYSQl中的事务是自动提交的,如果下个要手动开启一段事务,需要输入:start transaction

后续只有输入了commit才标志了一段事务的结束

事务的四大特性:ACID

原子性:事务是最小的工作单元

一致性:事务必须保证多条DML语句同时成功或者失败(必须)

隔离性:这里最重要,分为四个等级

持久性:持久化存储(到硬盘),这里才算是事务的结束

隔离等级:(对于一个进行中的事务,同一数据库开启其他事务修改数据对前者的影响)

读未提交: read uncommited 隔离性最低

其他线程未提交就可以看见数据的修改

读已提交:read commited

其他事务提交之后才可以看得见

可重复读:repeatable read

读到的数据不受其他新开期的事务对原本事务数据的影响

序列化读/串行化读:

新事务的开启必须没有旧事务的存在,否则新事务无法进行操作

但是缺点是效率低,因为要排队

设置全局的隔离等级: set global transaction isolation level 隔离等级

事务的两个方法:commit和rollback

索引:

explain写在语句前,显示该语句的执行计划

创建索引(对象):create index 索引名称 on 表名(字段名)

ps:给某一个查询字段设置索引

索引底层采用的数据结构是:B+ Tree

通过给字段设置索引,索引会定位到数据对应的物理地址,即查询语句where = 物理地址


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !