玩转mysql总结:、、mysql中关键字是不需要区分大小写的 例 select SelecT froM 都是可以使用的
mysql基本链接操作:
innerJoin leftJoin(查出左边表所有的数据,即使右边表的数据不匹配也会以空的数据返回) rightJoin(全部返回左边表的数据,即使左边表的数据为空)
mysql存储引擎:
Archive:数据存档引擎(数据行被插入就不能再修改了)
blackhole:写操作是删除数据,读操作时返回(空白)数据
falcon:用来进行事务处理的存储引擎
innodb;具备外键支持的存储引擎
merge:管理由多个myisam数据表构成的数据表集合
myIsam:默认的存储引擎
memory:内存里的数据表
use
show语句
show createdatabases:
查看所有的数据表
show tables;
查看所有的表
show columns from tableName==desc tablename
查看数据表里列的信息
show index from tableName;
查看数据表索引的信息
like 的使用 :
like %s% 语句中包含s的
s% 以s开头
%s 以s结尾
子查询:= <>(not equal) > < >= <= <=>
where(条件判断) 语句里不能使用 聚合函数 该语句的作用是应该选取那些数据行,后面的条件应该是只返回一个值
例:select * from student where id=(select min(student_id) from student);
in notIn的使用
如果你的操作数将返回多个数据行,就可以使用 in 和 notIN
里 select * from student where (studnet_id ,age)in(select student_id,age from student where age>10//该语句返回多个数据行);
All any some
作用是集合一个相对比较操作符,对一个数据列子查询的结果进行测试(测试值用于和子查询的一部分或全部的值进行匹配 例<=any true);
例:select brith from student where britn <= alL(SELECT BRITH FROM STUDNET ); //返回的将是数据表的一部分值
exists 和 notEXISTEST
测试数据是否返回数据行
将子查询改为连接查询
例:select * from score where event_id in(select event_id from grade_event where catagery='T');
转换为简单的连接操作
select * from score whre event_id inner join grade_event on score_id=grade_eventId where catagery='T'
union:默认情况下进行的是连接操作,默认情况union会去除掉重覆的语句行 unionAll将会保留重覆的数据行
若想将union结果作为一个整体进行排序 则需要作如下所示的操作 (select id,name from student)union (select * from sd) order by name;\\
视图的使用:
crate view viewName as select * from student where name=“hellowordd”;
要点:1:默认情况视图中的例与原表中的例相同—若你需要 修改 则使用 create view viewName (viewColumnName,viewColumnName)as select * from studnet;
2:可以使用 orderBY语句和limit语句其效果与在底层数据表中的效果相同的
3:在试图上进行的操作将真正影响到数据库底层的操作。说明对数据库使用是生效的
delete操作的使用
delete from student where id=1; deelte 一次性删除多张表的数据–delete t1 t2 from t1 inner join t2 on t1.id=t2.id;
若想删除不匹配的数据行 则使用 delete t1 t2 from t1 left join t2 on t2.id=t1.id where t2.id is null
事物的特性:acid atomic(原子性(数据的操作是一个原子单元不会被影响)) consistent(一致性数据的操作前后都是一致的,稳定 事物不会把你的数据弄得一团糟) isolate的(孤立性)(数据前后的操作不会相互影响) durable(持久性)数据一旦存储将会永久的保存在数据库
myisam:数据表不支持事物 innodb支持事物
事物的隔离型
脏读:某个事物的修改 在其尚未被提交之前就被其它事物看到
不可重覆读取:两次select查询到的结果不一致
幻读:某个事物看到了其重未见过的数据
innoDb默认是RepeatableRead(三种都是 否否否)
解决事物问题的 非实物解决方案
//使用表的锁定
lockTables unlockTables ()
例 lock tables studnet write;//给stuedent加上一个
//dosomething 例 select * from student where age=10;
unlock tables;
2:使用相对更新操作,不使用绝对更新操作 UPDATE INVENTORY SET QTY=QTY-3 WHERE INVENTROY =10;
外键的创建和使用
foregin key
使用fulltext 索引搜索引擎 针对 myisam引擎
自然语言模式
布尔模式
查询扩展模式
使用的时候 先创建数据表 再创建搜索引擎
例 select * from student where match(attribution) against('helloworld');
null:表示没有数据 数据未知,数据缺失,数据超出范围
给日期加上一个零就可以将其转换为数值
curdate()+0//将日期值转换为数值2009-12-3 20081203
curtime+0
舍弃小数部分
cast(now() as unsigned) 161528.0000000 —-161528
mysql创建存储过程—create procedure proceDureName()
dosomething 例 select * from student;
创建复合语句的存储过程
delimeter $
create procedure greetings()
begin
//声明一个变量
declare use char(22) charascter set utf-8
set use=(select current_user());
if instr(user,'@')>0 then
set user =substring_index(user,'@',1);
end if;
if user='' then #anonymous user
set user ='earthing';
end if;
select concat('Greetings',',user','!') as greeting ;
end;
delimiter ;
存储过程的调用 call greetings()//未完待续。。。。。。。。。