Mysql 学习笔记

时间:2023-03-09 06:52:07
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 '\n'
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 '\n';

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:\Users\Administrator>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 processlist\G

(22)定时任务

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

查看Events:

mysql> show events\G
mysql> show full events\G
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 即可,如下:

Mysql 学习笔记

在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)触发器

Mysql 学习笔记

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

当向表插入一条记录时,自动求出此条记录的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”,命令如下:

Mysql 学习笔记

注意:如果表中已经存在数据,可能会创建失败,原因是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:\test_net.sql

meeting:数据库

导出本地数据库表

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

scan_info:表

(31)sql文件导入

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

C:\Users\jiangnf>mysql -uroot -proot -h127.0.0.1 shop1 < d:\id_user\sum_interface_table.sql

mysql> source D:\id_user\user.sql(登录Mysql)