only_full_group_by
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
重啟mysqlsudo service mysql restartmysql5.7以上版本在常會報關(guān)于only_full_group_by的錯誤,可以在sql_mode中關(guān)閉他,網(wǎng)上查找的解查看參數(shù)是否存在mysql> SELECT @@sql_mode; +------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +------------------------------------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @@GLOBAL.sql_mode; +------------------------------------------------------------------------------------------------------------------------+ | @@GLOBAL.sql_mode | +------------------------------------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
重啟mysql
sudo service mysql restart
mysql5.7以上版本在常會報關(guān)于only_full_group_by的錯誤,可以在sql_mode中關(guān)閉他,網(wǎng)上查找的解查看參數(shù)是否存在
mysql> SELECT @@sql_mode; +------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +------------------------------------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @@GLOBAL.sql_mode; +------------------------------------------------------------------------------------------------------------------------+ | @@GLOBAL.sql_mode | +------------------------------------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
MYSQL_HOME 解壓路徑 C:\DevelopTool\MySQL\mysql-5.7.25-winx64
Path %MYSQL_HOME%\bin
先啟動服務(wù):
net start MySQL【或者是MySQL57】
use mysql; GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION; flush privileges;
在了解REST API URI設(shè)計的規(guī)則之前,讓我們快速瀏覽一些我們將要討論的術(shù)語。
REST API使用統(tǒng)一資源標識符(URI)來尋址資源。在當今互聯(lián)網(wǎng)上,充斥著各種各樣的URI設(shè)計規(guī)則,既有像//api.example.com/louvre/leonardo-da-vinci/mona-lisa這樣能夠清楚的傳達API資源模型的文章,也有很難理解的文章,例如://api.example.com/68dd0-a9d3-11e0-9f1c-0800200c9a66 ;Tim Berners-Lee在他的“Axioms of Web Architecture”一文中將URI的不透明度總結(jié)成一句話:
唯一可以使用標識符的是引用對象。在不取消引用時,就不應(yīng)該查看URI字符串的內(nèi)容以獲取其他信息。 ——蒂姆·伯納斯 - 李
客戶端必須遵循Web的鏈接范例,將URI視為不透明標識符。
REST API設(shè)計人員應(yīng)該在考慮將REST API資源模型傳達給潛在的客戶端開發(fā)者的前提下,創(chuàng)造URI。在這篇文章中,我將嘗試為REST API URI 引入一套設(shè)計規(guī)則。
先跳過規(guī)則,URI的通用語法也適用與本文中的URI。RFC 3986定義了通用URI語法,如下所示:
URI = scheme “://” authority “/” path [ “?” query ][ “#” fragment ]
這是作為URI路徑中處理中最重要的規(guī)則之一,正斜杠(/)不會增加語義值,且可能導致混淆。REST API不允許一個尾部的斜杠,不應(yīng)該將它們包含在提供給客戶端的鏈接的結(jié)尾處。
許多Web組件和框架將平等對待以下兩個URI: http://api.canvas.com/shapes/ http://api.canvas.com/shapes
但是,實際上URI中的每個字符都會計入資源的唯一身份的識別中。
兩個不同的URI映射到兩個不同的資源。如果URI不同,那么資源也是如此,反之亦然。因此,REST API必須生成和傳遞精確的URI,不能容忍任何的客戶端嘗試不精確的資源定位。
有些API碰到這種情況,可能設(shè)計為讓客戶端重定向到相應(yīng)沒有尾斜杠的URI(也有可能會返回301 - 用來資源重定向)。
URI的路徑中的正斜杠(/)字符用于指示資源之間的層次關(guān)系。
例如: (http://api.canvas.com/shapes/polygons/quadrilaterals/squares ;
為了使您的URI容易讓人們理解,請使用連字符( - )字符來提高長路徑中名稱的可讀性。在路徑中,應(yīng)該使用連字符代空格連接兩個單詞 。
例如: http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post
一些文本查看器為了區(qū)分強調(diào)URI,常常會在URI下加上下劃線。這樣下劃線(_)字符可能被文本查看器中默認的下劃線部分地遮蔽或完全隱藏。
為避免這種混淆,請使用連字符( - )而不是下劃線
方便時,URI路徑中首選小寫字母,因為大寫字母有時會導致一些問題。RFC 3986將URI定義為區(qū)分大小寫,但scheme 和 host components除外。
例如: http://api.example.com/my-folder/my-doc
HTTP://API.EXAMPLE.COM/my-folder/my-doc 這個URI很好。URI格式規(guī)范(RFC 3986)認為該URI與URI#1相同。
http://api.example.com/My-Folder/my-doc 而這個URI與URI 1和2不同,這可能會導致不必要的混淆。
在Web上,(.)字符通常用于分隔URI的文件名和擴展名。 REST API不應(yīng)在URI中包含人造文件擴展名,來指示郵件實體的格式。相反,他們應(yīng)該依賴通過Content-Type中的header傳遞media type,來確定如何處理正文的內(nèi)容。
http://api.college.com/students/3248234/courses/2005/fall.json http://api.college.com/students/3248234/courses/2005/fall
如上所示:不應(yīng)使用文件擴展名來表示格式。
應(yīng)鼓勵REST API客戶端使用HTTP提供的格式選擇機制Accept request header。
為了是鏈接和調(diào)試更簡單,REST API應(yīng)該支持通過查詢參數(shù)來支持媒體類型的選擇。
keep-it-simple的原則在這里同樣適用。雖然一些”語法學家”會告訴你使用復數(shù)來描述資源的單個實例是錯誤的,但實際上為了保持URI格式的一致性建議使用復數(shù)形式。
本著API提供商更容易實施和API使用者更容易操作的原則,可以不必糾結(jié)一些奇怪的復數(shù)(person/people,goose/geese)。
但是應(yīng)該怎么處理層級關(guān)系呢?如果一個關(guān)系只能存在于另一個資源中,RESTful原則就會提供有用的指導。我們來看一下這個例子。學生有一些課程。這些課程在邏輯上映射到學生終端,如下所示:
http://api.college.com/students/3248234/courses - 檢索id為3248234的學生學習的所有課程的清單。 http://api.college.com/students/3248234/courses/physics -檢索該學生的物理課程
當你在設(shè)計REST API服務(wù)時,您必須注意這些由URI定義的資源。
正在構(gòu)建的服務(wù)中的每個資源將至少有一個URI標識它。這個URI最好是有意義的,且能充分描述資源。URI應(yīng)遵循可預測的層次結(jié)構(gòu),用來提高其可理解性,可用性:可預測的意義在于它們是一致的,它的層次結(jié)構(gòu)在數(shù)據(jù)關(guān)系上是有意義的。
RESTful API是為使用者編寫的。URI的名稱和結(jié)構(gòu)應(yīng)該能夠向使用者傳達更清晰的含義。通過遵循上述規(guī)則,您將創(chuàng)建一個更清晰的的REST API與更友好的客戶端。這些并不是REST的規(guī)則或約束,僅僅是API的增強和補充。
我也建議你來看看http://blog.restcase.com/5-basic-rest-api-design-guidelines/這篇文章。
最后,望大家牢記:你在為你的客戶端設(shè)計API URI,而不僅僅是為你的數(shù)據(jù)。