mysql基本知识

1 Mysql语句规范 

2 mysql常用命令

1基本操作

2 改符号

3 日志

4 IF NOT EXISTS

5 修改默认配置

6 查看

7 改变编码方式

          8 navicat开关日志

3 数据表创建以及类型

         字段的初始化

1 自增长

2 非空

3 默认值

4 唯一

5 表创建总结

         字段的操作

有主键和自增长的时候应该是先删除自增长再删除主键

         类型

 浮点数与定点数

Char与varchar区别

 枚举类型

集合类型

4 数据表操作(增删改)

1插入记录

2 更新所有记录

3 指定一个自增的初始值

4 彻底清空表

​5 数据库操作--查

1 表起别名

2 字段起别名

3 检测NULL

         4 查询范围

         5 模糊查询

6 逻辑运算符

7 分组查询

 8 聚和函数

9 进行统计

10 分组后二次筛选   HAVING

11 升序降序

12 随机

13 limit

14 内连接

15 外连接

16 内外连接的选择 以及总结

17 外键

ON DELETE CASCADE

18 联合查询

19 子查询

集合查询

20 正则表达式

21 运算符

22 数学函数库

23 字符串函数

24 日期函数

25 表达式函数

26 其它常用函数

6 索引

7 数据引擎

查看所有引擎

 


1 Mysql语句规范 

2 mysql常用命令

1基本操作

2 改符号

3 日志

4 IF NOT EXISTS

5 修改默认配置

6 查看

7 改变编码方式

8 navicat开关日志

查看日志状态。show global variables like '%general%';

 

只针对当前有效

3 数据表创建以及类型

字段的初始化

1 自增长

2 非空

3 默认值

4 唯一

5 表创建总结

 

字段的操作

 1 更改名字

2 添加字段

3 删除字段 

4 修改字段

5 删除字段默认值

6 添加主键和删除主键

有主键和自增长的时候应该是先删除自增长再删除主键

7 添加删除唯一

8 修改自增长值

类型

 

 浮点数与定点数

定点数底层是用字符串的形式来存储的,所以一般银行等企业会用这个来存储

Char与varchar区别

因为密码都是定长的,所以一般用char

 枚举类型

集合类型

4 数据表操作(增删改)

1插入记录

2 更新所有记录

3 指定一个自增的初始值

4 彻底清空表


5 数据库操作--查

1 表起别名

2 字段起别名

3 检测NULL

上面第一个不行

4 查询范围

5 模糊查询

6 逻辑运算符

7 分组查询

 Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

1 首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)


2 然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组


3 接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉


4 最后按照Order By语句对视图进行排序,这样最终的结果就产生了。

需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:

1 执行where子句查找符合条件的数据;


2 使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。


3 having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。


 having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。

在group by 中用count(*) 获取条数 ,你会很神奇的发现你获取的不是总条数,而是每个组的条数,count(*)的结果是分组以后每组中的记录的条数,而不是分组的数目,但是如果你要获取总条数的话就会很麻烦,

 8 聚和函数

9 进行统计

WITH ROOLUP

10 分组后二次筛选   HAVING

11 升序降序

从某一条开始倒着开始查

 

从某一条开始正着查

 

12 随机

13 limit

实现分页的核心

14 内连接

只有JOIN也可以

15 外连接

16 内外连接的选择 以及总结

需要查找两张表同时存在的数据,使用内连接
需要查找两张表中一张表存在,另一张表不存在的时候使用左外链接 或 右外链接

内连接的查询结果都是满足连接条件的元组。但有时我们也希望输出那些不满足连接条件的元组信息。比如,我们想知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,在选课表中也有,是满足连接条件的),也包括没有选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足连接条件),这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。

1. 自然连接(*natural join)*

自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列,

 `SELECT*FROM student NATURAL JOIN score;`
 

显示结果如下:

2. 内连接(inner join
和自然连接区别之处在于内连接可以自定义两张表的不同列字段。
内连接有两种形式:显式和隐式。
例:以下语句执行结果相同。

①隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积。

SELECT student.name,score.codeFROM student,score WHERE score.code=student.code;

② 显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。

SELECT student.name,score.codeFROM student INNER JOIN score ON score.code=student.code;

3.外连接(outer join)
①左外连接(left outer join):返回指定左表的全部行+右表对应的行,如果左表中数据在右表中没有与其相匹配的行,则在查询结果集中显示为空值。


例:SELECT student.name,score.codeFROM student LEFT JOIN score ON score.code=student.code;
查询结果如下:

②右外连接(right outer join):与左外连接类似,是左外连接的反向连接。

SELECT student.name,score.codeFROM student RIGHT JOIN score ON score.code=student.code;

②全外连接(full outer join):把左右两表进行自然连接,左表在右表没有的显示NULL,右表在左表没有的显示NULL。(MYSQL不支持全外连接,适用于Oracle和DB2。)

在MySQL中,可通过求左外连接与右外连接的合集来实现全外连接。
例:

SELECT student.name,score.codeFROM student LEFT JOIN score ON
score.code=student.codeUNION SELECT student.name,score.code
FROM student RIGHT JOIN score ON score.code=student.code;

4.交叉连接(cross join):相当与笛卡尔积,左表和右表组合。
SELECT student.name,score.code FROM student CROSS JOIN score ON score.code=student.code;

17 外键

有外键之后就不怕说是删除掉此表二其它与之关联的表没有关系

删除外键

添加外键

ON DELETE CASCADE

删除父表中的字段,子表中也会删除

18 联合查询

19 子查询

集合查询

(1)并UNION

【例】 查询计算机系的学生及年龄不大于19岁的学生详细信息。

select *
from student
where student.Sdept='CS'
union
select *
from student
where student.Sage<=19;

 (2)交INTERSECT   [ˌɪntəˈsekt]

【例】查询选修了1号课程的与年龄不大于19岁的 学生 详细信息 的交集。

Select *
from student,SC
where student.Sno=SC.Sno and SC.Cno=1
INTERSECT
Select *
from student
where student.Sage<=19;

 (3)差EXCEPT

【例】查询计算机科学系的学生与年龄不大于19岁的学生详细信息的差集。

select *
from student
where student.Sdept='SC'
EXCEPT
select *
from student
where student.Sage<=19;

20 正则表达式

Like也可以实现

21 运算符

22 数学函数库

23 字符串函数

24 日期函数

25 表达式函数

26 其它常用函数

6 索引

只有全英文的才能用全文索引

联合性的唯一索引

4 数据引擎

存储引擎的选择

功能

MyISAM

Memory

InnoDB

Archive

存储限制

256TB

RAM

64TB

NO

支持事务

NO

NO

YES

NO

支持全文索引

YES

NO

NO

NO

支持数索引

YES

YES

YES

NO

支持哈希索引

NO

YES

NO

NO

支持数据缓存

NO

N/A

YES

NO

支持外键

NO

NO

YES

NO

查看所有引擎

show   engines;

  • Support列的值:表示该引擎能否使用。YES表示可以、NO表示不可以、DEFAULT当前默认存储引擎

、InnoDB存储引擎

1.简介

  • InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键等。
  • MySQL5.5.5之后,InnoDB作为默认存储引擎

2.功能与特点

  • ①提供了提交、回滚、崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在select语句中提供了一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能
  • ②在SQL查询中,可以自由地将InnoDB类型的表与其他MySQL的表的类型混合起来,甚至在同一个查询中也可以混用
  • ③CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹配的。提供处理巨大数据量的最大性能优化
  • ④InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,MyISAM表中的每个表被存在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上
  • ⑤InnoDB支持外键完整性约束(foreign  key)。存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6B的ROWID,并以此作为主键
  • ⑥InnoDB被用在众多需要高性能的大型数据库站点上

3.附加

  • InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

 二、MyISAM存储引擎

1.简介

  • MyISAM是基于ISAM的存储引擎,并对其进行扩展
  • MyISAM在web、数据存储和其他应用环境下最常用的存储引擎之一
  • MyISAM具有较高的插入、查询速度,但不支持事务。

2.功能与特点

  • 大文件(达63位文件长度)在支持大文件的文件系统和操作系统中被支持
  • 当把删除、更新、插入操作混合使用的时候,动态尺寸的行产生更少的碎片。这要通过合并相邻被删除的快,以及若下一个块被删除,就扩展到下一块来自动完成
  • 每个MyISAM表最大索引数为64,这可以通过重新编译来改变。每个索引最大的列数为16个
  • 最大的键长度是1000B,这也可以通过编译来改变。对于键长度超过250B的情况,一个超过1024B的键将被用上
  • BLOB和TEXT列可以被索引
  • NULL被允许在索引的列中。这个值占每个键的0~1个字节
  • 所有数字键值高字节优先被存储以允许一个更高的索引压缩
  • 每表一个auto_increment列的内部处理:MyISAM为insert和update操作自动更新这一列。这使得auto_increment列更快(至少10%)。在序列顶的值被删除之后就不能再使用
  • 可以把数据文件和索引文件放在不同目录
  • 每个字符列可以有不同的字符集
  • 有varchar的表可以固定或动态记录长度
  • varchar和char列可以多大64KB

3.附加

  • MyISAM引擎创建数据库,将产生3个文件,文件的名字以表的名字开始,扩展名指出文件类型:frm文件存储表定义数据文件的扩展名为.MYD(MYData),索引文件的扩展名为.MYI(MYIndex)

三、MEMORY存储引擎

1.简介

  • MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问

2.功能与特点

  • MEMORY表的每个表可以有多达32个索引每个索引16列,以及500B的最大键长度
  • MEMORY存储引擎执行HASH和BTREE索引
  • 可以在一个MEMORY表中有非唯一键
  • MEMORY表使用一个固定的记录长度格式
  • MEMORY不支持BLOB和TEXT
  • MEMORY支持auto_increment列和对可包含NULL值的列的索引
  • MEMORY表在所有客户端之间共享(就像其他任何非temporary标)
  • MEMORY表内容被存在内存中,内存是MEMORY表和服务器在查询处理时的空闲中创建的内部表共享

不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行delete from或truncate table,或者删除整个表(drop table)