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