prooerties mysql_mysql数据库操作相关知识--读书笔记分享
===================
數據庫軟件:
數據庫: 保存特定類型數據的容器
表: 特定類型數據的結構化清單
模式: 關于數據庫和表的布局及特性的信息
列: 表中的一個字段,
行: 表中的一個字段,表中的數據都是按行存儲的,,一行表示一條記錄。
數據類型: 所容許的數據的類型。不同列具有不同的數據類型。
數據類型: 數據類型可限制存儲在列中的數據類型,防止出錯。
主鍵: 表中的每一行都應該有唯一標識自己的一行/一列。
主鍵: 一列/一組列,其值能夠唯一標識表中的每一行記錄
主鍵: 任意兩行都不能具有相同的主鍵;
主鍵: 每行都必須具有一個主鍵值,主鍵值列不允許NULL值。
SQL: 結構化查詢語言,
MYSQL: 是一種DBMS,數據庫管理軟件。
DBMS分兩類: 1.基于共享文件系統的DBMS,2.基于客戶機-服務器的DBMS.
MYSQL Administrator 是一個圖形交互客戶機
Server Information(服務器信息): 顯示客戶機和被連接的服務器的狀態和版本信息。
Server Control(服務控制): 允許停止/啟動Mysql以及指定服務器特性。
User Administration(用戶管理): 用來定義MYsql用戶/登陸和權限。
Catalogs(目錄): 列出可用的數據庫并允許創建數據庫和表。
MYSQL Query Browser: 圖形交互機,用來編寫和執行mysql命令。
/=操作數據庫命令=\\\\\
顯示所有數據庫: SHOW DATABASES;
顯示所有數據表: SHOW TABLES;
顯示某個數據表的所有列記錄: SHOW COLUMNS FROM db_tables;
顯示廣泛的服務器狀態信息: SHOW STATUS;
顯示授予用戶的安全權限: SHOW GRANTS;
顯示錯誤: SHOW ERRORS;
顯示警告: SHOW WARNINGS;
顯示show 更多命令幫助: HELP SHOW;
第4章
多條sql語句以分號;分隔。
SQL語句不區分大小寫。
所有空格都被忽略。
檢索多個列,使用相同的select語句,必須在select關鍵字后面給出多個列名,以逗號分隔。
檢索所有列:SELECT * FROM db_table;
檢索列中不重復的值,使用distinct(不同的)。distinct不能部分使用。
select distinct user_name from db_tables;
限制結果:limit子句;SELECT user_name from db_table LIMIT 5; 限制不多于行。
limit 3,4; 從第三行開始返回4行數據。
使用完全限定的表名:
//數據庫:league, 數據表:db_table, 列字段:user_name,legends
SELECT db_table.user_name FROM db_table;
SELECT db_table.user_name FROM league.db_table;
第5章
排序數據 oerder by子句
子句(clause):SQL語句由子句構成
order by子句可以取一個列或多個列的名字,據此對輸出進行排序
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price,prod_name;
//先根據價格,后根據名稱排序。
指定排序方向:
默認是升序排序:ASC
還可以降序排序:DESC
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name;
//按價格降序,名稱沒有指定,所以默認升序。
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name LIMIT 1;
//只返回一行數據。
order by 子句位于from子句之后;
limit子句必須位于order by之后。
where子句位于from子句之后,order by子句之前。
第6章
過濾數據 where子句
搜索條件(search criteria)
過濾條件(filter condition)
SELECT prod_name,prod_price
FROM product
WHERE prod_price = 2.50;
//只返回價格為2.50的數據。
where子句的操作符:
= 等于
<> 不等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
between 在指定的兩個值之間
檢查單個值:
SELECT prod_name,prod_price
FROM products
WHERE prod_name = 'apple';
檢查價格小于10的產品:
SELECT prod_name, prod_price
FROM products
WHERE prod_price < 10;
不匹配檢查:
SELECT prod_id,prod_name,prod_price
FROM products
WHERE prod_id <>1001;
如果將值與字符串進行比較,字符串需要加引號。
范圍值檢查:
BETWEEN 子句
SELECT prod_name,prod_price
FROM products
WHERE price BETWEEN 5 AND 10;
空值檢查:
NULL 無值(no value) 它不是0,空字符串,也不是空格
SELECT pro_name FROM products WHERE prod_price IS NULL;
第7章
數據過濾
mysql允許給出多個where子句。
以and子句或者or子句的方式使用。
操作符(operator):用來聯結或改變where子句中的關鍵字。
AND操作符:同時滿足and 兩邊
SELECT prod_id,prod_name,prod_price
FROM products
WHERE prod_id = 100 AND prod_price <=10;
OR操作符:只需滿足條件之一即可
SELECT prod_name,prod_price
FROM products
WHERE prod_id =100 OR prod_id =101;
計算次序
WHERE 子句可包含任意數量的AND和OR操作符。
AND和OR聯合同時使用時,優先處理AND子句。
在WHERE子句中使用()圓括號。
IN操作符
IN操作符用來指定條件范圍,范圍中的每個條件都可以進行匹配。
IN取合法值的由逗號分隔的清單,全部在圓括號中。
WHERE pro_name,pro_price
FROM products
WHERE prod_id IN (1001,1015)
ORDER BY prod_price DESC;
IN操作符 和OR操作符具有相同的功能。
IN操作符執行速度比OR更加的快速。
IN操作符可以包含其他的SELECT語句,
能夠更加動態的建立WHERE子句。
NOT操作符
where子句中用來否定后面跟的條件的關鍵字NOT.
SELECT prod_name,prod_price
FROM products
WHERE prod_id NOT IN (1001,1015)
ORDER BY prod_name;
第8章
用通配符進行過濾
LIKE操作符
通配符(wildcard):用來匹配值的一部分的特殊字符。
搜索模式(search pattern):由字面值、通配符或著兩者組合構成的搜索條件。
為了使用通配符,必須使用LIKE操作符。
百分號(%)通配符
% 百分號表示任何字符出現任意次數。
SELECT pro_id, prod_name, FROM products
WHERE pro_name LIEK 'app%';
//表示以app開頭的單詞,app后%表示可以接收任意字符。
%百分號可以在開頭,結尾,中間。
下劃線通配符 下劃線與%百分號用法相同,但下劃線只匹配單個字符而不是多個字符。
SELECT pro_id,prod_name
FROM products
WHERE pro_name LIKE '_app';
// _只匹配一個字符,不能多也不能少。
不要過渡使用通配符,通配符使用會導致搜索變慢。
在確實必須使用通配符,才可使用通配符。
第9章
正則表達式,進行搜索
正則表達式,就是用來匹配文本。
mysql正則表達式,僅為正則表達式。
基本字符匹配
regexp正則表達式
匹配不區分大小寫
進行OR匹配 |
為了搜索兩個字符串之一,使用管道符|
SELECT prod_name
FROM products
WHERE pro_name REGEXP 'apple|huawei'
ORDER BY pro_name;
兩個以上的OR條件,可以多次使用管道符|
匹配幾個字符之一:指定一組[]括起來的字符完成。
SELECT pro_name
FROM pro_name REGEXP '[123]apple'
ORDER BY prod_name;
[123]apple 等價與 [1|2|3]apple
匹配范圍
可以是[012345],[1-5],[6-9],[a-z]
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5]apple'
ORDER BY prod_name;
匹配特殊字符,必須用\\雙斜杠為前導。
REGEXP '\\.' 匹配點.
\\f 換頁
\\n 換行
\\t 回車
\\v 縱向制表符
\\\ 匹配 \
匹配字符類
[:alnum:] --- 匹配任意字母數字(a-zA-Z0-9)
[:alpha:] --- 任意字母(a-zA-Z)
[:blank:] --- 空格和制表([\\t])
[:cntrl:] --- 匹配ASCII控制符
[:digit:] --- 匹配任意數字
[:graph:] --- 匹配任意可打印字符,不包括空格
[:lower:] --- 匹配任意小寫字母
[:print:] --- 匹配任意可打印字符
[:punct:] --- 匹配不在[:alnum:]和[:cntrl:]
[:space:] --- 匹配空格在內的任意空字符(\\f\\n\\r\\t\\v)
[:upper:] --- 匹配大寫字母
[:xdigit:] -- 匹配16進制數字
匹配多個實例
* 匹配0個或多個字符
+ 匹配1個或多個字符
? 匹配0個或1個字符
{n} 匹配指定數目的字符
{n,} 匹配不少以指定數目的字符
{n,m} 匹配數目范圍的字符
SELECT prod_name
FROM products
WHERE pro_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY pro_name;
解釋:
\\( 表示匹配開始
[0-9] 任意數字
sticks? 表示stick或者sticks ;
s后的?表示 s可以有0個,也可以有1個
\\) 表示匹配結束
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;
注:[:digit:] 表示匹配任意數字;{4} 確切的要求它前面的字符出現4次
定位符:匹配特定位置的文本
^ 匹配文本開始
$ 匹配文本結尾
[[:<:>
[[:>:]] 匹配詞的結尾
SELECT prod_price
FROM prod_price REGEXP '^[0-9\\.]'
ORDER BY prod_price;
匹配以小數點開頭的數
第10章
創建計算字段
字段(field):基本上與列(column)的意思相同。
連接字段
連接(concatenate):將值聯接到一起構成單個值。
多數DBMS使用+或||來實現拼接,
而Mysql則使用函數Concat()連接。
SELECT Concat(city_name,'(',country_name,')')
FROM tb_country
ORDER BY country_name;
RTrim()函數去掉值右邊的所有空格
LTrim()函數去掉值左邊的所有空格
別名(alias):是一個字段或值的替換名
對于未命名的列,客戶機無法引用它,就需要使用別名
別名使用AS關鍵字賦予。
SELECT Concat(RTrim(city_name),'(',LTrim(country_name),')')
AS city_country_name
FROM tb_country;
ORDER BY country_name;
執行算術計算
+ 加
_ 減
* 乘
/ 除
第11章
使用函數處理數據
處理文本字符串
數值進行算術運算
處理日期和時間
返回DBMS特定信息
文本處理函數
RTrim() 去掉文本右邊的所有空格
LTrim() 去掉文本左邊的所有空格
Upper() 將字母全部轉換為大寫
Lower() 將字母全部轉換為小寫
Left() 返回字符串左邊的字符
Right() 返回字符串右邊的字符
Length() 返回字符串的長度
Locate() 找出字符串的一個子字符串
Soundex() 返回字符串的SOUNDEX值
SubString() 返回字符串的子字符
SOUNDEX 是一個將任何文本字符串轉換為描述其語音表示的字母數字模式的算法
SOUNDEX 可以進行發音比較而不是字母比較。
日期和時間處理函數
addDate() 添加一個日期(天、周等)
addTime() 添加一個時間(時、分等)
CurDate() 返回當期日期
CurTime() 返回當前時間
Date() 返日期時間的日期部分
DateDiff() 計算兩個日期之差
Date_Add() 高度靈活的日期運算函數
Date_Format() 返回一個格式化的日期或時間
Day() 返回一個日期的天數部分
DayOfWeek() 返回格式日期的對應的星期幾
Hour() 返回一個時間的小數部分
Minute() 返回一個時間的分鐘部分
Month() 返回一個日期的月份部分
Now() 返回當期日期時間
Second() 返回一個時間的秒鐘部分
Time() 返回一個日期時間的時間部分
year() 返回一個日期的年份部分
日期格式必須是yyyy-mm-dd
SELECT cust_id,order_num
FROM orders
WHERE order_date = '2015-05-25';
SELECT cust_id,order_num
FROM orders
WHERE Date(order_date) BETWEEN '2015-05-05' AND '2015-05-25';
數值處理函數
Abs() 返回一個數的絕對值
Cos() 返回一個角度的余弦
Exp() 返回一個數的指數值
Mod() 返回除操作的余數
Pi() 返回圓周率
Rand() 返回一個隨機樹
Sin() 返回一個數的正弦
Sqrt() 返回一個數的平方根
Tan() 返回一個角度的正切
第12章
聚合函數(aggregate):運行在行組上,計算和返回單個值的函數。
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
AVG()函數會自動忽略值為NULL的行
聚合不同值
DISTINCT 不同的,差別的
SELECT AVG(DISTINCT pro_price) AS avg_price
FROM products
WHERE vend_id = 101;
SELECT COUNT(*) AS num_items,
MAX(prod_price) AS price_max,
MIN(prod_price) AS price_min,
AVG(prod_price) AS price_avg
FROM products;
第13章
分組數據
group by子句 (GROUP BY)
having子句 (HAVING)
SELECT COUNT(*) AS num_prods
FROM products
WHERE vend_id =110;
創建分組:group by
SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
過濾分組:having
SELECT cust_id, COUNT() AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT() >= 2;
分組和排序
分組:group by
排序:order by
SELECT order_num,SUM(quantityitem_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantityitem_price) >= 50;
ORDER BY ordertotal;
select……as……from……where……group by……having……order by…… limit……
子句
SELECT 要返回的列或表達式
FROM 要檢索的數據表
WHERE 行級過濾
GROUP BY 分組說明
HAVING 分組過濾
ORDER BY 輸出排序
LIMIT 要檢索的行數
ASC 升序
DESC 降序
第14章
子句查詢
查詢(Query):任何sql語句都是查詢。
sql還允許創建子查詢(subquery),即嵌套在其他查詢中的查詢。
可以利用子查詢進行過濾數據操作
子查詢總是從內向外處理。
SELECT prod_price
FROM products
WHERE
可以利用子查詢進行計算字段操作
相關子查詢(correlated subquery):設計到外部查詢的子查詢。
第15章
聯結(join):用于把來自兩個或多個表的行結合起來
關系表
外鍵(foreign key):定義了兩個表之間的關系,一個表的中的列,包含另一個表的主鍵值。
可伸縮性(scale):能夠適應不斷增加的工作量而不失敗。
當數據存儲在多個表中,使用聯結的方式就可以實現查詢出多個表中的數據。
創建聯結:
SELECT prod_name,prod_price,vend_name
FROM products,vendors
WHERE vendors.vend_id = products.prod_id
ORDER BY vend_name,prod_name
使用完全限定列名:表名.列名
等值聯結(equijoin):基于兩個表之間的相等測試。 也稱:內部聯結
第16章
聚集函數的聯結:
SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num)
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;
第17章
組合查詢union
執行多個查詢語句,并將結果作為單個查詢返回
使用UNION,在SELECT 語句之間放關鍵字UNION
SELECT vend_id,prod_id,prod_price
FROM products
WHERE prod_price <= 5;
UNION
SELECT vend_id,prod_id,prod_price
FROM products
WHERE vend_id IN (1001,1002)
UNION必須由兩條以上的SELECT語句組詞,語句之間用關鍵字UNION
UNION中的每個查詢必須包含相同的列,表達式或集合函數
列數據類型必須兼容,但不必完全相同
第18章
全文本搜索
第19章
數據的插入insert
插入完整的行
插入行的一部分數據
插入多行
插入某些查詢的結果
INSERT INTO Students VALUES(
100,
"小明",
"一班");
完整的插入方式
INSERT INTO Students(
stu_id,
stu_name,
stu_class)
VALUES(
100,
"小明",
"一班");
第20章
更新和刪除數據update
UPDATE Students
SET stu_class = '二年級1班'
WHERE stu_id = '100';
如果要刪除某列的特定行的值,可以使用UPDATE更新為NULL.
刪除表中的數據delete
DELETE FROM students WHERE stu_id = '100';
刪除表中的全部數據:truncate table 語句
第21章
創建表
CREATE TABLE tb_name(
cust_id INT NOT NULL AUTO_INCREMENT,
cust_name CHAR(50) NOT NULL,
cust_addr CHAR(50) NULL DEFAULT '1',
PRIMARY KEY(cust_id)
) ENGINE = InnoDB;
NULL 可以為空值(沒有任何)
NOT NULL 不能為空值
PRIMARY KEY 表示主鍵,主鍵必須唯一。
AUTO_INCREMENT 自動生成創建
DEFAULT 這種默認值
引擎類型:ENGINE = InnoDB 是一個可靠的事務處理引擎,不支持全文搜索。
更新表(插入列/刪除列)
為了更新表定義,可以使用ALERT TABLE語句。
插入列:ALERT TABLE tb_name ADD cust_phone CHAR(20);
刪除列:ALERT TABLE tb_name DROP COLUMN cust_phone;
alert table的常見用途是定義外鍵。
刪除表:DROP TABLE tb_name;
重命名:RENAME TABLE tb_old_name to tb_new_naem;
第22章
視圖
視圖是基于 SQL 語句的結果集的可視化的表
視圖是虛擬的表,視圖只包含使用時動態檢索數據的查詢結果.
視圖并不在數據庫中以存儲的數據值集形式存在.
視圖必須唯一命名
視圖可以嵌套,不能被索引,也不能有關聯的觸發器或默認值
視圖用create view 語句來創建
使用SHOW CREATE VIEW viewname;查看創建視圖的語句.
使用DROP刪除視圖,其語法為DROP VIEW viewname;
CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,prod_id
FROM customers, orers,orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = order.order_num;
以上創建一個名為productcustomers的視圖,它聯結3個表.
視圖如果進行了:
分組,聯結,子查詢,并,聚集函數,DISTINCT,導出,則不能進行更新
第23章
存儲過程
經常需要執行多條語句才能完成一個完整的操作,就需要存儲過程.
存儲過程:就是為了以后的使用而保存的一條或多條sql語句的集合.
1.通過吧處理封裝在容易使用的單元中,簡化操作.
2.保證數據完整性,簡化對變動的管理,提供性能.
MYSQL執行存儲過程的語句為CALL
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
其中執行名為productpricing的存儲過程,
計算并返回產品的最低,最高,平均價格.
創建存儲過程:create procedure
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END;
刪除存儲過程:drop procedure
DROP PROCEDURE productpricing;
檢查存儲過程: SHOW CREATE PROCEDURE productpricing;
獲得創建的詳細信息存儲過程列表:show procedure status;
第25章
觸發器
當某個表發生更改時自動處理.
觸發器是mysql響應一下任意語句(DELETE,INSERT,UPDATE)而自動執行的一條語句
觸發器位于BEGIN和END語句之間的一組語句.
創建觸發器:
1.唯一的觸發器名;2.觸發器關聯的表;3.觸發器響應的活動(insert,delete,update)
4.觸發器何時執行.
觸發器僅僅支持表,不支持視圖
INSERT 觸發器:
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
DELETE觸發器:
CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
INSERT INTO archive_orders(order_num,order_date,cust_id)
VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
END;
UPDATE觸發器
CREATE TRIGGER updatevender BEFORE UPDATE ON venders
FOR EACH ROW SET NEW.vend_state = Uppder(NEW.vend_state);
創建用戶賬戶
CREATE USER語句
CREATE USER anna IDENTIFIED BY '123456';
刪除用戶賬戶
DROP USER anna;
設置訪問權限
SHOW GRANTS FOR anna;
GRANT SELECT ON crashcourse.* TO anna;
更改密碼
SET PASSWORD FOR anna = password('654321');
診斷啟動問題
--help顯示幫助
--safe-mode裝載減去某些最佳配置的服務器.
--verbose顯示全文本消息
--version顯示版本信息然后退出.
查看日志文件
錯誤日志:hostname.err,位于data目錄.
此錯誤日志名可以用--log-error命令更改.
查詢日志:hostname.log.位于data目錄中.
此查詢名字可用--log命令更改.
緩慢查詢日志: hostname-slow.log,位于data目錄.
總結
以上是生活随笔為你收集整理的prooerties mysql_mysql数据库操作相关知识--读书笔记分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mp4怎么转换成mp3?
- 下一篇: mysql导入txt_mysql怎么导入