本文最后更新于 2024-11-16,文章内容可能已经过时。 --上面👆的ai摘要暂时用不了【站长没钱🤣】,以后再弄

MySQL常用数据类型

创建表

create table 表名(
  列名1 列类型1 [列属性1] [primary key] [null/not null],
  列名2 列类型2 [列属性2]
)

增删改(表结构)

使用Alter table 表名 来选择要修改的表

  1. 增加(Create / Add):

Alter table 表名
Add Column 列名 列类型 [列属性],
Add Column 列名 列类型 [列属性];
  1. 删除(Remove / Drop):

Alter table 表名
Drop Column 列名;
  1. 修改(Modify / Change):

Alter table 表名
Change Column 旧列名 新列名 类型 [属性];

增删改(数据值)

  1. 增(Insert):

insert into 表名(数值1,数值2,数值3,...)
values(values1,values2,values3,...);
  1. 删(Delete):

delete from 表名 where condition;
  1. 改(Update):

update 表名 set column1=values1,column2= values2,... where conditionl;

查询

where 条件筛选

  1. 数据类型匹配
    where后面的值要与列记录中的值类型一致

  1. 引号的使用
    字符串和日期时间用‘ ’单引号引用

  1. 空值的处理
    检查是否为空值 is null 而不是
    使用 is not null 排除空值

  1. 比较运算符
    =、<>、>、>=、<、<=
    其中 <>表示非等价比较运行算符 同 0 异 1 参考Java异或运算符 ^

  1. 逻辑运算符
    and or not
    注意优先级
    必要时使用()明确分组

范围运算符

between……and……

between 包含边界值!

like 模糊查询 【模式匹配】

% 表示任意字符序列
_ 表示任意 1个字符

有多少下划线_就表示多少个字👉【定长】
%👉【变长】

对于复杂的模式匹配 , 可以使用 正则表达式 REGEXP

select * from table_name where 字段名 REGEXP ' ';
有如下通配符:

. 表示任意一个字符 严格位置!
一个 . 只能匹配一个字符 类似 like 中的 ' % '
一句REGEXP 只能有一个 .

^ 开头 $ 结尾

[abc] 其中的任意一个字符 不论位置!
abc同时满足 👉 同时取

[a-z] a-z范围内的任意一个字符 不论位置!
只适用于数字 / 字母!

[A|B] A或者B
A和B同时满足 👉 同时取

注意⚠️

  • 经量避免where中使用函数 👉 导致索引被禁用

  • 使用索引过滤数据 👉 提高查询性能 / / 同时避免对全表进行扫描

  • 考虑数据的完整性跟一致性,确保查询条件不会违背数据库约束

order by 语句

order by 字段名 / 列数 ASC / DESC

ASC 【升序】【默认】

DESC 【降序】

列数 【第几列 : 直接写数字】

聚合函数

MAX ( ) 返回一组字段的最大值

MIN( )返回最小值

SUM( )求集合的和

AVG( )返回集合平均值

COUNT( )返回集合中的项目数 👉 数量

group by 字段名 [having]

group by 对聚合函数之后进行分组

having 对 分组后 的数据进行 筛选

常用函数:

substr(字段名,number1,number2)

substr( )函数 → 用于求取字段的某个字符

number1 : 开始的字符数 初始值为1

number2 : 结束的字符数 不能超过类型长度

round( 记录值 )

round函数:四舍五入

exists 进行判断 👉 输出 1 无 输出 0

子查询

子查询不仅能在where后使用 , 还能 <建表> <表数值的增删改> 中使用

表连接

  1. 内连接

  2. 左连接

  3. 右连接

inner join 内连接 返回两个表中都有的数据

left join 左连接 返回左表所有数据 + 右表匹配数据 右表没有的数据用 NULL 填充

right join 右连接 返回右表所有数据 + 左表匹配数据 左表没有的数据用 NULL 填充

索引

create [unique|fulltext|spatial] index index_name on table_name(index_table_name, ... );

  • unique :唯一索引

  • fulltext :全文索引

  • spatial :空间索引

index_name:定义索引名

table_name :选中要创建索引的表

index_table_name:要创建索引的字段

查看当前表的索引:

show index from 表名;

若 创建表同时创建索引 , 索引将自动更新 . 先创建表 , 再创建索引 , 只能手动更新 .

视图

create view v_视图名
as
select ...

以上是创建视图步骤

注意⚠️

  • 视图是一种虚表

  • 视图的数据是动态的,会随主表的变化而变化

视图的修改

alter view v_视图名
as
新的 select 语句

删除

drop view v_视图名;0

存储过程

/* 创建存储过程 */ CREATE PROCEDURE pro_Car_Sales ( IN pinpai VARCHAR ( 200 ), OUT number INT ) READS SQL DATA BEGIN
	SELECT
		`销售号`,销售时间,
		`卖价` 
	FROM
		`销售` 
	WHERE
		`汽车品牌` = pinpai;
	SELECT
		COUNT(*) INTO number AS 单数 
	FROM
		`销售` 
	WHERE
		`汽车品牌` = pinpai;
	
END;
CREATE PROCEDURE pro_Car_Sales ( IN pinpai VARCHAR ( 50 ), OUT number INT ) READS SQL DATA BEGIN
	SELECT
		销售号,销售时间,卖价 
	FROM
		销售 
	WHERE
		汽车品牌 = pinpai;
	SELECT
		count(*) INTO number 
	FROM
		销售 
	WHERE
	汽车品牌 = pinpai;
END;

CALL pro_Car_Sales('红旗',@a);
select @a;

create procedure pro_存储过程名(in 自定义名 数据类型 , out 自定义名 数据类型)
[ reads sql data | no sql | modifies sql data ]

查询语句 | 无sql语句 | 修改sql语句
begin
select ... ;
...
end;

call pro_存数过程名(... , ... );