Mysql数据库思维导图 Mysql数据库流程图: mysql数据类型:字符串varcharCHARTINYBLOBTINYTEXTBLOBTEXTMEDIUMBLOBMEDIUMTEXTLONGBLOBLONGTEXT日期DATETIMEYEARDATETIMETIMESTAMP数值TINYINTSMALLINTMEDIUMINTINT或INTEGERFLOATDOUBLEDECIMAL建库建表#建库 CREATEDATABASE IF NOT EXISTS yuesu DEFAULT CHARSET utf8#建表 CREATE TABLE IF NOT EXISTS student( id INT PRIMARY KEY);增删改查增INSERT INTO emp VALUES(''zhangsan'');删DELETE FROM emp WHERE NAME=''lisi'';改UPDATE cs_user SET age=14查基本SELECT * FROM cs_userwhereSELECT * FROM cs_user WHERE age <= 14排序SELECT * FROM cs_user ORDER BY gender分组SELECT * FROM cs_user GROUP BY gender HAVING AVG(age)>14去重SELECT DISTINCT gender FROM cs_user表关联查询内连接SELECT w.*,a.* FROM websites w INNER JOIN access_log a ON w.id=a.site_id左连接SELECT w.*,a.* FROM websites w LEFT JOIN access_log a ON w.id=a.site_id右连接SELECT w.*,a.* FROM websites w RIGHT JOIN access_log a ON w.id=a.site_idunion联合查询SELECT * FROM access_log UNION ALL SELECT * FROM websites全连接SELECT w.*,a.* FROM websites w LEFT JOIN access_log a ON w.id=a.site_id UNION ALL SELECT w.*,a.* FROM websites w RIGHT JOIN access_log a ON w.id=a.site_id三表关联SELECT st.*,sc.* FROM stu st LEFT JOIN score sc ON st.no=sc.noLEFT JOIN sub su ON sc.subno=su.subnoWHERE sc.scroe>60子查询单值SELECT * FROM emp WHERE salary>= (SELECT salary FROM emp WHERE emp_name='王强');多值SELECT * FROM emp WHERE dept_id IN (SELECT dept_id FROM emp WHERE emp_name LIKE '孙%')多值作中间结果F3A视图直接创建CREATE VIEW v_author(编号,姓名) AS SELECT * FROM author WITH CHECK OPTION创建表创建CREATE OR REPLACE VIEW v_blog(编号,标题,内容,作者编号) AS SELECT * FROM blog WITH CHECK OPTION索引普通索引CREATE INDEX index_emp_name ON emp(emp_name);复合索引CREATE INDEX index_title_content ON article(title,content);事务开启BEGIN提交COMMIT回滚ROLLBACK触发器插入DELIMITER $ CREATE TRIGGER abc AFTER INSERT ON student FOR EACH ROW BEGIN INSERT INTO cj(stu_id,stu_name)VALUES(new.stuid,new.username); END $ DELIMITER ;触发INSERT INTO student(username,PASSWORD,birtday) VALUES('王三','111111','2016-08-23'); SELECT * FROM cj存储过程创建DELIMITER $ CREATE PROCEDURE tesa() BEGIN SELECT * FROM student; SELECT * FROM cj; END $ DELIMITER ;调用CALL tesa()查询优化强制使用索引SELECT * FROM T1 FORCE INDEX(IX_ProcessID) WHERE nextprocess =1 AND processid IN(8,32,45)消除顺序读取,使用索引SELECT * FROM orders WHERE customer_num=104 AND order_num>1001UNIONSELECT * FROM orders WHERE order_num=1008;模糊查询where like 首字母'1%'会使用索引SELECT * FROM t2 WHERE NAME LIKE 'L%'COUNT()SELECT (SELECT COUNT(*) FROM cnt) - COUNT(*) FROM cnt WHERE id<=5;数据不兼容会拉低效率INSERT INTO cnt(id)VALUES(11)索引列进行运算会让索引失效SELECT * FROM cnt WHERE age>36避免的情况 !=,<>,is null,is not null, in,not inSELECT COUNT(*) FROM cnt WHERE EXISTS (SELECT age FROM cnt WHERE id >100);合理使用exists,not,exists#后使用where >0SELECT SUM(t1,c1) FROM t1 WHERE (SELECT COUNT(*) FROM t2 WHERE t2.c2=t1.c2>0);#优先使用EXISTSSELECT SUM(t1,c1) FROM t1 WHERE EXISTS (SELECT COUNT(*) FROM t2 WHERE t2.c2=t1.c2);#优先between , 在使用inSELECT * FROM cnt WHERE age BETWEEN 100 AND 200;SELECT * FROM cnt WHERE age IN (20,10,22);#优先distinct,在使用group by 先分组在排序SELECT DISTINCT NAME FROM cnt;SELECT NAME FROM cnt GROUP BY NAME;