mysql使用总结

来源:互联网 发布:金三立官网软件 编辑:程序博客网 时间:2024/06/06 06:41

去年开始,工作中使用nodejs+mysql搭建了一个系统的后端,第一次让sql成为工作中的重要技能,之前一直对sql都非常不熟悉,记录下曾经学过用过的知识是非常必要的。

安装

通过没mysql官网可下载最新版本:http://www.mysql.com/;

windows下操作mysql,可以使用mysql workbench,也可以直接使用命令台指令操作。

登录指令

使用workbench的话,直选择Database->Connect to database,填写好ip跟端口号,用户名密码连接即可;
使用控制台,输入:mysql -u username -p password -h host,即可连接。

建库建表导出导入表

建库:
create database dbname;
建表:
use dbname;create table tablename (id int (20) NOT NULL AUTO_INCREMENT,name varchar(30) NOT NULL,age int(8) NOT NULL,birthday datetime,PRIMARY KEY(id));

增删查改数据

插入数据:
insert into tablename(name, age, birthday) values('tokuchitoa',20, '1979-01-01'),('kujima', 42, '1957-01-01');

删除数据:
由于mysql删除修改数据有安全设定,因此默认是不可删改的,如果要删改,则需要设成可删改模式
set sql_safe_updates = 0;delete from tablename;

修改数据:
update tablename set name = 'tom' where name = 'tokuchitoa';

查找数据:
这是工作中最常使用的命令,有很多种不同的查询方式,这里记下用过的几种:
select * from tablename where name = 'tokuchitoa';select * from tablename where name in ('tokuchitoa', 'kujima');select * from tablename where age > 10 and birthday >= '1979-01-01';select * from tablename where age > 10 or birthday >= '1979-01-01';select distinct name from tablename;select sum(age) as total_age from tablename group by name;

添加新列:
有时候需要改变表的结构,增加一些新列,则用如下sql:
ALTER TABLE `tablename` ADD COLUMN `newcolumn` INT(8) NULL DEFAULT NULL,
使用数据库,通常会支持产生一些数据冗余,因此不会随意删除数据删除列,这里就没了解怎么删除列了,以后用到再补。

定时任务

定时任务可以实现很多功能,我在工作中遇到的场景是,需要将数据按天分开,那就要每天建一个表,可以这样写:
DELIMITER $$SET GLOBAL event_scheduler = ON$$   CREATE EVENT 'eventname' ON SCHEDULE EVERY 1 DAY STARTS '2016-04-03 12:00:00' ON COMPLETION NOT PRESERVE ENABLEDO BEGINDECLARE tablename VARCHAR(128);SET tablename = CONCAT('table_', DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL 1 DAY), '%Y%m%d'));SET @sqlCmd = CONCAT('create table if not exists `',tablename,'` like `',temp_table,'`');PREPARE preStmt FROM @sqlCmd;      EXECUTE preStmt;    END$$DELIMITER ;
先打开event_scheduler,然后建立事件,设定好周期,再写好事件要做的事情(我这里是根据模版表来建一个新表,表名跟时间相关);
这里曾经遇到一个问题,我在本地测试的时候事件经常不生效,或者没有按照周期执行,暂时不知道原因,有时候重启mysql就可以了。

性能分析(索引等)

对于上百万的数据量,查询起来会很耗费性能,因此需要用到索引,建立索引有一个原则,叫做最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4,如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整,建索引可以直接用workbench建立,也可以写sql,如下:
ALTER TABLE tablename ADD INDEX indexname (time,id,name);

在sql前加上explain可以分析出本句sql的一些情况,用于性能优化




0 0
原创粉丝点击