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