specification: 規範, 規格, 產品規範, 產品規格, 技術規範, 產品說明書.
如: create_specification, 等等php
建立數據庫時, 顯式地指明, 字符集: create database if not exists db_name [ create_specification]
create_specification: 只包括: 字符集和 校驗規則的指定: [default] character set [=] charset_name [default] collate [=] collation_namehtml
在mysql中, 不少建立命令 的 create_specification中, 都有不少 [缺省的] keys, 包括: [default,] 等號[=] 是最多見的 缺省項.
即:
create schema db_name character set utf8
mysql
synonym: 同義詞: 建立數據庫的另外一個 同義詞是: create schemalinux
performance_schema , 關於性能檢測監視的數據庫;
information_schema, 關於數據的數據,叫元數據, 就是關於mysql中有哪些表, 哪些數據庫, 哪些權限的數據, 基本上是 視圖, 來自基本表, 沒有與之相關的 表文件;
mysql , 這個是mysql系統的核心, 不少信息都放在mysql中, 包括: user表. db表等等;
test; 這個是建立的一個 測試數據庫.sql
schema : 框架, (word中 的結構圖, 模式, 流程圖), 在mysql中, 表示 數據庫的意思: 跟 database基本上是同樣的.shell
mysql_query('set names utf8');
可是, 若是你是要在數據庫自己上進行操做, 好比建立函數, 建立存儲過程, 事件和觸發器等, (前提固然是 你可以接觸數據庫服務器, 並且你還能在上面進程一系列操做), 那麼,你最好仍是將 關於鏈接的 相關字符集 都設置成跟數據庫的字符集同樣的: 好比所有都設置成 utf8. 由於 在存儲過程/function 中, 可能牽涉到 某些字符串的 鏈接/操做函數, 好比 concat 函數, 若是 connection / client/ results(注意是 results複數) 等字符集跟 數據庫不一致的時候, 好比在 win系統中, 默認的就是 gbk字符集和 gbk_chinese_ci的collation, 這就跟數據庫的utf8不一樣, 就會報錯: illegal operation: mixed different charset... 操做是: set character_set_connection/client/results = utf8; 數據庫
若是你有機會/有能力 去 設置 mysql的字符集, 你最好在 項目一開始的時候, 就去把 全部的 字符集進行設置, 讓他們都一致, 一般推薦 統一的 設置成 utf8.vim
fedora中, 有一個 yum/dnf包的管理/更新工具: /usr/libexec/packagekitd, 當 dnf在後臺 更新 /makecache 的時候, 它會鎖定新加入的 dnf命令請求. 能夠將 /usr/libexec/packagekitd 服務包卸載, 就可以禁止軟件的自動更新.segmentfault
dnf/yum的使用, 是獨佔的, 同時只能運行一個dnf進程. 因此若是在後臺更新的時候, 你不能使用dnf去下載安裝軟件的.windows
gnome的輔助工具備兩個: 一個是 tweak-tool, 另外一個工具是dconf-editor. 基本上 tweak-tool 微調工具沒有多大用途, 主要仍是在 dconf-editor中peizhi.
==============
調用的腳本, 應該是linux的腳本 即: *.sh, 能夠是linux中的自帶命令, 也能夠是linux腳本中調用其餘存在於
本地機器上的其餘程序, 好比php命令, mysql命令。
因爲 crontab最可能是以 「每分鐘」 爲時間間隔的, 因此若是要實現, 一分鐘之內, 每隔多少秒爲單位的定時調用, 久須要本身寫代碼了: 好比:
#! bin/bash step=2 # 間隔的秒數, 不能大於60 for ((i=0; i<60; i+=step)); do $(php '/home/php/crontab/tolog.php') sleep $step done exit 0
而後, 建立crontab, 調用ct.sh每分鐘執行一次, 這樣實際上就能達到每2秒鐘執行一次的要求了。
這樣,就不用去管 服務器的配置問題了!!
基本上, 中文的Windows都是以gbk爲系統編碼的, 也就是說, win下的軟件涉及中文編碼字符集問題的時候, 都是以gbk爲編碼的。
無論是什麼編碼, 都是以字符爲單位的
即:無論編碼如何改變轉換, 最終表現出來的 「字符的總的個數 老是不變的」。
使用場合: 凡是須要建立 "會話級" 的表, 即這個表不須要永久存在 , 而只是在 創建會話的時候, 才 "動態"地生成. 並且會話結束, 這個表就自動刪除. 而後再次創建會話連接的時候, 這個表又從新動態生成;
因此, 在不一樣的會話期間, 可使用 相同的 臨時表名稱, 相互之間不會影響;
臨時表也能夠建立在內存中, 只要你在最後的時候, create_table_specification中, 指明type=heap就能夠了 好比: `create temporary table tmp1 select* from t1 type=heap;
使用臨時表最須要注意的是, 臨時表中的數據的刷新和清除. 要注意表中的數據的清理 和無效垃圾數據的影響.最好的預防方法 就是要 顯式的先刪除 drop, 而後再建立, 再插入數據等操做..
在一個會話期, 同一個鏈接內, 臨時表能夠連續使用, 因此再次使用前, 應該注意之前的數據清理問題.
儘可能避免臨時表和 普通表的同名, 由於一旦臨時表由於誤操做等導致鏈接斷開後, 你操做的就是普通表了. 因此這時候的刪除等操做就很是危險, 從而對普通表中的數據產生危險!
很須要注意的一個問題是: 當使用一些 框架的時候, 因爲鏈接是 permanent 持久鏈接的.因此, 使用臨時表的時候, 若是你在多個鏈接間共享的時候, 臨時表中的數據就會重複積累! 要注意這個問題!
create table mem_table(id int(10) not null ) type=heap ;
它的結構存在於磁盤上的 mem_table.frm中, 只是數據存在於內存中的..[臨時表相關配置】 tmp_table_size:指定系統建立的內存臨時表最大大小; http://dev..com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size max_heap_table_size: 指定用戶建立的內存表的最大大小; http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_heap_table_size 注意:最終的系統建立的內存臨時表大小是取上述兩個配置值的最小值。 【 表的設計原則】 使用臨時表通常都意味着性能比較低,特別是使用磁盤臨時表,性能更慢,所以咱們在實際應用中應該儘可能避免臨時表的使用。 若是實在沒法避免,也應該儘可能避免使用磁盤臨時表。 常見的方法有: 1)建立索引:在ORDER BY或者GROUP BY的列上建立索引,這樣能夠避免使用臨時表; 2)分拆很長的列,能夠避免使用磁盤臨時表:通常狀況下,TEXT、BLOB,大於512字節的字符串,基本上都是爲了顯示信息,而不會用於查詢條件,所以表設計的時候,應該將這些列獨立到另一張表。 www.2cto.com 【如何判斷使用了臨時表】 使用explain查看執行計劃,Extra列看到Using temporary就意味着使用了臨時表。
另外
因此 視圖的使用, 就至關於普通表, 在不少重要應用上, 用戶操做的, 和所看到的, 其實不少都是視圖, 而不是基礎表.仍是很重要很必要的.
1. 產生一個隨機小寫字母的函數: 首先要在全局// 設置 [mysqld] 中 定義 log-bin-trust-function-creators=1 1. 函數體: (產生隨機大寫字母的函數, ruc()就只是把 cs的默認值設置爲 26個大寫字母 ) create definer='root'@'localhost' function rlc() returns char(1) begin declare cs char(26) default 'abcdefghijklmnopqrstuvwxyz'; return substr(cs, floor(1+26*rand()), 1); end// -- 隨機產生1個大寫字母 create function ruc() returns char(1) begin declare cs char(26) default 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; return substr(cs, floor(1+26*rand()), 1); end// -- 生成隨機英文名字,並插入到表中 drop procedure if exists sp_genRandEnName; delimiter // create definer='root'@'localhost' procedure sp_genRandEnName(in persons int unsigned) comment 'this is random test data generator' begin declare i int unsigned default 0; declare j int unsigned default 0; declare ename char(20) default ''; declare nl tinyint default 0; -- 英文名字的隨機長度值 , 這個地方看句首的 decalre就要出錯了: 會報錯:ERROR1064(42000) while i<persons do -- 先要將各個變量清0 set ename=''; set j=0; -- 若是j不清零,則j 一開始就會很大 -- 生成隨機名字 ### 這個地方要注意, 就是,mysql的註釋雙橫線 set ename=concat(ename, ruc()); set nl=floor(3+16*rand()); -- 16考慮了j循環從0開始的狀況, j的最終值就不用再減1 repeat ### 注意, while循環用do 和 end while 來作大括號, 而repeat 循環中 是沒有 do的! set ename=concat(ename, rlc()); set j=j+1; until j>nl end repeat; -- 插入到數據表中 insert into `user`(id, name) values('', ename); set i=i+1; end while; end// delimiter ; ------------- 最後 實測可用的 , 經過測試後的 代碼是: truncate user; drop procedure if exists sp_genRandEnName; delimiter // create definer='root'@'localhost' procedure sp_genRandEnName(in persons int unsigned) begin declare i int unsigned default 0; declare j int unsigned default 0; declare ename char(20) default ''; -- 這裏規定 ename的最大長度, 好比爲10 declare nl tinyint default 0; while i<persons do -- 先要將各個變量清0 set ename=''; set j=0; -- 若是j不清零,則j 一開始就會很大 set ename=concat(ename, ruc()); set nl=floor(3+16*rand()); -- nl表示的是 : name length: nl 那麼這裏要跟上面的ename的定義長度要保持一致。若是上面爲10, 那麼這裏就應該是 3+6*rand()... repeat set ename=concat(ename, rlc()); set j=j+1; until j>nl end repeat; insert into `user`(id, name) values('', ename); set i=i+1; end while; end// delimiter ;
// 生成隨機中文名字的 姓和名: http://blog.csdn.net/gjq246/article/details/72771939 -- 生成姓氏和名字的 輔助函數rxing(), rming(); CREATE DEFINER=`root`@`localhost` FUNCTION `rxing`() RETURNS char(1) CHARSET utf8 begin declare cs char(10) default '趙錢孫李周吳鄭王馮陳諸衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻柏水竇章雲蘇潘葛奚範彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂於時傅皮齊康伍餘元卜顧孟平黃和穆蕭尹姚邵堪汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董粱杜阮藍閔席季麻強賈路婁危江童顏郭梅盛林刁鍾徐邱駱高夏蔡田樊胡凌霍虞萬支柯咎管盧莫經房裘幹解應宗丁宣賁鄧鬱單杭洪包諸左石崔吉鈕龔'; -- 經常使用的姓氏漢字, 共190個 return substr(cs, floor(1+190*rand()), 1); end CREATE DEFINER=`root`@`localhost` FUNCTION `rming`() RETURNS char(1) CHARSET utf8 begin declare cs varchar(500) default '明國華建文平志偉東海強曉生光林小民永傑軍金健一忠洪江福祥中正振勇耀春大寧亮宇興寶少劍雲學仁濤瑞飛鵬安亞澤世漢達衛利勝敏羣波成榮新峯剛家龍德慶斌輝良玉俊立浩天宏子鬆克清長嘉紅山賢陽樂鋒智青躍元武廣思雄錦威啓昌銘維義宗英凱鴻森超堅旭政傳康繼翔棟仲權奇禮楠煒友年震鑫雷兵萬星駿倫紹麟雨行才希彥兆貴源有景升惠臣慧開章潤高佳虎根遠力進泉茂毅富博霖順信凡豪樹和恩向道川彬柏磊敬書鳴芳培全炳基冠暉京欣廷哲保秋君勁軒帆若連勳祖錫吉崇鈞田石奕發洲彪鋼運伯滿庭申湘皓承梓雪孟其潮冰懷魯裕翰徵謙航士堯標潔城壽楓革純風化逸騰嶽銀鶴琳顯煥來心鳳睿勤延凌昊西羽百捷定琦聖佩麒虹如靖日詠會久昕黎桂瑋燕可越彤雁孝憲萌穎藝夏桐月瑜沛誠夫聲冬奎揚雙坤鎮楚水鐵喜之迪泰方同濱邦先聰朝善非恆晉汝丹爲晨乃秀巖辰洋然厚燦卓楊鈺蘭怡靈淇美琪亦晶舒菁真涵爽雅愛依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩璇琴素梅玲蕾豔紫珍麗儀夢倩伊茜妍碧芬兒嵐婷菊妮媛蓮娟一'; -- 經常使用 的名字中的 名 漢字. 共400個 return substr(cs, floor(1+400*rand()), 1); end -- 生成隨機2~3個漢字的中文名字的存儲過程 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_genRandChName`(in persons int unsigned) begin declare i int unsigned default 0; declare j int unsigned default 0; declare cname char(3) default ''; declare nl tinyint default 0; while i<persons do set cname=''; set j=0; set cname=concat(cname, rxing()); set nl=floor(1+2*rand()); repeat set cname=concat(cname, rming()); set j=j+1; until j>nl end repeat; insert into `user`(id, name) values('', cname); set i=i+1; end while; end
當在控制檯,用update user set password=password('root') where user='root' and 'host'='localhost';
修改了用戶, 好比root的配置文件後 , 必定 要用 flush privileges;
來 刷新受權, 這時新設置的密碼 才能生效. 不然, 如不刷新權限,即便你設置了新密碼, 再次登陸時,仍然會認爲沒有密碼, 或是以前的密碼, 這樣的話, 就會報錯! 這是實踐 經歷過的.
經過help 可知, 修改數據庫的時候,語法格式是:
alter {database | schema } db_name
alter_specification
注意, 這裏常見的通用方法是: 若是是create, 則是: create _key_ _name_ create_specification
若是是 alter的話,則是: alter _key_ _name_ alter_specification.
mysql> alter database test character set utf8; Query OK, 1 row affected (0.00 sec) mysql> show create database test; +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
1.rescure筆記本
如何強制修改foo簡單密碼
僞裝忘記密碼?
同時開啓兩個字符終端?
linux桌面版確實不如windows穩定, 但服務器就不是一個水平了
linux穩定說的是內核穩定, 不是說圖形界面穩定, 應該極少出現像windows那樣完全死機那樣的問題, gui掛掉,貌似內核還能夠正常運行?
linux的優點再也不桌面
linux系統和圖形界面沒有必然的聯繫
linux內核和圖形界面是經過接口鏈接的, 不是內核的一部分。 而windows的圖形界面是內核的一部分, 因此圖形界面的穩定性不如windows。 可是同時也正因如此, windos內核的穩定性受到gui的影響不如linux穩定。
強行關機後, fedora就不能啓動了, 根本緣由是: 分區表的邏輯錯誤? 使用PQ就是定時炸彈?
強行關機後 當check到根路徑的時候, 就check到錯誤而沒法繼續下去了??
要查看linux的啓動信息, 啓動時一閃而過, 能夠在 啓動後, 經過命令dmesg來查看: dmesg: dump message.
如何把man和info的信息存儲爲文本文件? 如: man tcsh | col -b > tcsh.txt info tcsh -o tcsh.txt -s
linux如何強行退出x: 有時候, 由於程序錯誤, 使鼠標和鍵盤都沒法響應和反應時, 能夠強制退出圖形界面,按ctrl+alt+backspace(不是shift)
1 use test; 2 select * from `user`; select round(rand()*1000) as '隨機數'; 3 delimiter // 4 -- create definer='root'@'localhost' procedure gentd(in count int) 5 -- begin 6 -- select round(rand()*1000) as '隨機數'; 7 /* mysql 不支持 # 註釋? */ 8 drop procedure if exists foo// 9 create procedure foo() 10 begin 11 declare _err integer default 0; 12 declare continue handler for sqlexception set _err=1; 13 14 16 start transaction; -- 這是一條語句! start transaction 後面要加上 分號! 17 insert foo(id, name) values('', 'foo'); 18 insert foo(id, name) values('', 'bar'); 21 22 if _err=1 then 23 select 'ERROR! 回滾操做...'; 24 rollback; 25 else 26 commit; 27 end if; 28 29 select _err as 'status'; 30 31 end// 32 delimiter ; 33 34 call foo(); -- 這句話很重要@ 存儲過程 就跟函數同樣, 你光是 定義它, 建立它沒用, 若是你不執行它, 他是不會自動 執行的! 因此要顯式的 調用 去執行它!!
雜項: 1. commit和 comment的區別, 都是mm 只是後面的兩個字母不一樣, 一個是i, 一個是 en; 查看數據庫中 有哪些函數和 存儲過程, 適用的命令 不是 show functions, show procedures, 而是 show function status, 和 show procedure status
注意 , 函數和 procedure都不要 帶 複數s!
調用函數的時候, 參數個數要 正確, 即便你不用 這個參數的值, 你也要輸入null 來佔位.
一個mysql語句, 能夠是簡單的 insert/select語句, 也能夠是 begin...end 的複合語句, 複合語句中, 能夠包含 變量聲明, 和其餘條件/選擇/循環結構語句等.
1) function與procedure的區別:一個有返回值,一個沒有,僅此而已。上述說法是錯誤的,function和procedure的用法有不少不一樣,整體來講procedure受到的限制較少,function的限制較多;並且procedure可使用out參數返回值,所以儘可能採用procedure