mysql中每隔一段時間自動執行一次sql語句
mysql要實現定時執行sql語句就要用到Event具體操作如下:先看看看event 事件是否開啟show variables like '%sche%';如沒開啟,則開啟。
需要數據庫超級權限set global event_scheduler =1;創建存儲過程 update_a (注:就是你要執行的sql語句)mysql> create procedure update_a() update a set a.y_avg=(select avg(*) from b where a.a_id=b.a_id);創建一個定時任務:event e_updateA mysql> create event if not exists e_updateA -> on schedule every 60 second ---設置60秒執行一次 -> on schedule at date_add(now(),interval 1 minute) ---在一分鐘后執行 -> on completion preserve -> do call update_a(); ---執行update_a()存儲過程創建Event之后,sql語句就定時執行一次。關閉事件任務mysql> alter event e_updateA ON -> COMPLETION PRESERVE DISABLE;開啟事件任務mysql> alter event e_updateA ON -> COMPLETION PRESERVE ENABLE;如還有問題再聯系我。
MYSQL數據庫如何執行SQL語句
select @a=DRClass1, @b=DRClass2, @c=DRClass3, @d=DRClass4, @e=DRClass5 from Teacher Where TeacherID = @TeacherID create table classname(classname char(50)) insert into classname (classname) values (@a) if (@b is not null) begin insert into classname (classname) values (@b) if (@c is not null) begin insert into classname (classname) values (@c) if (@d is not null) begin insert into classname (classname) values (@d) if (@e is not null) begin insert into classname (classname) values (@e) end end end end select * from classname 以上這些SQL語句能不能轉成一個存儲過程?我自己試了下 ALTER PROCEDURE Pr_GetClass @TeacherID int, @a char(50), @b char(50), @c char(50), @d char(50), @e char(50) as select @a=DRClass1, @b=DRClass2, @c=DRClass3, @d=DRClass4, @e=DRClass5 from Teacher Where TeacherID = @TeacherID DROP TABLE classname create table classname(classname char(50)) insert into classname (classname) values (@a) if (@b is not null) begin insert into classname (classname) values (@b) if (@c is not null) begin insert into classname (classname) values (@c) if (@d is not null) begin insert into classname (classname) values (@d) if (@e is not null) begin insert into classname (classname) values (@e) end end end end select * from classname 但是這樣的話,這個存儲過程就有6個變量,實際上應該只提供一個變量就可以了 主要的問題就是自己沒搞清楚 @a,@b,@C,@d 等是臨時變量,是放在as后面重新做一些申明的,而不是放在開頭整個存儲過程的變量定義。
(標準化越來越近了):namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 實戰SQL語句收集(不斷更新中--) 前言:這里將我編程實踐中遇到的有價值的sql語句一路記下來,一方面方便自己查用,一方面也夯實下即將遺忘的回憶。整個過程中我會不斷更新,直到不能再加為止,同時,這里只記錄最實用的咚咚,不效仿學院派的那一套。
mysql數據庫執行sql語句怎么寫
Mysql常用命令詳解Mysql安裝目錄數據庫目錄/var/lib/mysql/配置文件/usr/share/mysql(*命令及配置文件)相關命令/usr/bin(mysqladmin mysqldump等命令)啟動腳本/etc/init.d/mysql(啟動腳本文件mysql的目錄)系統管理連接MySQL格式: mysql -h 主機地址 -u用戶名 -p用戶密碼例 1:連接到本機上的 MySQL。
hadoop@ubuntu:~$ mysql -uroot -pmysql;例 2:連接到遠程主機上的 MYSQL。hadoop@ubuntu:~$ mysql -h 127.0.0.1 -uroot -pmysql;修改新密碼在終端輸入:mysql -u用戶名 -p密碼,回車進入Mysql。
> use mysql;> update user set password=PASSWORD('新密碼') where user='用戶名';> flush privileges; #更新權限> quit; #退出增加新用戶格式:grant select on 數據庫.* to 用戶名@登錄主機 identified by '密碼'舉例:例 1:增加一個用戶 test1 密碼為 abc,讓他可以在任何主機上登錄,并對所有數據庫有查詢、插入、修改、刪除的權限。首先用以 root 用戶連入 MySQL,然后鍵入以下命令:mysql>grant select,insert,update,delete on *.* to root@localhost identified by 'mysql';或者grant all privileges on *.* to root@localhost identified by 'mysql';然后刷新權限設置。
flush privileges;例 2:如果你不想 root 有密碼操作數據庫“mydb”里的數據表,可以再打一個命令將密碼消掉。grant select,insert,update,delete on mydb.* to root@localhost identified by '';刪除用戶hadoop@ubuntu:~$ mysql -u用戶名 -p密碼mysql>delete from user where user='用戶名' and host='localhost';mysql>flush privileges;//刪除用戶的數據庫mysql>drop database dbname;數據庫操作顯示所有的數據庫mysql> show databases;(注意:最后有個 s)創建數據庫mysql> create database test;連接數據庫mysql> use test;查看當前使用的數據庫mysql> select database();當前數據庫包含的表信息mysql> show tables; (注意:最后有個 s)刪除數據庫mysql> drop database test;表操作備注:操作之前使用“use ”應連接某個數據庫。
建表命令:create table ( [,.. ]);例子:mysql> create table MyClass(> id int(4) not null primary key auto_increment,> name char(20) not null,> sex int(4) not null default '0',> degree double(16,2));獲取表結構命令: desc 表名,或者show columns from 表名例子:mysql> describe MyClassmysql> desc MyClass;mysql> show columns from MyClass;刪除表命令:drop table 例如:刪除表名為 MyClass 的表mysql> drop table MyClass;插入數據命令:insert into [( [,.. ])] values ( 值 1 )[, ( 值 n )]例子:mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);查詢表中的數據查詢所有行mysql> select * from MyClass;查詢前幾行數據例如:查看表 MyClass 中前 2 行數據mysql> select * from MyClass order by id limit 0,2;或者mysql> select * from MyClass limit 0,2;刪除表中數據命令:delete from 表名 where 表達式例如:刪除表 MyClass 中編號為 1 的記錄mysql> delete from MyClass where id=1;修改表中數據命令:update 表名 set 字段=新值,。 where 條件mysql> update MyClass set name='Mary' where id=1;在表中增加字段命令:alter table 表名 add 字段 類型 其他;例如:在表 MyClass 中添加了一個字段 passtest,類型為 int(4),默認值為 0mysql> alter table MyClass add passtest int(4) default '0'更改表名命令:rename table 原表名 to 新表名;例如:在表 MyClass 名字更改為 YouClassmysql> rename table MyClass to YouClass;更新字段內容命令:update 表名 set 字段名 = 新內容update 表名 set 字段名 = replace(字段名, '舊內容', '新內容');例如:文章前面加入 4 個空格update article set content=concat(' ', content);數據庫導入導出從數據庫導出數據庫文件使用“mysqldump”命令首先進入 DOS 界面,然后進行下面操作。
1)導出所有數據庫格式:mysqldump -u [數據庫用戶名] -p -A>[備份文件的保存路徑]2)導出數據和數據結構格式:mysqldump -u [數據庫用戶名] -p [要備份的數據庫名稱]>[備份文件的保存路徑]舉例:例 1:將數據庫 mydb 導出到 e:\MySQL\* 文件中。打開開始->運行->輸入“cmd”,進入命令行模式。
c:\> mysqldump -h localhost -u root -p mydb >e:\MySQL\*然后輸入密碼,等待一會導出就成功了,可以到目標文件中檢查是否成功。例 2:將數據庫 mydb 中的 mytable 導出到 e:\MySQL\* 文件中。
c:\> mysqldump -h localhost -u root -p mydb mytable>e:\MySQL\*例 3:將數據庫 mydb 的結構導出到 e:\MySQL\mydb_* 文件中。c:\> mysqldump -h localhost -u root -p mydb --add-drop-table >e:\MySQL\mydb_*備注:-h localhost 可以省略,其一般在虛擬主機上用。
3)只導出數據不導出數據結構格式:mysqldump -u [數據庫用戶名] -p -t [要備份的數據庫名稱]>[備份文件的保存路徑]4)導出數據庫中的Events格式:mysqldump -u [數據庫用戶名] -p -E [數據庫用戶名]>[備份文件的保存路徑]5)導出數據。
如何記錄MySQL執行過的SQL語句
第一種: 查 Slow query 的 SQL 語法:
log_slow_queries = /var/log/mysql/*
long_query_time = 2 (超過 2秒的 SQL 語法記錄起來, 設短一點來記錄除錯也是一種方法 XD)
第二種: 設 MySQL Replication 用 binlog:
log_bin = /var/log/mysql/* (此檔要用 mysqlbinlog 解來看)
mysql 會將所有 INSERT/UPDATE/DELETE 語法記於此(但是語法可能跟你想的不同), 這是要寫給 SLAVE 用的 log 檔
第三種: 推薦此方法, 將 MySQL 執行的每行指令全都記錄起來:
log = /tmp/*
restart mysql 后, tail -f /tmp/* 就可以看到羅!
補充: 最早前的方法是 mysqldump, 然后執行完后再 mysqldump, 再 diff, 但是在 DB > 1G 后就放棄此方法了 XD
mysql 數據庫 執行語句
1.利用臨時表
select articleid,min(chapterid) chapterid into temp table ttt from 一個表 where chaptertype=1;
delete from 一個表 where chaptertype=1 and articleid not in (select articleid from ttt);
2.這個實際上是替換
update 一個表 set chaptername=right(chaptername,len(chaptername)-len(articlename)) where left(chaptername,len(articlename))=articlename