zoukankan      html  css  js  c++  java
  • 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 游标名

     

     

  • 相关阅读:
    web 开发之酷炫--- 酷炫展示
    攻城狮的体检
    科技发烧友之智能路由
    科技发烧友之3d吉米投影
    科技发烧友之单反佳能700d中高端
    上海
    视频会议
    机器学习之信息
    filter
    centos 20T硬盘(超过16T)分区
  • 原文地址:https://www.cnblogs.com/ywy8/p/13565375.html
Copyright © 2011-2022 走看看