【mysql】sql语句的更新和截取

来源:互联网 发布:mysql常用指令 编辑:程序博客网 时间:2024/06/05 01:59

更新

update 表名 set 字段 = 要修改的内容 where 条件

- 字符串拼接

UPDATE t_vbquestion SET Answer1=CONCAT(‘A. ‘,Answer1),Answer2=CONCAT(‘B. ‘,Answer2) where QuestionTypeID=1

- 批量更新

case when

UPDATE t_vbquestion SET ChapterID = (CASE ChapterID WHEN ‘第一章’ THEN ‘1’ WHEN ‘第二章’ THEN ‘2’ WHEN ‘第三章’ THEN ‘3’ ELSE ‘9’ END)

插入

我们一般写好sql脚本,执行批量插入操作,在执行过程中会出现因为有原纪录而中断的失败过程。使用ignore、replace、ON DUPLICATE KEY UPDATE 关键字可以有效的避免,但是前提是用主键primary或者唯一索引对记录进行了唯一性确定。

INSERT IGNORE INTO t_student(id,name) values(‘119030303’,’小红’);
假如数据库中有重复记录,直接返回影响的行数为0,也即没有进行插入

REPLACE INTO t_student(id,name) values(‘119030303’,’小红’);
假如新的记录和旧的记录同时存在,则旧的删除,新的插入。


截取

left() right()
select left(QuestionContent,4) from t_vbquestion

SUBSTRING
UPDATE t_vbquestion SET Answer1=SUBSTRING(Answer1,2)
where QuestionTypeID=1

ltrim() rtrim()
截断空格,没有trim()。

SUBSTRING_INDEX
UPDATE t_vbquestion SET Answer1=SUBSTRING(Answer1,2) where QuestionTypeID=1

存储过程批量更新

BEGIN
DECLARE studentcode char(50) ;
DECLARE enYeartime char(50) ;
DECLARE update_cur CURSOR FOR SELECT code,left(code,2) FROM >tb_student;
declare exit handler for sqlexception rollback;
– 定义一个游标
start transaction;
– 开启游标
OPEN update_cur;
– 遍历所找到的结果集中的所有元素
cursor_loop:loop
FETCH update_cur INTO studentcode,enYeartime;
update tb_student set entranceDate=(select >concat(‘20’,enYeartime,’-09-01’)) where code=studentcode;
end loop cursor_loop;
– 关闭游标
CLOSE update_cur;
commit;
END

基础的东西,平时经常用,会记得好,平时不用,也是会忘记的。

原创粉丝点击