Mysql学习笔记01

本文介绍了MySQL中的触发器创建,包括不同事件和时间的设置,以及解决在更新或删除时先进行选择的问题。此外,还讨论了重命名表、创建外键的操作,以及如何利用GROUP_CONCAT进行字符串合并,使用LIMIT进行分页查询,运用CASE语句处理计算逻辑,并提到了dense_rank()函数在排名中的应用。
摘要由CSDN通过智能技术生成

一、构造一个触发器

create trigger triggerName      
    after/before/        // 触发时间 trigger_time
    insert/update/delete // 监视事件 trigger_event
    on table_name        // 监视地点 table
    for each row         // 这句话在mysql中是固定的
    begin
    sql语句(insert/update/delete);             // 触发事件  trigger_stmt 注意这里要有分号
    end;

二、问题:在MYSQL里,不能先select一个表的记录,在按此条件进行更新和删除同一个表的记录。

解决办法:将select得到的结果,再通过中间表select一遍,这样就规避了错误,这个问题只出现于mysql,mssql和oracle不会出现此问题。

delete from titles_test
where id not in
(
    select * from
    (
        select min(id)
        from titles_test
        group by emp_no
    ) as T1
)

三、重命名表

RENAME TABLE titles_test to titles_2017;
 
ALTER TABLE titles_test RENAME TO titles_2017;

四、创建外键

ALTER TABLE table_name
constraint 约束名 foreign key(外键列)
references 主键表(主键列)
alter table audit add
constraint audit_foreign_key_emp_no foreign key(emp_no)
references employees_test(id)

五、mysql中查找字符串中某个符号或字符出现的次数

select id,length(string)-length(replace(string,",","")) from string

六、字符串截取

select first_name
from employees
order by substring(first_name, (length(first_name)-1), 2) asc;  //subtring(对象字符串,截取的起始位置,截取的字符数)
select first_name
from employees
order by substr(first_name,-2)

七、分组合并

GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接.如果分组中括号里的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。
select dept_no, group_concat(emp_no) as employees
from dept_emp
group by dept_no

八、分页查询

select * from tableName limit i,n 
//tableName:表名 
//i:为查询结果的索引值(默认从0开始),当i=0时可省略i 
//n:为查询结果返回的数量 # i与n之间使用英文逗号","隔开

九、case语法:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

select e.emp_no,
    e.first_name,
    e.last_name,
    eb.btype,
    s.salary,
    (
        case when eb.btype=1  then s.salary*0.1
           when eb.btype=2 then s.salary*0.2
           else s.salary*0.3
        end
     ) as bonus from employees e join emp_bonus eb on e.emp_no=eb.emp_no
           join salaries s on eb.emp_no=s.emp_no
where s.to_date="9999-01-01"

十、dense_rank() 函数,数值相同则排名相同,不会继续+1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值