深刻淺出MySQL 數據庫開發、優化與管理維護(第2版) -- 讀書筆記 -- 基礎篇

 

一、切換數據庫php

use blog;

二、顯示當前數據庫 全部的表。mysql

show tables; 
+----------------+
| Tables_in_blog |
+----------------+
| test |
| y2bg_article |
| y2bg_category |
| y2bg_link |
| y2bg_user |
+----------------+

三、顯示指定表的字段信息linux

desc y2bg_user;

+----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO || NULL ||
| password | varchar(64) | NO ||||
| email | varchar(255) | YES || NULL ||
| type | tinyint(1) unsigned | NO || 1 ||
| logo | varchar(255) | YES || NULL ||
| status | tinyint(1) | NO || 0 ||
+----------+---------------------+------+-----+---------+----------------+
7 rows in set

四、顯示錶詳細信息sql

show create table y2bg_user;

| y2bg_user | CREATE TABLE `y2bg_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`username` varchar(255) NOT NULL COMMENT '用戶名',
`password` varchar(64) NOT NULL DEFAULT '' COMMENT '密碼',
`email` varchar(255) DEFAULT NULL COMMENT '電子郵箱',
`type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '類型',
`logo` varchar(255) DEFAULT NULL COMMENT 'Logo',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用戶表' |

五、建表語句數據庫

create table rhythmk(id int(8),name varchar(100),email varchar(200));

六、添加表字段函數

alter table rhythmk add column create_time timestamp;

七、刪除表字段ui

alter table rhythmk drop column create_time;

八、修改表字段名稱spa

alter table rhythmk change email mail varchar(250);

九、修改表字段屬性命令行

alter table rhythmk modify mail varchar(200) NOT NULL COMMENT '用戶郵箱';

備註:
change 、modify 均可以修改表字段屬性, change 修改是須要兩次輸入表字段,而modify 只須要一次輸入表字段屬性, 但 change是能夠修改表字段名稱的 modify是不支持的 。
十、關聯修改:code

update mlog.t_article a INNER JOIN mlog.t_article_tag b
on a.id=b.id
set a.title=CONCAT(a.title,'_update')
where a.id=1;

十一、關聯刪除

DELETE a FROM mlog.t_article a INNER JOIN mlog.t_article_tag b
on a.id=b.id
where a.id=10;

十二、MySQL的擴展SQL中有一個很是有意思的應用WITH ROLLUP,在分組的統計數據的基礎上再進行相同的統計。
按分類統計數量 並求總數據量

select article_id ,COUNT(*) item_count from mlog.t_article_tag GROUP BY article_id WITH ROLLUP;
+------------+------------+

| article_id | item_count |
+------------+------------+

| 3 | 1 |
| 4 | 3 |
| NULL | 4 |
+------------+------------+

3 rows in set

1三、union 與 union all 是將 union 結果進行一次去重處理。

1四、ZEROFILL 添加0佔位符,只是在影響顯示結果,且只能在cmd 或者 linux 命令行才能看到效果,位數不足用O補充,超過位將忽視。

1五、mysql ,字母數字皆佔1位,UTF-8中一個漢字3個字節,GBK中 一個漢字佔用2個字節:

select LENGTH('abc'); -- 3
select LENGTH('abc123'); -- 6
select LENGTH('我來了'); -- 9

select CHAR_LENGTH('abc'); -- 3
select CHAR_LENGTH('abc123'); -- 6
SELECT CHAR_LENGTH('我來了'); -- 3

若是新建一個 varchar(10)的字段 是能夠存放10個字符。 [數字\字母\漢字]皆佔一個字符位。

1六、時間 日期類型:
若是想表示年月日用 Date (1000-01-01~9999-12-31)
若是想表示年月日時分秒 DATETIME (1000-01-01 00:00:00~9999-12-31 23:59:59)
datetime與timestamp區別,timestamp (1970 –2037 ) 範圍相對比較小
1七、char 與 varcahr區別
1>、char 範圍爲 0~255,varchar 範圍爲 0~63 535
2>、char 會將插入字段中的值後面的空格去除掉,varchar 則原樣保存。
3>、存儲空間需求不同
值 CHAR(4) 存儲需求 VARCHAR(4) 存儲需求
」 ’ ’ 4個字節 」 1個字節
‘ab’ ‘ab ’ 4個字節 ‘ab ’ 3個字節
‘abcd’ ‘abcd’ 4個字節 ‘abcd’ 5個字節
‘abcdefgh’ ‘abcd’ 4個字節 ‘abcd’ 5個字節

———— Mysql 中的 運算符
1八、 算術運算符加、減、乘、除、求末運算,以及0爲被除數返回的爲null。

select 1.00+2.00 ,1.00-2.00,1.00*2.00,1.00/2.00,7%2,3/0;

+-----------+-----------+-----------+-----------+-----+------+
| 1.00+2.00 | 1.00-2.00 | 1.00*2.00 | 1.00/2.00 | 7%2 | 3/0 |
+-----------+-----------+-----------+-----------+-----+------+
| 3 | -1 | 2 | 0.5 | 1 | NULL |
+-----------+-----------+-----------+-----------+-----+------+

1 row in set

select mod(10,3)
; //求末 等價 10%3
select 10 div 2; //求餘 等價 10/2

1九、regexp 運算符的使用格式爲 str regexp strpart, 存在想匹配的字符串返回1,
不存在匹配的字符串 返回0

select 'abcdef' regexp 'a'; //1
select 'abcdef' regexp 'k'; //0

——- MYSQL 經常使用字符串函數 –
20、concat (p1,p2 … pn) 鏈接s1,s2,..pn 爲一個字符串。
2一、insert(str,x,y,instr) 將字符串str 從x位開始,y個字符長度,替換爲字符串instr。

SELECT INSERT('abcdefg',1,4,'AAA'); -- AAAefg

2二、LOWER ,UPPER 轉換大小寫函數

SELECT LOWER('abCD');    -- abcd
SELECT UPPER('abCD'); -- ABCD

2三、LEFT,RIGHT 從左右端分別截取字符串函數:

SELECT LEFT('ABCD',2);   -- AB
SELECT RIGHT('ABCD',2); -- CD

2四、LPAD(str,x ,s)|RPAD(str,x ,s)根據提供字符串str,若是長度小於x則左|右補充s字符。

SELECT LPAD('a',5,'#');  -- ####a
SELECT RPAD('a',5,'#'); -- a####

2五、LTRIM 去除左空格,RTRIM 去除右空格,TRIM 去除左右空格。

SELECT LTRIM(' A '); -- A ;
SELECT RTRIM(' A '); -- A;
SELECT TRIM(' ABC '); -- ABC

2六、SUBSTRING(str,x,len) 從x位開始,截取字符串str,len長度。

SELECT SUBSTRING('acbcdef',2,3); -- cbc

2七、REPEAT(str,x) 重複str字符串,x次。

SELECT REPEAT('my ',5);  -- my my my my my 

2八、REPLACE(str,x,y)將字符串str,中x 字符替換成y字符串.

SELECT REPLACE('abcdeabc','a','##')  -- ##bcde##bc

2九、經常使用數值函數

# CEIL(X) 返回大於X的最少整數
SELECT CEIL(11.1); -- 12

#FLOOR(X) 返回小於X的最大整數
SELECT FLOOR(11.9); -- 11

#求模
SELECT MOD(10,3); -- 1

#隨機數
SELECT RAND(); -- 0.03454766891388937

# 四捨五入
SELECT ROUND(12.3356); -- 12
SELECT ROUND(12.3356,2); -- 12.34

#返回指定小數位
SELECT TRUNCATE(12.12345,2); -- 12.12

2九、經常使用時間函數

SELECT NOW();           -- 2016-03-28 14:30:02
SELECT CURDATE(); -- 2016-03-28
SELECT CURRENT_TIME(); -- 14:30:02
SELECT YEAR(NOW()); -- 2016
SELECT MONTH(NOW()); -- 3
SELECT DAY(NOW()); -- 28
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); -- 2016-03-28 14:35:19
SELECT DATE_ADD(NOW(),INTERVAL -1 DAY); -- 2016-03-27 14:36:28
# DATEDIFF(expr1,expr2) 計算兩個日期之間的天數
SELECT DATEDIFF('2016-03-06','2016-03-12'); -- -6

30、IF ,IFNULL, CASE [expr] WHEN | CASE WHEN … END 流程函數

SELECT IF(1=1,'TRUE','FALSE');  -- TRUE
SELECT IFNULL(NULL,0) ; -- 0

SELECT CASE cid when 1 then 'a'
when 2 then 'b'
else '' end
FROM blog.test;


SELECT CASE when cid=1 then 'a'
when cid=2 then 'b'
else '' end
FROM blog.test;
相關文章
相關標籤/搜索