一、數(shù)據(jù)庫SQL:
?????? 1、創(chuàng)建數(shù)據(jù)庫: create database [數(shù)據(jù)庫名稱];?? 例如:create database baseservice;
???????????? 一般項目創(chuàng)建數(shù)據(jù)庫語句如下:
???????????? create database if not exists baseservice default charset utf8 collate utf8_general_ci;
???????????? 該語句的有兩個作用:(1) 如果數(shù)據(jù)庫不存在則創(chuàng)建,存在則不創(chuàng)建;?? (2) 創(chuàng)建RUNOOB數(shù)據(jù)庫,并設(shè)定編碼集為utf8。
??????? 2、刪除數(shù)據(jù)庫:drop database [數(shù)據(jù)庫名];???? 例如:drop database baseservice;
??????? 3、選擇數(shù)據(jù)庫:use [數(shù)據(jù)庫名]; ? ? ? ? ? ? ????????? 例如:use baseservice;
二、數(shù)據(jù)類型:
?????? MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)值數(shù)據(jù)類型。
?????????????? 這些類型包括嚴(yán)格數(shù)值數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、
?????? REAL和 DOUBLE PRECISION)。關(guān)鍵字INT是INTEGER的同義詞,關(guān)鍵字DEC是DECIMAL的同義詞。BIT數(shù)據(jù)類型保存
?????? 位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
?????? 作為SQL標(biāo)準(zhǔn)擴(kuò)展,MySQL也支持整數(shù)類型TINYINT、MEDIUMINT和BIGINT。如下將顯示每個整數(shù)類型的存儲和范圍。



?????????????? CHAR 和 VARCHAR 類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。
????? ? 在存 儲或檢索過程中不進(jìn)行大小寫轉(zhuǎn)換。
??????????????? BINARY 和 VARBINARY 類似于 CHAR 和 VARCHAR,不同的是它們包含二進(jìn)制字符串而不要非二進(jìn)制字符串。也就
???????? 是說,它們包含字節(jié)字符串而不是字符字符串。這說明它們沒有字符集,并且排序和比較基于列值字節(jié)的數(shù)值值。
??????????????? BLOB 是一個二進(jìn)制大對象,可以容納可變數(shù)量的數(shù)據(jù)。有 4 種 BLOB 類型:TINYBLOB、BLOB、MEDIUMBLOB 和
???????? LONGBLOB。它們區(qū)別在于可容納存儲范圍不同。
???????????????? 有 4 種 TEXT 類型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應(yīng)的這 4 種 BLOB 類型,可存儲的最大
???????? 長度不同,可根據(jù)實際情況選擇。
?? ? ? ? 備注:(1) 一個漢字占多少長度與編碼有關(guān): UTF-8:一個漢字=3個字節(jié) , GBK:一個漢字=2個字節(jié)
??????????????????? (2) varchar(n) 表示 n 個字符,無論漢字和英文,Mysql 都能存入 n 個字符,僅是實際字節(jié)長度有所區(qū)別
???????????? ? ???? (3) MySQL 檢查長度,可用 SQL 語言來查看:select LENGTH(fieldname) from tablename
三、數(shù)據(jù)庫函數(shù):
????? 1、日期類函數(shù):date_format(),? 函數(shù)的格式:date_format(date,format)

????????????? 常用的format格式如下:
????????????? 獲取日期和時間,格式:?%Y-%m-%d %T???????????? 例如:select date_format(now(),'%Y-%m-%d %T');??????????? ???? 輸出結(jié)果:2019-09-24 15:15:57
??????????????????????????????????????????????????????? %Y-%m-%d %H:%i:% ?? 例如:? select date_format(now(),'%Y-%m-%d %H:%i:%s');?? 輸出結(jié)果:2019-09-24 15:15:22
????????????? 獲取日期,格式:%Y-%m-%d? ? 例如:select date_format(now(),'%Y-%m-%d');? 輸入結(jié)果:2019-09-24
????????????? 獲取時間,格式:%T? ? ? ? ? ? ? ? ? 例如:select date_format(now(),'%T');??????????????? 輸出結(jié)果:15:16:50
??????????????????????????????????????????? %H:%i:%s????? 例如:select date_format(now(),'%H:%i:%s'); ? ?? 輸出結(jié)果:15:16:50
??????? 2、格式化函數(shù):
????????????? (1)? 第一種參數(shù)格式: from_unixtime( unix_timestamp )? , 參數(shù)一般為10位的時間戳,如:1417363200,返回值:有兩種,可能是類似 'YYYY-MM-DD HH:MM:SS'
???????????????????? 這樣的字符串,也有可能是類似于 YYYYMMDDHHMMSS.uuuuuu 這樣的數(shù)字,具體返回什么取決于該函數(shù)被調(diào)用的形式。
???????????????????? 例如:select from_unixtime(1417363200); ???????????????????? 輸出結(jié)果:2014-12-01 00:00:00
????????????? (2)? 第二種參數(shù)格式:from_unixtime( unix_timestamp, format ) , 參數(shù) unix_timestamp :與方法 FROM_UNIXTIME( unix_timestamp ) 中的參數(shù)含義一樣;
??????????????????? 參數(shù) format : 轉(zhuǎn)換之后的時間字符串顯示的格式;?? 返回值:按照指定的時間格式顯示的字符串;
??????????????????? 例如:select from_unixtime(1417363200,'%Y-%m-%d');???? 輸出結(jié)果:2014-12-01
三、數(shù)據(jù)表SQL:
?????? 1、創(chuàng)建數(shù)據(jù)表格式:create table [數(shù)據(jù)表名] ([列名] [數(shù)據(jù)類型] [可選:默認(rèn)值] [可選:字段備注]); ? ? ? ? ? ? ? // 數(shù)據(jù)表的多個字段之間使用英文逗號隔開
???????????? 例如:create table if not exists `company` (
???????????????????????????? `company_id` int(11) not null AUTO_INCREMENT comment '主鍵,自增',
???????????????????????????? `company_name` varchar(50) not null comment '企業(yè)名稱',
???????????????????????????? `company_logo` text default null comment '企業(yè)base64的logo圖',
???????????????????????????? `company_remark` varchar(255) DEFAULT NULL COMMENT '備注',
???????????????????????????? `update_time` datetime DEFAULT NULL COMMENT '更新時間',
???????????????????????????? `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
????????????????????????? ?? PRIMARY KEY (`company_id`),
???????????????????????????? KEY `company_keys` (`company_name`,`update_time`) USING BTREE
?????????????????????? ? ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='公司表';
?????????????? 實例解析:AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加1。
???????????????????????????????? 如果你不想字段為NULL可以設(shè)置字段的屬性為NOT NULL,在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為NULL,就會報錯。
????????????????????????????????? PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
????????????????????????????????? ENGINE 設(shè)置存儲引擎,CHARSET 設(shè)置編碼。
?????????????? 備注:創(chuàng)建 數(shù)據(jù)表時,表名和字段名的符號`不是單引號,而是英文輸入法狀態(tài)下的反單引號,也就是鍵盤左上角esc按鍵下面的那一個~按鍵。
????????????????????????? 反引號是為了區(qū)分 MySql 關(guān)鍵字與普通字符而引入的符號,一般的,表名與字段名都使用反引號。
??????? 2、刪除數(shù)據(jù)表格式:drop table [數(shù)據(jù)表名];???? 例如:drop table company;
??????? 3、插入數(shù)據(jù)格式:當(dāng)插入所有列值時,格式:insert into value ([列值], [列值],...[列值]);
????????????????????????????????????? 當(dāng)插入非所有列值時,格式:insert into [數(shù)據(jù)表名] ([列名], [列名],...[列名]) value ([列值], [列值],...[列值]);
?????????????????????????????????????? 當(dāng)插入多條記錄值時,格式:insert into [數(shù)據(jù)表名] ([列名], [列名],...[列名]) values ([列值], [列值],...[列值]);
???????????? 例如:insert into company value ('1','創(chuàng)新公司','', '虛擬公司',now(),now());
??????????????????????? insert into company (`company_name`, `company_remark`,`create_time`) value ('創(chuàng)新公司', '虛擬公司',now());
?????????????????????? insert into company (`company_name`, `company_remark`,`create_time`) values ('創(chuàng)新公司', '虛擬公司',now());
??????????????????????? insert into company (`company_name`, `company_remark`,`create_time`) values ('創(chuàng)新公司', '虛擬公司',now()),('奮進(jìn)公司', '虛擬公司',now());
??????? 4、更新數(shù)據(jù)格式:update [數(shù)據(jù)表名] set [列名] = [新列值], [列名] = [新列值] [可選項: where [列值] = [查詢值]]
????????????? 例如:update `company` set `company_id` = '測試公司', `company_remark` = '測試備注' where `company_id` = 1
??????? 5、刪除數(shù)據(jù)格式:delete from [數(shù)據(jù)表名] [可選項: where [條件]]
???????????? 例如:delete from company where company_id = 1;
??????? 6、修改表名或增刪改字段名
???????????? 刪除字段:alter table [數(shù)據(jù)表名] drop [字段名];???
??????????????????????????? 例如:
???????????? 添加字段: alter table [數(shù)據(jù)表名] add [字段名] [數(shù)據(jù)類型] [可選項: first / after [字段名]];
??????????????????????????? 例如:
??????????? 備注:first和after關(guān)鍵字可用于add的語句中,first標(biāo)識在第一個位置添加字段,after標(biāo)識在末尾添加字段(缺省默認(rèn)在末尾添加字段)。
???????????????????? 如果想重置數(shù)據(jù)表字段的位置就需要先使用 drop 刪除字段然后使用 add 來添加字段并設(shè)置位置。
??????? 7、查詢語句格式:select [列名],[列名],...[列名]
????????????????????????????????????? from [數(shù)據(jù)表名]
????????????????????????????????????? [可選項:where [條件]]
????????????????????????????????????? [可選項:limit n [offset m]]
???????????? 例如:select company_id,company_name,company_logo,company_remark
??????????????????????? from company
??????????????????????? where company_id = 2
??????????????????????? limit 0,1
??????? 7、模糊查詢,常用 like 關(guān)鍵字和where 匹配使用,并且通配符如下:
????????????? (1) % : 表示任意 0 個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
????????????? (2) _? : 表示任意單個字符。匹配單個任意字符,它常用來限制表達(dá)式的字符長度語句。
????????????? (3) [] : 表示括號內(nèi)所列字符中的一個(類似正則表達(dá)式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個
????????????? (4) [^] : 表示不在括號所列之內(nèi)的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
????????????? 備注:查詢內(nèi)容包含通配符時,由于通配符的緣故,導(dǎo)致我們查詢特殊字符 “%”、“_”、“[” 的語句無法正常實現(xiàn),而把特殊字符用 “[ ]” 括起便可正常查詢。
??????? 8、聯(lián)合:union ,語法如下:
????????????? select [列名], [列名], [列名] ....? [列名]? from [表名]? where [條件]
????????????? union [ all | distinct ]
????????????? select [列名], [列名], [列名] ....? [列名]? from [表名]? where [條件]
??????????? 備注:distinct 是可選的,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT 修飾符對結(jié)果沒啥影響,
?????????????????????? all 是可選的,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
??????? 9、 排序:order by,語法如下:
????????????? select [列名], [列名],... [列名]
????????????? from [表名]
?????????????? order by [列名] [asc(默認(rèn))/desc], [列名] [asc(默認(rèn))/desc]
????????????? 備注:任何字段來作為排序的條件,從而得到回排序后結(jié)果。你可以設(shè)定多個字段來排序。
???????????????????????? 可以使用 ASC 或 DESC 關(guān)鍵字來設(shè)置查詢結(jié)果是按升序或降序排列。 默認(rèn)情況下,它是按升序排列??梢蕴砑?WHERE...LIKE 子句來設(shè)置條件。
?????? 10、分組: group by,語法如下:
?????????????? select [列名], [列名],... [列名]
?????????????? from [表名]
?????????????? where [條件]
?????????????? group by [列名] ;
?????????????? 備注:group by 可以根據(jù)一個或多個列對結(jié)果集進(jìn)行分組。在分組的列上我們可以使用 count, sum, avg等函數(shù)。