MySql
2024-07-03 16:01:06 0 举报
AI智能生成
登录查看完整内容
MySql是一个开源的关系型数据库管理系统,它使用SQL(结构化查询语言)来管理数据。MySql支持大量的操作系统,包括Linux、Unix、Windows等。它的核心优势在于其出色的性能、可靠性和易用性。此外,MySql还具有强大的数据保护功能,可以有效地防止数据丢失和损坏。MySql的文件类型主要包括数据库文件(.MYD)、索引文件(.MYI)和日志文件(.MYL)。其中,数据库文件存储了实际的数据,索引文件存储了数据的索引,而日志文件则记录了数据库的各种操作。MySql在网页应用、数据仓库、电子商务等领域得到了广泛的应用。
作者其他创作
大纲/内容
show databases;
显示数据库
create database db_name;
创建数据库
use db_name;
切换数据库
show tables;
显示当前数据库的数据表
create table tb_name(field type);
创建数据表
desc tb_name;
查看表结构
select field from tb_name where 约束条件;
查询
insert into tb_name(fields) values(vlaues);
增加(插入)
update tb_name set field=value where 约束条件;
修改
delete from tb_name where 约束条件;
删除
drop table tb_name;
删除数据表
drop database db_name;
删除数据库
常用命令
非空且唯一
Primary Key
主键
constraint fk_emp5_dept1 foreign key(deptId) references tb_dept1(id)
可以为空
项目中不怎么使用
Foreign Key
外键
Not Null
非空
default
默认
可以有空值,但至多只能有一个值为空
unique
唯一
auto_increment
自增
约束条件
select * from <表名>;
select <所有字段>from <表名>;
查询所有字段
select f_name from tb_name;
查询单个字段
查询多个字段
select 字段名1,字段名2,...,字段名nfrom 表名where 查询条件
查询指定记录
in
not in
带in关键字的查询
查询日期时间 yyyy-MM-dd HH:mm:ss.S
带between and的范围查询
百分号通配符'%',匹配任意长度的字符,甚至包括零字符
下划线通配符'_',一次只能匹配任意一个字符
带like的字符匹配查询
使用 is null子句
查询空值
带and的多条件查询
不可嵌套
速度没有in快
带or的多条件查询
distinct
去重
单列排序
多列排序(很少使用)
desc是降序关键字
asc是升序关键字(默认)
指定排序方向
order by子句
对查询结果排序
在group by子句中使用 WITH ROLLUP
with rollup:求总和,表的最后一行(类比购物车总计)
[ GROUP BY 字段 ] [HAVING <条件表达式>]
补:group_concat(字段名):通过group by...分组查询出来的结果做为一个新的列显示出来
分组查询
limit [位置偏移量,] 行数
limit 行数
limit限制查询结果的数量
单表查询
内连接查询操作列出与连接条件匹配的数据行
[INNER] JOIN...ON
内连接
左表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来
LEFT JOIN
左外连接
右表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来
RIGHT JOIN
右外连接
外连接
特殊的内连接
自连接
笛卡尔积
全连接
内连接、外连接、全连接有何区别
多表查询
基本查询语句
只要满足内层子查询中的任何一个比较条件,就 返回一个结果作为外层查询的条件
带ANY、SOME关键字的子查询
满足内层子查询中的所有比较条件,才返回一个结果作为外层查询的条件
带ALL关键字的子查询
如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将 进行查询
如果子查询没有返回任何行,那么EXISTS返回的结果为false,此时外 层语句将不进行查询。
对子查询进行运算以判断它是 否返回行
带EXISTS关键字的子查询
带IN关键字的子查询 (IN、NOT IN)
AS
为表取别名
正则表达式(了解)
子查询
返回字符串 s 的前 n 个字符
从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:SELECT MID(\"RUNOOB\
从字符串 s 的 n 位置截取长度为 len 的子字符串
返回字符串 s 的后 n 个字符
去掉字符串 s 开始和结尾处的空格
TRIM(s)
字符串函数
返回当前日期
CURDATE()
返回当前时间
CURTIME()
返回当前日期和时间
NOW()
日期函数
返回查询的记录总数,expression 参数是一个字段或者 * 号
COUNT(expression)
返回 x 除以 y 以后的余数
返回圆周率(3.141593)
PI()
返回 0 到 1 的随机数
RAND()
返回离 x 最近的整数,可选参数 y 表示要四舍五入的小数位数,如果省略,则返回整数。
返回x的平方根
SQRT(x)
返回指定字段的总和
SUM(expression)
向下取整
floor()
向上取整
ceil()
数学函数
32位16进制数
md5
password
加密函数
常用聚合函数
1. 大大提高系统性能2. 大大加快数据的查询速度3. 加速表和表的连接4. 在使用分组和排序查询子句时,可以显著减少分组和排序的时间
索引的优点
1. 耗费添加过程时间2. 占用磁盘空间3. 当有增删改的时候,索引也要对应改动,降低了数据库的维护速度
索引的缺点
索引的特点(记忆)
并非越多越好避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。数据量小的表最好不要使用索引。在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。当唯一性是某种数据本身的特征时,指定唯一索引。在频繁进行排序或分组的列上建立索引
索引的设计原则(面试)
索引
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,可以在num上设置默认值0,确保表中num列没有null值
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
很多时候用 exists 代替 in 是一个好的选择
索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了insert 及 update 的效率,
任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
详见pdf关于SQL的优化问题
sql优化(记忆)
优点:存储过程可封装,并隐藏复杂的商业逻辑。存储过程可以回传值,并可以接受参数。存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。存储过程可以用在数据检验,强制实行商业逻辑等。
缺点存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。存储过程的性能调校与撰写,受限于各种数据库系统。
存储过程
触发器
原子性:表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败
一致性:一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前的状态
读取未提交
读取已提交
可重复读
序列化
事务的隔离级别
隔离性:事务不会查看中间状态的数据,要么是另一并发事务修改它之前的状态,要么是 另一事务修改它后的状态
持久性:事务不会查看中间状态的数据
事务(一组要么同时执行成功,要么同时执行失败的SQL语句)
MySQL
0 条评论
回复 删除
下一页