MySql基本使用方法
一,基本概念
1, 常用的兩種引擎:
(1) InnoDB
a,支持ACID,簡單地說就是支持事務完整性、一致性;
b,支持行鎖,以及類似ORACLE的一致性讀,多用戶並發;
c,獨有的聚集索引主鍵設計方式,可大幅提升並發讀寫性能;
d,支持外鍵;
e,支持崩潰數據自修復;
InnoDB設計目標是處理大容量數據庫系統,它的CPU利用率是其它基於磁盤的關系數據庫引擎所不能比的。
它是一個可靠地事務處理引擎,不支持全文本搜索
(2) MyISAM
a,不支持 每次查詢具有原子性
b,只支持表所
c,強調的是性能,其執行數 度比InnoDB類型更快,但是不提供事務支持
d,如果執行大量的SELECT,MyISAM是更好的選擇
2, 介紹:
a,數據庫-database
保存有組織的數據的容器(通常是一個文件或一組文件)
b,表-table
某種特定類型數據的結構化清單
c,模式-schema
關於數據庫和表的布局及特性的信息
d,列-column
表中的一個字段,所有表都是由一個或多個列組成的
e,行-row
表中的一個記錄
f,數據類型-datatype
所容許的數據的類型。每個表列都有相應的數據類型,它限制(或容許)該列中存儲的數據
二,mysql命令行
1,連接mysql
格式: mysql -h主機地址 -u用戶名 -p用戶密碼
a, 連接到本地MYSQL
首先打開DOS窗口,然后進入目錄mysql\bin,再鍵入命令mysql -u root -p,
回車后提示你輸密碼。 MYSQL的提示符是: mysql> 。(默認root用戶沒有密碼)
b,連接到遠程主機上的MYSQL
假設遠程主機的IP為:218.105.110.116,用戶名為root,密碼為abcd123456。
則鍵入以下命令:mysql -h218.105.110.116 -u root -p abcd123456;(注:u與root之間可以不用加空格,其它也一樣)。
2, 啟動mysql服務
net start mysql
3,停止mysql服務
net stop mysql
4,查詢端口是否沖突
netstat –na | findstr 8080 查看被監聽的端口 , findstr用於查找后面的端口是否存在。
5,退出mysql
quit或者exit退出
6,修改密碼:
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
例如給root修改密碼:
mysqladmin -u root -p ab12 password djg345
三,顯示命令
1.顯示當前數據庫服務器中的數據庫列表
mysql> SHOW DATABASES;
2.顯示某個數據庫中的數據表
mysql> USE 庫名;//使用某個庫
mysql> SHOW TABLES;//列出庫中所有的表
3.顯示數據表的結構
mysql> DESCRIBE 表名;
4.建立數據庫
mysql> CREATE DATABASE 庫名;。
5.建立數據表
mysql> USE 庫名。
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));。
6.刪除數據庫
mysql> DROP DATABASE 庫名;。
7.刪除數據表
mysql> DROP TABLE 表名;。
8.將表中記錄清空
mysql> DELETE FROM 表名;。
9.顯示表中的記錄
mysql> SELECT * FROM 表名;。
10.往表中插入記錄
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);。
11.更新表中數據
mysql-> UPDATE 表名 SET 字段名1=’a',字段名2=’b’ WHERE 字段名3=’c';。
12.用文本方式將數據裝入數據表中
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;。
13.導入.sql文件命令
mysql> USE 數據庫名;。
mysql> SOURCE d:/mysql.sql;。
14.命令行修改root密碼
mysql> UPDATE mysql.user SET password=PASSWORD(’新密碼’) WHERE User=’root’;。
mysql> FLUSH PRIVILEGES;。
15.顯示use的數據庫名
mysql> SELECT DATABASE();。
16.顯示當前的user
mysql> SELECT USER();。
視圖
視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,並為其命名】,用戶使用時只需使用【名稱】即可獲取結果集,並可以將其當作表來使用。
*
FROM
(
SELECT
nid,
NAME
FROM
tb1
WHERE
nid > 2
) AS A
WHERE
A. NAME > 'alex';
觸發器
對某個表進行【增/刪/改】操作的前后如果希望觸發某個特定的行為時,可以使用觸發器,觸發器用於定制用戶對表的行進行【增/刪/改】前后的行為。
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
IF NEW. num = 666 THEN
INSERT INTO tb2 (NAME)
VALUES
('666'),
('666') ;
ELSEIF NEW. num = 555 THEN
INSERT INTO tb2 (NAME)
VALUES
('555'),
('555') ;
END IF;
END//
delimiter ;
存儲過程
存儲過程是一個SQL語句集合,當主動去調用存儲過程時,其中內部的SQL語句會按照邏輯執行。
delimiter \\
create procedure p1(
in i1 int,
in i2 int,
inout i3 int,
out r1 int
)
BEGIN
DECLARE temp1 int;
DECLARE temp2 int default 0;
set temp1 = 1;
set r1 = i1 + i2 + temp1 + temp2;
set i3 = i3 + 100;
end\\
delimiter ;
-- 執行存儲過程
set @t1 =4;
set @t2 = 0;
CALL p1 (1, 2 ,@t1, @t2);
SELECT @t1,@t2;
函數
MySQL中提供了許多內置函數
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int;
set num = i1 + i2;
return(num);
END \\
delimiter ;
事務
事務用於將某些操作的多個SQL作為原子性操作,一旦有某一個出現錯誤,即可回滾到原來的狀態,從而保證數據庫數據完整性。
create PROCEDURE p1(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END;
START TRANSACTION;
DELETE from tb1;
insert into tb2(name)values('seven');
COMMIT;
-- SUCCESS
set p_return_code = 0;
END\\
delimiter ;
存儲過程和函數存在以下幾個區別:
1)一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,可以執行包括修改表等一系列數據庫操作;用戶定義函數不能用於執行一組修改全局數據庫狀態的操作。
2)對於存儲過程來說可以返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變量;而存儲過程可以返回多個。存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。
3)存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。
4)存儲過程一般是作為一個獨立的部分來執行( CALL 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用)。 SQL語句中不可用存儲過程,而可以使用函數
