mysql

2019-01-09  本文已影响0人  BeYearn
  1. varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。

  2. DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表中删除每一行。

  3. 触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySQL数据库中有如下六种触发器:Before Insert、After Insert、Before Update、After Update、Before Delete、After Delete。

  4. mysql获取当前日期: SELECT CURRENT_DATE();

  5. 查询第n高的工资:
    SELECT DISTINCT(salary) from employee ORDER BY salary DESC LIMIT n-1,1

  6. 以下的意义

  1. MySQL存储引擎:
    InnoDB存储引擎(建议) MyISAM存储引擎
  1. 索引

创建索引

索引使用场景

索引创建原则

MySQL索引的注意事项

KEY(a,b,c)
WHERE a = 1 AND b = 2 AND c = 3
WHERE a = 1 AND b = 2
WHERE a = 1
#以上SQL语句可以用到索引
WHERE b = 2 AND c = 3
WHERE a = 1 AND c = 3
#以上SQL语句用不到索引
WHERE name LIKE "%wang%"
#以上语句用不到索引,可以用外部的ElasticSearch、Lucene等全文搜索引擎替代。

mysql索引原理
MySQL索引是用一种叫做聚簇索引的数据结构实现的

  1. mysql关联查询

关联查询语句

SELECT * FROM A,B(,C)或者
SELECT * FROM A CROSS JOIN B (CROSS JOIN C)
#没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义,很少使用
SELECT * FROM A,B WHERE A.id=B.id或者
SELECT * FROM A INNER JOIN B ON A.id=B.id
#多表中同时符合某种条件的数据记录的集合,INNER JOIN可以缩写为JOIN

SELECT * FROM A T1 INNER JOIN A T2 ON T1.id=T2.pid
#自连接
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNION
SELECT * FROM A RIGHT JOIN B ON A.id=B.id

一个小例子
根据需求要搞清楚表的结果和多表之间的关系,根据想要的结果思考使用那种关联方式,通常把要查询的列先写出来,然后分析这些列都属于哪些表,才考虑使用关联查询。
为了记录足球比赛的结果,设计表如下:
team:参赛队伍表
match:赛程表
其中,match赛程表中的hostTeamID与guestTeamID都和team表中的teamID关联,查询2006-6-1到2006-7-1之间举行的所有比赛,并且用以下形式列出:拜仁 2:0 不莱梅 2006-6-21

首先列出需要查询的列:
表team teamID teamName
表match matchID hostTeamID guestTeamID matchTime matchResult
其次列出结果列:
主队 结果 客对 时间
初步

SELECT hostTeamID,matchResult,matchTime guestTeamID from match where matchTime between "2006-6-1" and "2006-7-1";

通过外键关联 完成

select t1.teamName,m.matchResult,t2.teamName,m.matchTime from match as m left join team as t1 on m.hostTeamID = t1.teamID, left join team t2 on m.guestTeamID=t2.guestTeamID where m.matchTime between "2006-6-1" and "2006-7-1";
  1. 拷贝表
    insert into b(a, b, c) select d,e,f from a;
  2. 随机取出10条数据
SELECT * FROM users WHERE id >= ((SELECT MAX(id) FROM users)-(SELECT MIN(id) FROM users)) * RAND() + (SELECT MIN(id) FROM users) LIMIT 10;
#此方法效率比直接用SELECT * FROM users order by rand() LIMIT 10高很多
图片.png
上一篇 下一篇

猜你喜欢

热点阅读