一唬党、數(shù)據(jù)庫SQL:
?????? 1浪默、創(chuàng)建數(shù)據(jù)庫: create database [數(shù)據(jù)庫名稱];?? 例如:create database baseservice;
???????????? 一般項(xiàng)目創(chuàng)建數(shù)據(jù)庫語句如下:
???????????? create database if not exists baseservice default charset utf8 collate utf8_general_ci;
???????????? 該語句的有兩個(gè)作用:(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。如下將顯示每個(gè)整數(shù)類型的存儲(chǔ)和范圍扰她。
?????????????? CHAR 和 VARCHAR 類型類似兽掰,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同徒役。
????? ? 在存 儲(chǔ)或檢索過程中不進(jìn)行大小寫轉(zhuǎn)換孽尽。
??????????????? BINARY 和 VARBINARY 類似于 CHAR 和 VARCHAR,不同的是它們包含二進(jìn)制字符串而不要非二進(jìn)制字符串忧勿。也就
???????? 是說杉女,它們包含字節(jié)字符串而不是字符字符串。這說明它們沒有字符集鸳吸,并且排序和比較基于列值字節(jié)的數(shù)值值熏挎。
??????????????? BLOB 是一個(gè)二進(jìn)制大對象,可以容納可變數(shù)量的數(shù)據(jù)晌砾。有 4 種 BLOB 類型:TINYBLOB坎拐、BLOB、MEDIUMBLOB 和
???????? LONGBLOB养匈。它們區(qū)別在于可容納存儲(chǔ)范圍不同哼勇。
???????????????? 有 4 種 TEXT 類型:TINYTEXT、TEXT乖寒、MEDIUMTEXT 和 LONGTEXT猴蹂。對應(yīng)的這 4 種 BLOB 類型院溺,可存儲(chǔ)的最大
???????? 長度不同楣嘁,可根據(jù)實(shí)際情況選擇。
?? ? ? ? 備注:(1) 一個(gè)漢字占多少長度與編碼有關(guān): UTF-8:一個(gè)漢字=3個(gè)字節(jié) 珍逸, GBK:一個(gè)漢字=2個(gè)字節(jié)
??????????????????? (2) varchar(n) 表示 n 個(gè)字符逐虚,無論漢字和英文,Mysql 都能存入 n 個(gè)字符谆膳,僅是實(shí)際字節(jié)長度有所區(qū)別
???????????? ? ???? (3) MySQL 檢查長度叭爱,可用 SQL 語言來查看:select LENGTH(fieldname) from tablename
三、數(shù)據(jù)庫函數(shù):
????? 1漱病、日期類函數(shù):date_format(),? 函數(shù)的格式:date_format(date,format)
????????????? 常用的format格式如下:
????????????? 獲取日期和時(shí)間买雾,格式:?%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
????????????? 獲取時(shí)間,格式:%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位的時(shí)間戳嗤军,如: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)換之后的時(shí)間字符串顯示的格式;?? 返回值:按照指定的時(shí)間格式顯示的字符串;
??????????????????? 例如: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ù)表的多個(gè)字段之間使用英文逗號(hào)隔開
???????????? 例如: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 '更新時(shí)間',
???????????????????????????? `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
????????????????????????? ?? PRIMARY KEY (`company_id`),
???????????????????????????? KEY `company_keys` (`company_name`,`update_time`) USING BTREE
?????????????????????? ? ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='公司表';
?????????????? 實(shí)例解析:AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵偿乖,數(shù)值會(huì)自動(dòng)加1钓简。
???????????????????????????????? 如果你不想字段為NULL可以設(shè)置字段的屬性為NOT NULL,在操作數(shù)據(jù)庫時(shí)如果輸入該字段的數(shù)據(jù)為NULL汹想,就會(huì)報(bào)錯(cuò)外邓。
????????????????????????????????? PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵古掏,列間以逗號(hào)分隔损话。
????????????????????????????????? ENGINE 設(shè)置存儲(chǔ)引擎,CHARSET 設(shè)置編碼槽唾。
?????????????? 備注:創(chuàng)建 數(shù)據(jù)表時(shí)丧枪,表名和字段名的符號(hào)`不是單引號(hào),而是英文輸入法狀態(tài)下的反單引號(hào)庞萍,也就是鍵盤左上角esc按鍵下面的那一個(gè)~按鍵拧烦。
????????????????????????? 反引號(hào)是為了區(qū)分 MySql 關(guān)鍵字與普通字符而引入的符號(hào),一般的钝计,表名與字段名都使用反引號(hào)恋博。
??????? 2、刪除數(shù)據(jù)表格式:drop table [數(shù)據(jù)表名];???? 例如:drop table company;
??????? 3私恬、插入數(shù)據(jù)格式:當(dāng)插入所有列值時(shí)债沮,格式:insert into value ([列值], [列值],...[列值]);
????????????????????????????????????? 當(dāng)插入非所有列值時(shí),格式:insert into [數(shù)據(jù)表名] ([列名], [列名],...[列名]) value ([列值], [列值],...[列值]);
?????????????????????????????????????? 當(dāng)插入多條記錄值時(shí)本鸣,格式: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 [列名] = [新列值], [列名] = [新列值] [可選項(xiàng): where [列值] = [查詢值]]
????????????? 例如:update `company` set `company_id` = '測試公司', `company_remark` = '測試備注' where `company_id` = 1
??????? 5、刪除數(shù)據(jù)格式:delete from [數(shù)據(jù)表名] [可選項(xiàng): where [條件]]
???????????? 例如:delete from company where company_id = 1;
??????? 6荣德、修改表名或增刪改字段名
???????????? 刪除字段:alter table [數(shù)據(jù)表名] drop [字段名];???
??????????????????????????? 例如:
???????????? 添加字段: alter table [數(shù)據(jù)表名] add [字段名] [數(shù)據(jù)類型] [可選項(xiàng): first / after [字段名]];
??????????????????????????? 例如:
??????????? 備注:first和after關(guān)鍵字可用于add的語句中闷煤,first標(biāo)識(shí)在第一個(gè)位置添加字段童芹,after標(biāo)識(shí)在末尾添加字段(缺省默認(rèn)在末尾添加字段)。
???????????????????? 如果想重置數(shù)據(jù)表字段的位置就需要先使用 drop 刪除字段然后使用 add 來添加字段并設(shè)置位置鲤拿。
??????? 7辐脖、查詢語句格式:select [列名],[列名],...[列名]
????????????????????????????????????? from [數(shù)據(jù)表名]
????????????????????????????????????? [可選項(xiàng):where [條件]]
????????????????????????????????????? [可選項(xiàng):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 個(gè)或多個(gè)字符∧宦可匹配任意類型和長度的字符久锥,有些情況下若是中文,請使用兩個(gè)百分號(hào)(%%)表示异剥。
????????????? (2) _? : 表示任意單個(gè)字符瑟由。匹配單個(gè)任意字符,它常用來限制表達(dá)式的字符長度語句冤寿。
????????????? (3) [] : 表示括號(hào)內(nèi)所列字符中的一個(gè)(類似正則表達(dá)式)歹苦。指定一個(gè)字符、字符串或范圍督怜,要求所匹配對象為它們中的任一個(gè)
????????????? (4) [^] : 表示不在括號(hào)所列之內(nèi)的單個(gè)字符殴瘦。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個(gè)字符号杠。
????????????? 備注:查詢內(nèi)容包含通配符時(shí),由于通配符的緣故蚪腋,導(dǎo)致我們查詢特殊字符 “%”、“_”姨蟋、“[” 的語句無法正常實(shí)現(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è)定多個(gè)字段來排序讳窟。
???????????????????????? 可以使用 ASC 或 DESC 關(guān)鍵字來設(shè)置查詢結(jié)果是按升序或降序排列。 默認(rèn)情況下敞恋,它是按升序排列丽啡。可以添加 WHERE...LIKE 子句來設(shè)置條件硬猫。
?????? 10补箍、分組: group by,語法如下:
?????????????? select [列名], [列名],... [列名]
?????????????? from [表名]
?????????????? where [條件]
?????????????? group by [列名] ;
?????????????? 備注:group by 可以根據(jù)一個(gè)或多個(gè)列對結(jié)果集進(jìn)行分組啸蜜。在分組的列上我們可以使用 count, sum, avg等函數(shù)坑雅。