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);

原文地址:https://www.cnblogs.com/binghuaZhang/p/10780421.html