玩转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()//未完待续。。。。。。。。。