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()$

 

 
 

 

posted @ 2021-09-29 11:11  漫步花海下的oldman  阅读(45)  评论(0编辑  收藏  举报