• mysql基本案例


    use test;
    SET NAMES utf8;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    --  Table structure for `employee_tbl`
    -- ----------------------------
    -- DROP TABLE IF EXISTS `employee_tbl`;
    CREATE TABLE `employee_tbl` (
      `id` int(11) NOT NULL,
      `name` char(10) NOT NULL DEFAULT '',
      `date` datetime NOT NULL,
      `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    --  Records of `employee_tbl`
    -- ----------------------------
    BEGIN;
    INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
    COMMIT;
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    
    SELECT DISTINCT concat
    (id,',',name) FROM employee_tbl GROUP BY id,name;
    
    SELECT DISTINCT concat
    (name) FROM employee_tbl GROUP BY name;
    
     SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
    
    SELECT
        CONCAT( COLUMN_NAME, ',' ) 
    FROM
        information_schema.COLUMNS 
    WHERE
        table_name = 'employee_tbl' 
        AND table_schema = 'test';
    
    SELECT CASE
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 0
    AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 17 THEN '其他'
    
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 18
    AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 39 THEN '18-39岁'
    
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 40
    AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 59 THEN '40-59岁'
    
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 60
    AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 74 THEN '60-74岁'
    
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 75
    AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 89 THEN '75-89岁'
    
    WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 90 THEN '90岁以上'
    END AS type, count(1) AS number
    FROM USER u WHERE u.tenant_id in(1,2)
    GROUP BY type;
    
    
        
        
        SELECT name from employee_tbl WHERE singin>3 and id=4;
        SELECT name from employee_tbl WHERE singin>=3 and singin<5;
        SELECT name from employee_tbl WHERE singin in (1,2);
        SELECT name from employee_tbl WHERE singin NOT in (1,2);
        select * from employee_tbl ORDER BY singin desc , name asc;
        
        SELECT sum(singin) FROM employee_tbl;
        SELECT MAX(DISTINCT singin) FROM employee_tbl;
        SELECT min(DISTINCT singin) FROM employee_tbl;
        SELECT avg(singin) FROM employee_tbl;
        
        SELECT LENGTH(name) as username FROM employee_tbl;
        select SUBSTR("sdafff" FROM 2 FOR 3);
        
        SELECT ROUND(-1.2);
        SELECT mod(10,-3);
        SELECT 10%3;
        
        select CONCAT(curdate()," ", curtime()) as datetime;
        
        SELECT DATE_FORMAT(date,'%Y年%m月%d日') datetime FROM employee_tbl;
        
        SELECT if(10<5,'da','xiao');
        SELECT COUNT(singin) FROM employee_tbl;
        SELECT COUNT(DISTINCT singin) FROM employee_tbl;
        
        select MAX(singin)-MIN(singin) as number FROM employee_tbl;
        select MAX(singin),id  FROM employee_tbl GROUP BY id;
        
        SELECT COUNT(*), shen_id FROM employee_tbl GROUP BY shen_id HAVING shen_id IS NOT null;
        SELECT COUNT(*) FROM shen GROUP BY LENGTH(name);
        
            select MAX(singin),AVG(singin),SUM(singin)  FROM employee_tbl GROUP BY id ORDER BY id;
            
        SELECT NAME 
        FROM
        employee_tbl shen;
      
    --     内连接
        SELECT  e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e INNER JOIN shen as s on e.shen_id=s.id ;
    --     左连接
                SELECT  e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e LEFT JOIN shen as s on e.shen_id=s.id  ;    
            
            SELECT  e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e LEFT JOIN shen as s on e.shen_id=s.id WHERE s.id is NULL ;        
    --         右连接
            SELECT  e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e RIGHT JOIN shen as s on e.shen_id=s.id ;    
            
    --         交叉连接
            SELECT e.*,s.* FROM
          employee_tbl e cross JOIN shen s;
            
    --         子查询
            SELECT * from employee_tbl WHERE shen_id in (SELECT id FROM shen WHERE name="影");
    select e.id,e.name, sh.id,sh.name from employee_tbl as e left join (select id,name from shen) as sh on e.shen_id=sh.id;
    
    -- 仅仅复制表的结构
    create table copy like employee_tbl;
    
    -- 复制表的结构和数据        
    create table copy2 
    select * from employee_tbl;
    
    select * from copy2;
    
    use test
    -- 添加外键
    ALTER TABLE copy ADD foreign key(shen_id)  references shen(id) ;
    ALTER TABLE copy drop foreign key shen_id ;
    
    use test
    -- 开启事务 先禁用自带提交功能
    set autocommit=0;
    start transaction;
    INSERT INTO copy (id,name,date,singin,shen_id)VALUES(4, '34', '2021-09-28 16:30:03', 02, 12);
    -- 回滚
    ROLLBACK;
    -- 提交
    COMMIT;
    
    -- 查看事务隔离级别
    SELECT @@tx_isolation;
    
    -- 查询全局事务隔离级别
    SELECT @@global.tx_isolation;
    
    -- 查询会话事务隔离级别
    SELECT @@session.tx_isolation;
    
    -- 设置read uncommitted级别:
    set session transaction isolation level read uncommitted;
    
    -- 设置read committed级别:
    set session transaction isolation level read committed;
    
    -- 设置repeatable read级别:
    set session transaction isolation level repeatable read;
    
    -- 设置serializable级别:
    set session transaction isolation level serializable;
    
    -- savepoint a 保存点,设置节点
    -- rollback to a 回滚到保存点
            
    -- 视图 sql 逻辑
    select  e.id,e.name,e.date,s.id as d,s.name,s.sex FROM employee_tbl as e INNER JOIN shen as s ON e.shen_id=s.id;
    -- 创建视图就是保存查询sql逻辑
    create VIEW v1
    as 
    select e.id,e.name,e.date,s.id as d,s.name as n,s.sex FROM employee_tbl as e INNER JOIN shen as s ON e.shen_id=s.id;    
    -- 查询视图
    SELECT * FROM v1;
    -- 视图更新
    
    -- 方式一        create or replace view 视图名 as 查询语句
    create OR replace view v1 as SELECT id, name, date FROM employee_tbl;
    SELECT * FROM v1;
    
    -- 方式二   alter view 视图名 as 查询语句
    alter view v1 as SELECT id, name, date FROM employee_tbl;
    
    -- 删除是视图名 drop view 视图名,视图名。。。
    drop view v1;
    --         查看视图
    show CREATE view v1;
    desc v1;
    
    -- 系统变量:全局变量、会话变量
    -- 自定义变量: 用户变量、局部变量
    SHOW global VARIABLES;
    show session variables;
    
    show global VARIABLES like '%char%';
    
    -- 查看指定的某个系统变量的值    select @@global | session .系统变量
    -- 为某个系统变量赋值     set @@global | session .系统变量名=值
    select @@tx_isolation;
    
    -- 用户变量等于会话变量  声明病初始化  = 或 :=
    -- set @用户变量名=值;    select @用户变量名:=值或;
    set @name='john';
    
    -- 赋值(更新用户变量的值)
    -- 方式一 通过set或select
    -- 方式二 通过 select 字段 into 变量名 from 表;
    -- 查看变量名 select @name;
    select @john;
    
    -- 局部变量
    -- 作用域:仅仅定义在他的begin end中有效
    -- DECLARE 变量名 类型 default 值
    -- DECLARE 变量名 类型
    
    -- 存储过程和函数    1、提高代码的重用性 2、简化操作  存储过程即函数
    
    -- 存储过程     一组预先编译好的sql语句的集合,理解成批处理语句
    -- 1、提高代码重用性    2、简化代码操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
    -- 1、创建语法
    -- create PROCEDURE 存储过程名(参数列表)方法体
    BEGIN
    --         存储过程体(一组合法的sql语句)
    
    END
    -- 参数模式
    -- IN:该参数可以作为输入,也就是说该参数需要调用方传入值
    -- OUT:该参数可以作为输出,也就是说该参数可以作为返回值
    -- INOUT:该参数既可以作为输入又可以作为输出
    -- 如果存储过程只有一句话,BEGIN END 可以省略
    in name VARCHAR(20)
    
    -- delimiter  接收标记
    delimiter $ 
    
    
    -- 2、调用语法
    -- CALL 存储过程名(实参列表)    
    
        delimiter $
        create PROCEDURE myv1()
        BEGIN
            INSERT INTO test_1(name)VALUES("温迪"),("钟离"),("影");
        END $
        
    --     调用
    CALL myv1;
    
    -- 测试in
    delimiter $
    CREATE PROCEDURE myv2(in names VARCHAR(255))
    BEGIN
        select * FROM test_1 WHERE name=names;
    END $
    
    CALL myv2("影")$;
    
    delimiter $
    CREATE PROCEDURE myv6(in names VARCHAR(255))
    BEGIN
    
    -- 声明并初始化
    DECLARE id int ;
    DECLARE result VARCHAR(255) DEFAULT ' ';
    
        select * FROM test_1 WHERE name=names;
        SELECT id,result;
    END $
    
    CALL myv5("影")$;
    
    -- 测试out
    delimiter $
    create procedure myv9(in id int(11),out name VARCHAR(255))
    BEGIN
                SELECT name into name FROM test_1
                where id=id;
    END $
    
    set @bName$
    
    CALL myv9(2,@d)
    
    select @d;
    
      -- 删除存储过程
      DROP PROCEDURE myv1;
      DROP PROCEDURE myv8;
    
      -- 查看存储过程
      SHOW CREATE PROCEDURE myv3;
    
      -- 函数 区别:有且仅有一个返回
    
      create FUNCTION myv11() RETURNs INT(11)
      BEGIN
      DECLARE count INT(11) DEFAULT 0;
      SELECT count(*) INTO count FROM test_1;
      return count;
      END
    
      SELECT myv11()$
    
     
    
     
     
  • 相关阅读:
    vue 手动挂载 $amount()
    Redis 主从配置
    DMA分区管理
    C# 构造函数里的base和this的区别
    SQL Server 数据库性能优化
    TCP和UDP的优缺点及区别
    Django框架初步应用简述
    前端vue框架应用雏形
    接口mock之moco
    python进阶(九)~~~协程、进程池、线程/进程/协程对比
  • 原文地址:https://www.cnblogs.com/Zeng02/p/15351935.html
Copyright © 2020-2023  润新知