編輯培力/MySQL、PHP、javescipt

出自 全民科學平台
於 2020年1月22日 (三) 00:19 由 丁志仁 (對話 | 貢獻) 所做的修訂 (四、基本SQL命令)
前往: 導覽搜尋
MySQL 放資料
PHP 伺服器端語言,抓資料、顯示資料
javescipt 客戶端語言,作用在瀏覽器上,可以快速便捷地與使用者互動

MySQL

一、登入

http://science4everyone.net/adminer-4.7.5-mysql.php

  1. 伺服器:
  2. 帳號:
  3. 密碼:
  4. 資料庫(可省略):

二、登入後介面(標準介面)

(一)左側選單

  1. 語言:
  2. 版本
  3. 四指令
  4. 目前資料庫的諸資料表
    • 瀏覽各筆
    • 看資料表結構

(二)右側主要工作區

  1. 登出
  2. 四層路徑「系統/伺服器/資料庫/資料表」
  3. 現有層級提示
  4. 可用工作選單
  5. ☆互動工作區

(三)示範資料表

  1. web
  2. webMail
  3. ×××note

(四)建立自己的資料表

  1. create table 表格名 like 既有表格名:使用既有表格的格式創建新表
    • 建好後觀察
    • 觀察完刪掉
  2. 「到 assistant 資料庫/建立資料表」,到指定資料庫有兩種方法。

三、SQL概說

  1. SQL:Structured Query Language。SQL網路資料庫在 MySQL、MSSQL、DB2 語法相同。
  2. NoSQL 網路資料庫,還沒有標準。要資料量極大才算得到,在全民科學平台上還用不到。
  3. 網路資料庫在雲端上,可以多人共編而不會亂掉。
  4. 資料庫系統(如MySQL、MSSQL),包含數個資料庫。
  5. 一個資料庫包含數個資料表(table)。實體上,一個資料庫是一個目錄(資料夾),一張資料表是一個檔案。
  6. 每張資料表由「欄」(column)及「筆」(row,record,tuple)構成。
  7. 每一筆資料的每欄,都放入「值」(value)。
  8. 資料表中用來辨識筆的欄位叫「鍵」(key,primary key),鍵值也可以由許多欄組合而成,每一筆的鍵值必須「唯一」,如姓名不是好的鍵值,身份證字號是好的鍵值。

四、基本SQL命令

小括號( )是指令的一部分;中括號[ ]代表可選用的選項,指令中不一定要下這些指示。

  1. show databases;:秀出現有的資料庫。
  2. create database 資料庫名;:建資料庫。
  3. use 資料庫名;:取用資料庫
  4. show tables;:秀出現用資料庫有那些資料表。
  5. create table 表格名 (欄名 資料型別(欄寬) 預設值,name char(10),);:建資料表。
  6. create table 表格名 like 既有表格名:使用既有表格的格式創建新表
    接著可用「insert 新表 select * from 舊表;」複製資料。
  7. create table 表格名 as select col1,col2… from 既有表格名 definition only:使用既有表格部分欄位創建新表。如果省略 definition only ,則結構和資料都一起複製到新表。新表沿用預設的 Engine、語系編碼,而不是舊表的。
  8. describe 表格名;:秀表格結構。
  9. insert into 表格名 values ('值1','值2',…);:循欄序加一筆資料。
  10. insert into 表格名 values ('值1','值2',…),('值1','值2',…),('值1','值2',…)…;:循欄序加很多筆資料。
  11. insert into 表格名 (欄名1,欄名2,…) values ('值1','值2',…);:只對指定數欄填值,加一筆資料。
  12. insert into 表格名 (欄名1,欄名2,…) select (欄名a,欄名b,…) from…;:批次插入表格內容,select子句中可以含有WHERE、GROUP BY、HAVING、表格連接及別名等等。
  13. insert into 表格名 select * from 另一表格;:表格結構相同,直接照抄內容。
  14. insert into 表格名 set 欄名1='值1',欄名2='值2',…;:只對指定數欄填值,加一筆資料。
  15. REPLACE 的用法與 INSERT INTO 非常接近,不同的地方是:
    在 INSERT INTO 中如果你插入的欄位有唯一性質的索引,例如:PRIMARY KEY, AUTO_INCREMENT, UNIQUE,如果插入資料時真的發生唯一性質的欄位資料重複,那麼這個 INSERT INTO 命令會被忽略而不執行,但是在 REPLACE 中的新資料卻會把重複資料中的舊資料蓋掉。因此 REPLACE 比 INSERT INTO 更具強制性。
  16. 在insert、update命令中,插入欄值如果是123,456等數值,不論欄位的資料型態為何,皆可不加引號而插入;但如果插入之欄值不是數值,則一定要加引號。
  17. select 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數。
  18. select DISTINCT 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數,但所有欄值都相等的諸筆合併為一筆。DISTINCT翻譯為「不同」。
  19. select * from 表格名;:找出全部欄位,全部筆數。
  20. select * from 表格名 where 條件(如name='丁志仁');:找出全部欄位,合條件的筆數。
  21. update 表格名 set 欄名=欄值,欄名=欄值… [where 條件][limit 範圍];:將合條件合範圍的所有筆數,指定欄都換成指定欄值,欄值可以為公式。
    如:「update 表格名 set 欄名=TRIM(BOTH '\r\n' FROM 欄名)」去掉頭尾的空白行。
    「update 表格名 set 欄名=concat(字串1,char(10),char(13),字串2) where tid = xxxxx」插入換行
    「update 表格名 set 欄名=replace(欄名,'abc','char(10)abc') where tid = xxxxx」插入換行
  22. insert與update之值可以是運算,該運算可包含現有欄值(以欄名表示)。
  23. alter table 表格名 add 欄名及欄位描述;:對表格加欄。
  24. alter table 表格名 modify 欄名及欄位描述;:對表格改欄之屬性、欄寬等欄位描述。
  25. delete from 表格名 where 條件 limit 幾筆;:刪合條件的幾筆。
  26. 不可用delete from 表格名 where 條件 limit 自第幾筆始,以下幾筆;:因在delete指令下,limit是指幾筆,不是指範圍。
  27. 4.0版之後開始支援刪多表,其指令類似select,只是以「delete 諸表」取代「select 諸欄」,可以使用left join、on、where組合。
  28. drop table [if exists] 表格名;:刪除資料表。如加「if exists」則找到則刪,避免出現錯誤訊息。
  29. truncate table 表格名;:清空資料表。
  30. drop database [if exists] 資料庫名;:刪除資料庫。
  31. grant all on *.* to 使用者 identified by '通行碼';:給所有權力,在所有資料庫所有表格,給某使用者以某password辨識時。
  32. load data local infile '路徑及檔名' into table 表格名 [fields [欄名1,欄名2…] [terminated by ','] [ENCLOSED BY '"'] [ESCAPED BY '\\']] [LINES TERMINATED BY '\r\n'];:從檔案吃資料進表格。省略欄名則循序給;省略分隔符號則以TAB分隔資料。
    1. 進mysql的預設路徑在/var/lib/mysql
    2. use 資料庫;後預設路徑在/var/lib/mysql/資料庫。但要load data infile一定要use 資料庫。
    3. 省不省略「local」,都可以用絕對路徑(從/寫起)、相對路徑(用.或..)、預設路徑(沒指定路徑)。
    4. 檔名一定要外包引號。
    5. 「fields」管欄名列、terminated by、ENCLOSED BY、ESCAPED BY,四個操作項
    6. 省略「fields 欄名1,欄名2…」等欄名列,循序抓欄值,抓到欄位數完或數據檔中的數據抓完,一定吃。和insert不同。
    7. 省略「terminated by ','」,用TAB(\t)分隔欄值,兩個TAB連在一起,兩個TAB之間還是要算一個空欄值。
    8. 省略「ENCLOSED BY '"'」,數據檔中的"被當作欄值存起來。如下此令,要看檔中數據前後有無成對的"包起來,有就去掉;如果沒有或引號不是前後成對,不去引號,但認定的欄位就很長,長到把欄位分隔符號包進來,導致把好幾欄當一欄。數據也可以改用其他字符來包欄值。
    9. 下「OPTIONALLY」,不知何意,本版本也不支援。
    10. 省略「ESCAPED BY '\\'」,認\為特殊字元,會去反斜。可指定反斜以外的字元為跳脫字元。用「ESCAPED BY 」時,去反斜的功能被抑制,恰可解決許功蓋問題。
    11. 省略「LINES TERMINATED BY」,以\n(換行)為換筆,Windows下的換行「\r\n」,\r會被吃進欄位值。所以要指定「LINES TERMINATED BY '\r\n'」才會正常。
  33. OPTIMIZE TABLE 表名;:最佳化資料表。
  34. flush privileges;:手動讓權限更改生效。