数据库Mysql的学习(八)-储存过程和事务和导入导出
生活随笔
收集整理的這篇文章主要介紹了
数据库Mysql的学习(八)-储存过程和事务和导入导出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
儲存過程 DELIMITER // CREATE PROCEDURE pro1() BEGIN SELECT book_id,book_name,category FROM bookinfo t1 JOIN bookcategory t2 ON t1.book_category_id = t2.category_id; END// DELIMITER ;DELIMITER // CREATE PROCEDURE pro2(IN cid CHAR(18),OUT num INT) BEGIN DELETE FROM reader_info WHERE card_id = cid; SELECT COUNT(card_id) INTO num FROM readerinfo; END// DELIMITER ;CALL pro2('21513333333',@num); SELECT @num;儲存過程交換兩個數 DELIMITER // CREATE PROCEDURE pro3(INOUT num1 INT INOUT num2 INT) BEGIN DECLARE t INT DEFAULT 0; SET t=num1; SET num1=num2; SET num2=t; END// DELIMITER ;SET @n1=3,@n2=4; CALL proc3(@n1,@n2); SELECT @n1,@n2; DROP PROCEDURE IF EXISTS proc1;SELECT FLOOR(RAND()*5); 隨機數事務 ROLLBACK 事務回滾 就是不上面寫的都不算 COMMIT 事務提交,就是確認 SET autocommit=0 禁止自動提交 =1為開啟自動提交BEGIN INSERT INTO mytest VALUES(4,'test01'); SAVEPOINT s1; 保存點 INSERT INTO mytest VALUES(4,'test02'); SAVEPOINT s2; INSERT INTO mytest VALUES(4,'test03'); ROLLBACK TO s2; COMMIT; 01 02 會保存 03不會DELIMITER // CREATE PROCEDURE borrowproc(cid CHAR(18),bid INT) BEGIN DECLARE store_num INT; DECLARE money FLOAT(7,3); SELECT store INTO store_num FROM bookinfo WHERE book_id=bid; SELECT balance INTO money FROM readerinfo WHERE card_id=cid; SET autocommit=0; 禁止自動提交 同時也是事務的開始 INSERT INTO borrowinfo VALUES(bid,cid,CURDATE()),DATE_ADD(CURDATE(),INTERVAL 1 MONTH),'否'); UPDATE bookinfo SET store=store-1 WHERE book_id=bid; UPDATE readerinfo SET balance=balance-(SELECT price FROM bookinfo WHERE book_id=bid)*0.5 WHERE card_id =cid; IF store_num=0 OR money<=200 THENROLLBACK; ELSE COMMIT; END IF; END// DELIMITER ;存儲引擎 SHOW ENGINES;查看支持的引擎 INNODB 安全性能較強 MYISAM 不提供事務 有較高的處理效率 MEMORY 存放臨時數據 設置存儲引擎 1.my.ini 中 找到default-STORAGE-ENGINE=INNODB 重啟mysql 2.set default_storage_engine=INNODB 3.創建表時設置 CREATE TABLE mytest(id INT PRIMARY INT,NAME VARCHAR(20))ENGINE =INNODB DEFAULT CHARSET=utf-8;4.alter TABLE test ENGINE=xxx;創建用戶CREATE USER 'rose'@'localhost' IDENTIFIED BY 'rosepwd' 創建了用戶名是rose 主機名是localhost,密碼是rosepwd//用password的哈希值來創建SELECT PASSWORD('roswpwd');xxxxxxxxxxxxxxxxxxxxxxxCREATE USER 'rose'@'localhost' IDENTIFIED BY PASSWORD ' xxxxxxxxxxxxxxxxxxxxxxx' ;用grant創建 可以帶有權限GRANT SELECT,UPDATE ON *.* TO 'testuser'@'localhost' IDENTIFIED BY 'testpwd'; select和update為允許的權限刪除用戶DROP USER 'testuser'@'localhost';DELETE FROM mysql.user WHERE HOST='hostname'AND USER='username';比如GRANT INSERT ,SELECT ON book.* TO 'rose'@'localhost'; 為book數據庫下所有的表設置查找和插入權限FLUSH privileges; 刷新權限表GRANT ALL PRIVILEGES ON *.* TO 'rose'@'localhost';為所有東西設置所有權限錯誤日志SHOW VARIABLES ;數據庫的備份mysqldump -uroot -pmy123 book readerinfo >c:\mysqlbackup\tset1.sql;//備份book下的readerinfo表mysqldump -uroot -pmy123 --databases book mytese >c:\mysqlbackup\tset1.sql;//備份兩個多個數據庫mysqldump -uroot -pmy123 --all-DATABASES >c:\mysqlbackup\tset1.sql;//備份所有數據庫 恢復mysql -uroot -pmy123 book<c:\mysqlbackup\tset1.sql;恢復數據庫下的tset表source c:\mysqlbackup\tset1.sql; 也可以導入導出位置不能隨便my.ini下 找到secure-FILE-priv='xxxxxxxxxxxxx'看這個路徑試什么你將它設置成null 這不允許導出設置成“”則為可以導出到任何位置SELECT * FROM book.readerinfo INTO OUTFILE 'xxxxxxxxxxxxxxxx/文件名。txt';這倆路徑要一樣SELECT * FROM book.readerinfo INTO OUTFILE 'xxxxxxxxxxxxxxxx/文件名。txt'FIELDS TERMINATED BY ',' 設置列與列的分隔符LINES TERMINATED BY '\r\n' 設置行末尾換行符mysql導出文件mysql -uroot -pxxxx --execute='語句(執行并推出)' dbname>filename.txt;mysql -uroot -pmy123 --execute="select * from readerinfo;" book>"xxxxxxxxxxxx" 將book數據庫下的readerinfo表導出到xxxxxxxxx導入命令 LOAD DATA INFILE "xxxxxxxxxxxx" INTO TABLE book.readerinfo;將xxx導入到book下的readerinfo mysqlimport -uroot -pmy123 book "xxxxxxxxxxxxxxx";
?
轉載于:https://www.cnblogs.com/wpbing/p/9223414.html
總結
以上是生活随笔為你收集整理的数据库Mysql的学习(八)-储存过程和事务和导入导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ipad外屏多少钱啊?
- 下一篇: 配置mysql主从服务器