MySQL知识点整理

SQL脚本集锦

 sql复制表结构

create table newTableName like sourceTableName

 sql复制表结构和数据

create table newTableName select * from sourceTableName

 如果只需要复制部分字段和数据,把*改成需要复制的字段即可。比如我只需要复制id和username:create table newTableName select id,username from sourceTableName

 sql删除表

drop table tableName

 修改表名称

alter table oldTableName rename newTableName

 删除表的某列

alter table tableName drop fieldName

 添加表的列

alter table tableName add fieldName VARCHAR(36)  

 插入数据

INSERT INTO tableName (column1,column2,column3,...) VALUES (value1,value2,value3,...);

 更新数据

UPDATE tableName SET column1=value1,column2=value2,... WHERE some_column=some_value;

 删除数据

DELETE FROM tableName WHERE some_column =some_value;

  查询去除重复的数据

select distinct fieldName from tableName

 查询前10行的数据

 select * from tableName LIMIT 10

 查询第2行到第10行的数据

select * from tableName LIMIT 1,10

 内连接查询:将多个表中符合连接条件的数据查询出来

select * from tableA [inner]  join tableB on 连接条件

 左外连接查询:以左表为基础,过滤另外一张表(左表所有信息都会显示,右表中匹配的信息会显示,不匹配的使用空来填充)

select * from tableA left join tableB on 连接条件

 交叉连接查询

select  *  from tableA,tableB where 关联条件

 结果集:将查询出来的一个结果集作为一个表继续进行查询

select * from (select * from tableA) 别名, tableB where 关联条件

 合并查询:将多个查询结果合并为一个结果集

select fieldName from tableA  WHERE 条件 union select fieldName from tableB  WHERE 条件

 函数

 求和 ——> sum()

 平均值 ——> avg()

 统计行数 ——> count()

 最大值 ——> max()

 最小值 ——> min()

 获取当前日期和时分秒 ——> now()

 获取当前日期 ——> curdate()

 获取当前时分秒 ——> curtime()

 计算2个时间相差的天数 ——> datediff(d1,d2)

 在d日期的基础上增加n天 ——> adddate(d,n)

 在d日期的基础上减少n天 ——> subdate(d,n)

 在d日期时间的基础上增加/减少n单位 ——> date_add(d,interval n type)

 type表示单位类型

type

说明

microsecond

微秒

second

minute

分钟

hour

小时

day

week

星期

month

quarter

季度

year

second_microsecond

秒和微秒

minute_microsecond

分钟和微秒

minute_second

分钟和秒

hour_microsecond

小时和微秒

hour_second

小时和秒

hour_minute

小时和分钟

day_microsecond

日期和微秒

day_second

日期和秒

day_minute

日期和分钟

day_hour

日期和小时

year_month

年和月

 举例1:select date_add(NOW(),interval - 2 DAY)  这是查询两天的日期

 举例2:select date_add(NOW(),interval + 2 MONTH)  这是查询两个月的日期

 获取日期或时间中某个单位的整数

 年份 ——> year(d)

 月份 ——> month(d)

 日 ——> dayofmonth(d)

 小时 ——> hour(d)

 分钟 ——> minute(d)

 秒 ——> second(d)

 一周中的第几天(周一为0) ——> weekday(d)

 一年中的第几周 ——> week(d)

 一年中的第几天 ——> dayofyear(d)

 举例:select year('2020-8-26 7:30:00')   -- 输出2020

 四舍五入后的整数 ——> round(x)

 四舍五入后的小数,y表示小数位数 ——> round(x,y)

 保留y位小数的值,只舍不入 ——> truncate(x,y)

 返回大于等于x的最小整数(向上取整) ——> ceil(x)

 与ceil相反,返回小于等于x的最大整数(向下取整) ——> floor(x)

 返回0-1之间的随机数,包括0不包括1 ——> rand()

 将多个字符串拼接 ——> concat(s1,s2,…)

 将多个字符串使用指定字符进行拼接 ——> concat_ws('指定字符',s1,s2,…)

 截取x字符串的前面n个字符 ——> left(x,n)

 截取x字符串的后面n个字符 ——> right(x,n)

 对x字符串进行截取,从start位置开始截取length个 ——> substring(x,start,length)

 转化为大写 ——> upper(s)

 转化为小写 ——> lower(s)

 在s1的字符串中查找s2字符串并替换成s3字符串 ——> replace(s1,s2,s3)

 获取字符的长度 ——> char_length(s)

 获取字符的字节数(注意:一个汉字占3个字节) ——> length(s)

 将字符串s转化为md5编码 ——> md5(s)

 变量

 局部变量:使用declare定义,只能在函数、存储过程、触发器中使用,局部变量不需要@前缀

 一个变量语法:declare 变量名 数据类型 default 默认值;

 多个变量语法:declare nnum1,nnum2  int  default  0;

 系统变量:由系统定义,以@@开头,可以直接使用。

 常用的系统变量

 @@version:获取MySQL版本

 @@last_insert_id:上一次添加记录的自增列的值(注意:@@identity也可以达到同样的效果)

 会话变量:在客户端的本次连接过程中可以使用,当客户端断开后,无法再使用,以@开头。

 创建变量并赋值:set @变量名=值;

 一次性创建多个变量并赋值:set @num1=2,@num2=3;

 自定义函数

语法:

create function 函数名(参数名 数据类型,参数名 数据类型…)  returns 返回类型

begin

-- 代码

return 返回值;

end;

定义函数注意事项:

1) 必须有返回类型

2) 函数名建议使用fn_开头命名

3) 函数中不能产生查询结果集

调用函数:可以在增删改查语句中使用函数,参数可以是列名

删除函数: drop function 函数名

 IF语句

if 条件表达式1 then

代码块1;

elseif 条件语句2 then

代码块2;

else

代码块3;

end if;

 CASE语句

case

when 表达式 then 值

when 表达式 then 值

else 值

end;

 WHILE语句

while 条件表达式 do

循环体;

end while;

 

leave语句:跳出循环,类似java中的break

iterate语句:跳过本次循环,类似java中的continue

标记:在while循环开始和结束定义,标记名称自己设置,在leave和iterate中使用标记。

 视图

解释:视图中保存的仅仅是一条select语句,视图中的数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚拟表,视图不能存储数据。

 

创建视图语法:

create view 视图名

as

select 语句

 

删除视图语法:

drop view 视图名

 

修改视图:

alter view 视图名

as

select语句

 索引

 创建索引语法:create index 索引名 on 表名(列名)

 删除索引语法:drop index 索引名 on 表名

 聚集索引和非聚集索引(普通索引)的区别

聚集索引

非聚集索引

表中的主键会自动创建聚集索引,数据在索引页中的顺序和在数据表中的顺序一致,每个表最多只能有1个聚集索引。

数据在索引页中的顺序和在数据表中的顺序不一致,每个表可以有多个非聚集索引。

 存储过程

 无参数的存储过程语法

create procedure 存储过程名()

begin

        存储过程语句;

end;

call 存储过程名称(); -- 调用存储过程

 带输入参数的存储过程

create procedure 存储过程名(in 参数名 数据类型,in 参数名 数据类型,…)

begin

存储过程语句;

end;

call 存储过程名称(值,值,…); -- 调用存储过程

 带输出参数的存储过程

create procedure 存储过程名(in 参数名 数据类型,out 参数名 数据类型,…)

begin

存储过程语句;

end;

set @value=值;

call 存储过程名称(值,@value,…); -- 调用存储过程

select @value;

 删除存储过程

drop procedure 存储过程名称

 事务

 解释:事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,多个操作作为一个整体向系统提交,要么都执行、要么都不执行。事务是一个不可分割的工作逻辑单元。

 事务的四个属性

原子性(Atomicity)

事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

一致性(Consistency)

当事务完成时,数据必须处于一致状态。

隔离性(Isolation)

并发事务之间彼此隔离、独立,它不以任何方式依赖或影响其他事务。

持久性(Durability

事务完成后,事务对数据库的所有更新将被永久保存到数据库。

 管理事务的sql语句

 开始事务:start transaction;

 提交事务:commit;

 回滚事务:rollback;

 触发器

 解释:在增删改操作过程中触发并执行相应行为,在触发器中可以进行数据验证,也可以进行其他操作。

 作用:实现检查约束、实现关联操作

 种类:insert、update、delete

 表new和old

 触发器都是操作的这两张临时表;

 insert触发器添加的数据在new中;

 delete触发器需要删除的数据在old中;

 update触发器修改前的数据在old中,修改后的数据在new中;

 一个表每种类型的触发器只能有一个;

 使用时new.field或old.field即可;

 语法

CREATE TRIGGER myTrigger BEFORE INSERT ON tableName FOR EACH ROW

BEGIN

触发器代码

END;

 游标

 解释:游标用于从select语句的结果集中每次提取一条记录。

 声明游标:declare 游标名 cursor for select语句

 打开游标:open 游标名

 从游标中获取数据:fetch 游标名 into 变量名1,变量名2…

 关闭游标:close 游标名

 

 

原文地址:https://www.cnblogs.com/ywy8/p/13565375.html