數(shù)據(jù)庫常用操作整理

一、數(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ù)類型的存儲和范圍。

數(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 格式說明

????????????? 常用的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ù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容