//case 用法 when table.a= ? 时 then ......
select table.s,
case ( table.a
when 1 then table.s *100
when 2 then table.s *1
else table.s *5
end
) as table.a
from table
/* group_concat(x,y) ,x是需要连接的字段,y是连接符号,需要和group by 配合使用
*/
select dept_no,group_concat(emp_no,",") from dept_emp group by dept_no
//sqlite_master包含了所有表的索引
select name as cnts
from sqlite_master where type = 'table'
/*replace(x,y,z) x为被操作的字符串,y为需要被替换的是?,z为替换成?
*/
select (length(",A,B")-length(replace(",A,B",",",""))) as cnt
/*sunstr(x,y,z) x为字符串,y为起始位置,1就是第一个,-1就是倒数第一个,z是截取长度,不填z则默认截取到字符串最后*/
select name from table1 order by substr(name,length(first_name)-1)
//insert/update/add
//after 和 before 来设置触发器执行时间
//new 和 old 可以获得table1被改变前/后的相关列的值
//begin 和 end 之间为触发器的操作
create trigger trigger1 after insert on table1
begin
insert into table2 values(new.id,new.name);
end;
//在表中新加字段
alter table actor add
create_date datetime not null default '0000-00-00 00:00:00'
//创建视图(拿数据单建一个表)
create view a_v(n_v,u_v) as(select name,username from actor);
create view a_v as select name as n_v,usernme as u_v from actor;
//插入或忽略(若已存在)
insert or ignore into actor values
('3','ED','CHASE','2006-02-15 12:34:33');
//插入或更新
insert or replace into actor values
('3','ED','CHASE','2006-02-15 12:34:33');
//唯一索引
create unique index uniq_idx_firstname on actor(first_name);
//普通索引
create index idx_lastname on actor(last_name);
INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
、、
LOCK IN SHARE MODE=FOR UPDATE===========
在可重复读隔离级别下,MVCC版本生成时机在事务的第一次select,但是select分为不加锁和加锁,如果不加锁,那么其他事务就可以对表进行操作----
在此时
- 如果事务2删除了某一行,那么事务1在修改被删除的这一行之后,再次select这一行会发现数据并没有被修改。
- 如果事务2添加了某一行,那么事务1在修改数据时的where如果恰好包含了新增的这一行,那么在再次select时事务1会发现多了一行,出现幻读。
如果加写锁:
1.事务2删除/添加/修改了某一行并且提交,事务1查询时会查询到表的最新版本。
2.事务2删除/添加/修改了某一行但尚未提交,事务1用带写锁的查询会被阻塞,因为不管在任何隔离级别下,删除/添加/修改操作都会被innoDB自动上写锁(排它锁)。
读未提交级别:增删改 有排它锁,查没有。
读已提交级别:增删改 有排它锁,在每次查的时候MVCC会更新一个版本。
可重复度级别:增删改 有排它锁,在第一次查的时候MVCC会更新一个版本,在查询时加了排它锁时会更新到最新版本。
串行化级别:增删改查都自动上排它锁。