• Mysql 学习笔记


    创建表:

    create table testtable(
        id_ bigint not null AUTO_INCREMENT,
        name varchar(75) null,
        vmid varchar(75) null,
        timeStamp datetime null,
        PRIMARY KEY (id_,timeStamp),
        UNIQUE KEY `findVMMonitor` (vmid,timeStamp) 
    ) engine InnoDB;

    (1)更新记录某个 字段

    update test set status = 1 where id_=9601;

    (2)添加字段 

    ALTER TABLE `test` ADD COLUMN `name` VARCHAR(200) COMMENT '姓名' AFTER `id`;

    (3)修改列类型

    alter table test modify type int(2);

    (4)重命名列

    alter table 表名 change column 更改之前的列名 更改之后的列名 更改之后的列名的数据类型(列的存储空间分配的字节数)

    alter table personnel change column pohto photo varchar(200);

    (5)删除某个列

    alter table test drop column type;

    (6)修改列注释

    alter table test modify width_type varchar(10) comment '类型';

    (7)删除表记录

    -- 清空全部数据,不写日志,不可恢复,速度极快

    truncate table 表名;
     
    -- 清空全部数据,写日志,数据可恢复,速度慢
    delete from 表名
     
    (8)建表添加注释
    id_ bigint  comment '关联表cloud_customer_host'
     
    (9)添加多条记录
    INSERT INTO users(name, age) VALUES('姚明', 25), ('比尔.盖茨', 50), ('火星人', 600); 

    http://blog.163.com/lgh_2002/blog/static/440175262011824837778/

    (10)为表中已有字段设置默认值
    ALTER TABLE test ALTER COLUMN case_status SET DEFAULT 'A';//对于大表不要这么写,否则造成表琐死
    (11)cmd登陆数据库

    mysql -uroot -p 数据库名(root用户名,123456密码)

    输入sql语句

    (12)操作csv文件
    window
    一、导入
    cmd登陆Mysql,输入命令
    load data infile 'd:/1.csv'   
    into table c_money_payout 
    CHARACTER SET utf8//报错,删除该行 fields terminated by
    ',' optionally enclosed by '"' escaped by '"' lines terminated by ' ' ignore 1 lines
    (id, name, data);
    二、导出
    SELECT * FROM c_money_payout
    INTO OUTFILE 'd:/3.csv'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' //字符串将带有双引号 LINES TERMINATED BY ' ';

    Linux

    导出:

    select * from VMMoniterData   
    into outfile '/tmp/test.csv'   
    fields terminated by ',' optionally enclosed by '"' escaped by '"'   
    lines terminated by 'rn';

    导入:

    load data infile '/tmp/test.csv'   
    into table test_info    
    fields terminated by ','  optionally enclosed by '"' escaped by '"'   
    lines terminated by 'rn';   

    参考:http://www.ithao123.cn/content-674396.html

    (13)hibernate mysql分页办法

    http://blog.knowsky.com/255646.htm

    (14)mysqldump 导出、导入数据库

    导出 : C:UsersAdministrator>mysqldump -uroot -proot test > d:/test.dump

    http://www.cnblogs.com/feichexia/p/MysqlDataBackup.html

    http://www.cnblogs.com/zcw-ios/articles/3319480.html

    导入:

    mysql>use 数据库
    然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
    mysql>source d:\wcnc_db.sql(使用cmd窗口)

    http://www.cnblogs.com/zeroone/archive/2010/05/11/1732834.html

    (15)展示所有表 

    mysql> show tables;

    (16)展示所有数据库

    show databases;

    (17)查询表结构

    desc 表名;
    show columns from 表名;
    describe 表名;
    show create table 表名;

    (18)查看、创建和删除索引的方法

    http://www.jb51.net/article/73372.htm

    (19)存储过程

    1、创建

    变量为整形

    DELIMITER //
    create procedure pro10()
    begin
    declare i int;
    set i= (select max(year) from t1)+1;
    while i<90000000
    do
    insert into t1(year,month,day) values(i,i+10,i+20);
    set i=i+1;
    end while;
    end;
    //

    mysql>  DELIMITER ;

    变量为字符串
    DELIMITER // create PROCEDURE pro13(in code VARCHAR(50)) BEGIN select * from c_diary t where t.`id` = code; END //

    命令行创建存储过程分号的解决方法

    创建存储过程in和out实例

    存储过程查询结果赋值到变量的方法

    2、调用

    call pro10();
    call pro10();//cmd

    3、删除

    DROP PROCEDURE pro10;

    4、查看存储过程

    show procedure status; 

    5、查看存储过程创建代码

    show create procedure proc_name; 

     (20)简简单单储存过程——循环一个select结果集

     http://shitou521.iteye.com/blog/1069027

    (21)查看数据库连接池状态

     show processlistG

    (22)定时任务

    创建表:CREATE TABLE aaa (timeline TIMESTAMP);

    查看Events:

    mysql> show eventsG
    mysql> show full eventsG
    mysql> SELECT * FROM mysql.event;
    mysql> SELECT * FROM information_schema.events;

    查看Events是否开启:

    mysql> select @@event_scheduler;
    mysql> show variables like 'event_scheduler';

    开启Events方法:

    mysql> set GLOBAL event_scheduler=ON;
    或
    mysql> set GLOBAL event_scheduler=1;

    当Mysql服务或电脑重启,该设置失效,所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

    在Linux下叫my.cnf,该文件位于/etc/my.cnf

    创建事件:

    DROP EVENT IF EXISTS e_test_insert;
    DELIMITER //
    CREATE EVENT e_test_insert
    ON SCHEDULE 
    EVERY 1 SECOND //每秒执行
    //EVERY 1 DAY //每天执行
    STARTS '2016-11-09 16:03:00' //某个时间点开始,必须是未来的时间
    ON COMPLETION NOT PRESERVE ENABLE DO INSERT INTO aaa VALUES(CURRENT_TIMESTAMP);
    // DELIMITER ;

    starts 值设置 

    参考:http://www.cnblogs.com/chenpi/p/5137310.html

    (23)触发器

    表结构如上,实现功能是:

    当向表插入一条记录时,自动求出此条记录的subNum属性值,计算方法是找到昨天的日期并且是同样id的值的money属性值,跟今天的money相减,如果今天是周一,则找到上周五的记录再相减

    delimiter //
    
    CREATE TRIGGER abc BEFORE INSERT ON product
    
    FOR EACH ROW
    
    BEGIN
    
    DECLARE oldMone INT(10);
    
    DECLARE newMone INT (10);
    
    DECLARE temp INT (10);
    
     
    
    IF WEEKDAY(CURDATE())=0 THEN
    
    SET oldMone=(SELECT money FROM product WHERE dateTime=DATE_SUB(CURDATE(),INTERVAL 3 DAY) AND id=new.id);
    
    -- ELSEIF (ISNULL((SELECT money FROM product WHERE dateTime=DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND id=new.id)))THEN
    
    -- SET oldMone=0;
    
    ELSE
    
    SET oldMone=(SELECT money FROM product WHERE dateTime=DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND id=new.id);
    
    END IF;
    
     
    
    SET newMone=new.money;
    
    SET new.subNum=newMone-oldMone;
    
     
    
    END;
    
    //
    
    delimiter ;

    old是代表要操作的更改前的记录,new是代表要操作的更改后的记录。

    NEW 是新值,OLD 是旧值
    INSERT 只有NEW,UPDATE有NEW和OLD,DELETE只有OLD。

    (24)查看已创建事件

    select * from mysql.event

    查看事件代码

    show create event eventName;

    (25)如何修改unique key

     mysql可以使用unique key来确保数据的准确性,unique key可以是一个字段,也可以是多个字段,对应已经存在的unique key如何修改呢?目前我使用的方法是分两步来完成,先drop掉,然后在创建。需要注意的是drop时关键字是“index”,而创建时关键词是“unique key”,命令如下:

    注意:如果表中已经存在数据,可能会创建失败,原因是col1, col2无法满足unique。

    (26)启、停Mysql服务

     Window:

    net start mysql

    net stop mysql

    Linux:

    service mysqld start

    service mysqld stop

    (27)删除主键

    alter table t1 drop primary key;
    alter table t1 add primary key(year,month,day);

     (28)连接远程Mysql

    mysql -h 192.168.64.76 -umysql -pmysql_NL123

     (29)创建数据库

    CREATE DATABASE meeting DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    (30)导出远程数据库

    mysqldump -h110.1.108.199 -umysql -pmysql449 meeting > d:	est_net.sql

    meeting:数据库 

    导出本地数据库表

    mysqldump -u mysql -p meeting scan_info >meeting_scan_info.sql

    scan_info:表

    (31)sql文件导入

    C:Usersjiangnf>mysql -h localhost -u root -p hello<d:id_useruser.sql(未登录Mysql,执行此sql要保证数据库必须提前存在)

    C:Usersjiangnf>mysql -uroot -proot -h127.0.0.1 shop1 < d:id_usersum_interface_table.sql

    mysql> source D:id_useruser.sql(登录Mysql)

  • 相关阅读:

    Qt5开发实战学习——遇到的知识
    VS2017+Qt5.9.3,VS无法打开纯Qt工程(pro文件)
    QT的OpenGL
    QT之pro文件
    虚拟机网卡还原默认设置
    qt编译QOCI驱动连接oracle数据库
    关于数据库Oracle的创建、连接和Qt的小结
    联想G50-70恢复出厂设置
    移植解决方案到中标麒麟(一)——遇到的一些问题
  • 原文地址:https://www.cnblogs.com/langdangyunliu/p/5342183.html
Copyright © 2020-2023  润新知