mysql基本知识
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大小的日志文件
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)
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)