• Mysql基本查询、视图、索引、触发器


    基本查询

    修改
    String sql="update smbms_user set userCode='"+code+"' where id='"+user_id+"' ";


    删除用户
    String sql="delete from smbms_user where id=?";


    登录
    select * from user where userName=#{userName} and userPassword=#{userPassword}


    模糊查询
    select * from smbms_bill WHERE productName like "%米%"


    处理年龄
    SELECT floor(DATEDIFF(NOW(),birthday)/365) as age, u.*,r.roleName as userRoleName from smbms_user as u,smbms_role as r WHERE u.userRole = r.id


    查news表格,要求按主题生活(topic表格,有生活,娱乐等)分类,按创建时间降序查询,并取前5条
    SELECT * from news WHERE ntid=1 ORDER BY ncreateDate ASC LIMIT 0,6;


    查全部新闻按降序排序,并取前5条
    SELECT * from easybuy_news ORDER BY createTime DESC LIMIT 0,5;


    通过用户的id来查地址
    select * from easybuy_user_address where userId=#{id}


    插入
    INSERT INTO ebook_category(id,name) VALUES(2,"oracle");
    INSERT INTO ebook_entry(id,categoryId,title,summary,uploaduser,createdate) VALUES(2,1,"美食","美食摘要","tome",NOW());


    创表
    create table product(
    pid int(4) primary key auto_increment,
    name VARCHAR(20),
    catalog_name varchar(20),
    price int(10),
    picture varchar(20) );


    聚合函数:取平均值 AVG() :求sal平均值

    select avg(sal) as avg_sal from emp;

    --求和 SUM() 对sal求和

    select sum(sal) as sum_sal from emp;

    --求最大值 MAX()、最小值MIN() 对sal进行操作

    select max(sal) as max_sal,min(sal) as min_sal from emp;

    --求行数 count() 求emp表中的行数

    select count(*) as avg_sal from emp;

    注:聚合函数中除了count()函数外,其余的跳过空值去处理非空的值;


     给已创建的表增加字段

    alter table personalInfo  add column  numberId  varchar(20)


     //给已有字段设主键

    alter table personalInfo  add primary key(numberId)


     //删除表中某个字段

    alter table  personalInfo drop column  age


    修改字段中某部分内容

    update tod_arrange set date = "replace"(date, '2021','2020')


     给表中某个字段加1

    update nian_xian set work_nianxian=cast(work_nianxian as int)+1


     登录mysql后创建新用户,@后面的表示可以在哪里登录,%可以在任意地方登录,用不同的用户登录数据库,表不一样

    create user 'srabc'@'locallost' identified by 'usrabc';


     聚合函数字符串转数字

    select sum(cast(vacation_day as floot)) vacation from tod_dutyoff where user_name="aaa"


     查询每个部门的转正人数,对于转正人数小于2个人的不显示,having与group by连用

    select  (select d.dept_name from department d  where d.dept_no=e.dept_no) as 部门,sum(e.work) as 转正人数 from emp e  where e.work='1' group by e.dept_no HAVING sum(e.work)>=2


    to_char 和 to_date转换

    Oracle

     select to_char(sysdate,'yyyy-mm-dd') today from dual;

     select * from emp where dates  between
    to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
    and
    to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
    

    --假设hiredate字段储存的格式为2020-06-03  ,现在只取年份,如下

    select   to_char(to_date('hiredate','yyyy'),'yyyy')  from emp

    -- 查询创建时间大于2020-06-01日的申请信息

    select * from apply where create_date>to_date('2020-06-01','yyyy-mm-dd') 

    -- 查雇佣时间大于2020-0702号员工信息
    SELECT * FROM EMP WHERE to_date(hiredate,'yyyy-mm-dd') >to_date('2020-07-02','yyyy-mm')

    --表中字段为date类型模糊查询

    select * from YYCGD2020  where to_char(cjtime,'yyyy-MM-dd') like '%2020-09-02%'

    Mysql

    select date_format(procedure_startTime,'%Y-%m-%d') from blood_analyse_lbjk
    select str_to_date(procedure_startTime,'%Y-%m-%d') from blood_analyse_lbjk

    %Y:代表 4位的年份
    %y:代表 2为的年份
     
    %m:代表月, 格式为(01……12)  
    %c:代表月, 格式为(1……12)
     
    %d:代表月份中的天数,格式为(00……31)  
    %e:代表月份中的天数, 格式为(0……31) 
     
    %H:代表小时,格式为(00……23)  
    %k:代表 小时,格式为(0……23)  
    %h: 代表小时,格式为(01……12)  
    %I: 代表小时,格式为(01……12)  
    %l :代表小时,格式为(1……12)
      
    %i: 代表分钟, 格式为(00……59) 
     
    %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)  
    %T:代表 时间,格式为24 小时(hh:mm:ss) 
     
    %S:代表 秒,格式为(00……59)  
    %s:代表 秒,格式为(00……59) 

    MySQL向数据库表的某字段追加数据

    使用CONCAT()函数

    mysql向表中某字段后追加一段字符串(field为字段名):

    update table_name set field=CONCAT(field,'str',)

    mysql 向表中某字段前加字符串
    update table_name set field=CONCAT('str',field)


    开发常用

    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; -- 当前运行的所有事务
    SELECT * FROM INFORMATION_SCHEMA.innodb_locks; -- 当前出现的锁
    SELECT * FROM INFORMATION_SCHEMA.innodb_lock_waits; -- 锁等待的对应关系

    show processlist   --查看进程列表

    kill 进程号

    查看触发器: show triggers

    查看数据库版本号  select version()

    查看锁  select processList


     sql语句-视图

    #视图。就是一个虚拟表,便于我们对数据进行处理。对视图的DML操作会改变基表数据,但不能改变基表结构,如加字段

    为什么要使用视图:

    <1>安全原因:限制数据的访问(如:社会保险基金表,可以使用视图只显示姓名和地址,而不显示社会的保险号和工资)

    <2>减少复杂的slq语句查询,一般是用查询结果集返回作为视图

    例:

    create view empnew_view as select eid,ename,salary from emp //创建视图

    select * from empnew_view; //查询视图

    insert into empnew_view(eid,ename,salary) values(99,'qi1qi',66) //DML操作

    update emp set ename="qiqi1" where eid=88 //DML操作

    delete from emp where eid=88 //DML操作

    DESC v;

     

    #索引,方便我们的快速查找,方便我们快速查找,对SQL非常有帮助,并不是所有字段都用索引,

    //前提,这个字段经常被当做查询对象操作,是一个表里面不是索引越多越好,根据你的具体,项目来设置,一张表里面与其他表有关系重合的,不适合加索引

    #查看所有所有 index

    SHOW INDEX FROM result;

    TABLE 表 第二个字段0不可以重复,1代表可以重复

    第三个参数:索引名字 第四个是索引下标,从1开始 第五个:字段名 第六个:排序规则, 默认是a

     

    sql语句-触发器

    //创建一个空部门表

    CREATE TABLE emp(

    eid INT(4),

    ename VARCHAR(20),

    epwd VARCHAR(20),

    edate DATE

    );

    ALTER TABLE emp ADD salary DOUBLE(5,2);

    INSERT INTO emp(eid,ename,epwd) VALUES (1,"aa","123");

     

    #创建绩效表

    CREATE TABLE jixiao(

    jname VARCHAR(20),

    jmoney DOUBLE(5,2)

    );

     

    #创建触发器:就相当于你的闹钟,在插入数据之前执行,当emp表插入数据的时候,另一个jixiao表也同时插入数据

    CREATE TRIGGER t_money BEFORE INSERT ON emp FOR EACH ROW

    INSERT INTO jixiao VALUES(new.ename,new.salary*0.5);

     

    #创建触发器2:

    CREATE TRIGGER t_mo BEFORE INSERT ON emp FOR EACH ROW

    UPDATE emp SET money=new.money;

    INSERT INTO emp(eid,ename,salary) VALUES(11,"ee",20);

    UPDATE jixiao SET money=1;

    SELECT * FROM jixiao;

     

    #删除触发器

    DROP TRIGGER t_money;

     

    #展示触发器

    SHOW TRIGGERS;

     

    sql语句---索引

    //创建一个主键索引(唯一,不能为空,不一定是INT)

    ALTER TABLE emp ADD PRIMARY KEY(eid);

    SHOW INDEX FROM emp;

     

    //唯一索引(主键索引在一张表里只能有一个,唯一索引可以有多个);

    #创建唯一索引,#在添加唯一索引时,乱码添加不成功

    ALTER TABLE emp ADD UNIQUE(ename);

     

    #删除索引

    ALTER TABLE emp DROP INDEX ename;

     

    #全局索引作用:便于我们快速查找到某一行

    ALTER TABLE emp ADD INDEX(epwd);

  • 相关阅读:
    如何使用sendEmail发送邮件
    Linux curl命令详解
    linux比较两个文件是否一样(linux命令md5sum使用方法)
    strace命令用法详解
    strace用法说明
    ORA-12154 TNS无法解析指定的连接标识符
    VNC远程连接阿里云Linux服务器 图形界面
    pycharm配置Git 代码管理
    FireFox浏览器-xpath快速定位插件:Xpath Checker
    odoo 前端模板引擎 Qweb
  • 原文地址:https://www.cnblogs.com/binghuaZhang/p/10780421.html
Copyright © 2020-2023  润新知