文章編號:10750時間:2024-09-29人氣:
時間戳是表示特定時間的數(shù)字,通常以 Unix 時間戳的形式存儲,它從 1970 年 1 月 1 日午夜開始以秒為單位計數(shù)。
在 MySQL 中,時間戳是使用
TIMESTAMP
或
DATETIME
數(shù)據(jù)類型存儲的。這些數(shù)據(jù)類型允許您存儲日期、時間和時區(qū)信息。
MySQL 提供了多種函數(shù)來處理時間戳,包括:
NOW()
:返回當(dāng)前時間戳。
CURDATE()
:返回當(dāng)前日期。
CURTIME()
:返回當(dāng)前時間。
TIMESTAMPADD(unit, interval, timestamp)
:將指定的時間間隔添加到時間戳中。
TIMESTAMPDIFF(unit, timestamp1, timestamp2)
:計算兩個時間戳之間的差異。
SELECT NOW(); -- 獲取當(dāng)前時間戳SELECT CURDATE(); -- 獲取當(dāng)前日期SELECT CURTIME(); -- 獲取當(dāng)前時間SELECT TIMESTAMPADD(HOUR, 1, NOW()); -- 將 1 小時添加到當(dāng)前時間戳SELECT TIMESTAMPDIFF(DAY, '2023-01-01', '2023-02-01'); -- 計算兩個日期之間的天數(shù)
您還可以使用時間戳在 MySQL 查詢中過濾和排序數(shù)據(jù)。例如:
SELECT FROM orders WHERE order_date > NOW() - INTERVAL 30 DAY; -- 獲取過去 30 天內(nèi)的所有訂單SELECT FROM users ORDER BY last_login_date DESC; -- 按用戶最后登錄日期降序排序
DISTINCT
關(guān)鍵字可用于從查詢結(jié)果中刪除重復(fù)的行。在處理時間戳數(shù)據(jù)時,這非常有用,因為它可以幫助您避免重復(fù)的時間戳。
SELECT DISTINCT order_date FROM orders; -- 獲取所有不同的訂單日期SELECT DISTINCT last_login_date FROM users; -- 獲取所有不同的用戶最后登錄日期
時間戳操作是 MySQL 中一項重要任務(wù)。通過使用函數(shù)和查詢,您可以輕松處理時間戳數(shù)據(jù),并根據(jù)時間范圍過濾和排序數(shù)據(jù)。
DISTINCT
關(guān)鍵字還可以幫助您從查詢結(jié)果中刪除重復(fù)的行。
探究MySQL數(shù)據(jù)庫中的logs表詳解MySQL是一種當(dāng)今最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),用于存儲和管理數(shù)據(jù)。 在MySQL中,表是一個核心的概念,可以理解為一個以二維表格形式組織數(shù)據(jù)的集合。 在這些表中,logs表是一個特殊的表,它用于存儲系統(tǒng)中產(chǎn)生的所有事件日志。 此外,logs表還是MySQL中一個相當(dāng)重要的表,因為它包含了系統(tǒng)中的所有操作記錄和事件日志,這些信息是系統(tǒng)管理者進行系統(tǒng)維護和故障排查的重要依據(jù)。 那么,如何使用MySQL來創(chuàng)建和管理logs表呢?這里我們先來了解一下logs表的基本結(jié)構(gòu)和屬性,然后再通過一些示例來演示如何對其進行操作。 logs表的基本結(jié)構(gòu)和屬性logs表一般包含以下基本屬性:id、user_id、user_ip、event、data和created。 其中,id是logs表的唯一標(biāo)識符,其數(shù)據(jù)類型為整型,并且通過主鍵約束來保證數(shù)據(jù)的唯一性。 user_id是用戶或者客戶端的標(biāo)識符,user_ip是用戶或者客戶端的網(wǎng)絡(luò)地址,event是事件類型的描述,data是事件數(shù)據(jù)的附加說明信息,created則是事件發(fā)生的時間戳。 此外,在實際應(yīng)用中,logs表還可以根據(jù)具體需求添加其他屬性,如event_type、operation_type、module_name等。 創(chuàng)建logs表在MySQL中,使用CREATE TABLE語句可以創(chuàng)建新的表。 下面是一個創(chuàng)建logs表的示例代碼:CREATE TABLE `logs` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,`user_id` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘用戶ID’,`user_ip` varchar(20) NOT NULL DEFAULT ” COMMENT ‘用戶IP’,`event` varchar(1000) NOT NULL DEFAULT ” COMMENT ‘事件’,`data` text COMMENT ‘?dāng)?shù)據(jù)’,`created` int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘時間’,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’日志表’;通過該語句,我們可以創(chuàng)建一個名為logs的新表,該表包含上述基本屬性,并且使用InnoDB引擎作為存儲引擎,并且使用utf8mb4字符集。 在創(chuàng)建表時,我們還可以設(shè)置表的注釋,以方便后續(xù)的管理和維護。 插入數(shù)據(jù)在創(chuàng)建logs表之后,我們就可以開始將數(shù)據(jù)插入表中以記錄日志信息。 在MySQL中,一般使用INSERT INTO語句來向表中插入數(shù)據(jù),下面是一個常用的插入數(shù)據(jù)的示例:INSERT INTO `logs` (`user_id`, `user_ip`, `event`, `data`, `created`) VALUES (‘123’, ‘192.168.0.1’, ‘用戶登錄’, ‘{“username”: “test”, “status”: “success”}’, UNIX_TIMESTAMP());通過該語句,我們可以向logs表中插入一條用戶登錄的日志信息,該信息包括用戶ID、用戶IP、事件描述、事件數(shù)據(jù)和時間戳。 需要注意的是,其中事件數(shù)據(jù)是JSON格式的字符串,在使用時需要進行合理轉(zhuǎn)換。 查詢數(shù)據(jù)在記錄了大量的日志信息之后,我們需要從logs表中提取出來一些有用的信息用于分析和決策。 在MySQL中,通常使用SELECT語句來查詢表中的數(shù)據(jù)。 下面是一個查詢logs表中所有事件類型的示例:SELECT DISTINCT `event` FROM `logs` ORDER BY `event` ASC;通過該語句,我們可以查詢logs表中所有事件類型的列表,并按照事件類型的字母順序排序。 需要注意的是,該查詢語句還使用了DISTINCT關(guān)鍵字來去除重復(fù)的事件類型,以便于后續(xù)的分析處理。 刪除數(shù)據(jù)在一些特殊情況下,我們需要從logs表中刪除一些已經(jīng)記錄的日志信息。 在MySQL中,一般使用DELETE語句來刪除表中的數(shù)據(jù)。 下面是一個刪除指定事件類型的示例:DELETE FROM `logs` WHERE `event`=’用戶登錄’;通過該語句,我們可以刪除logs表中所有事件類型為“用戶登錄”的日志信息。 需要注意的是,該操作是不可逆的,可能會導(dǎo)致數(shù)據(jù)的丟失,因此在進行刪除操作時一定要謹(jǐn)慎操作。 總結(jié)在今天的文章中,我們詳細探討了MySQL數(shù)據(jù)庫中的logs表的創(chuàng)建、插入、查詢和刪除操作。 通過深入了解logs表的基本結(jié)構(gòu)和屬性,我們可以更好地利用MySQL來管理和維護系統(tǒng)的日志信息。 相信這篇文章能夠?qū)ο胍钊雽W(xué)習(xí)MySQL和系統(tǒng)管理的讀者有一些幫助。
兩種方法,一種是查詢重復(fù)的數(shù)據(jù),只查詢重復(fù)記錄,不管其余信息,如ID什么的:
先明確兩個概念
數(shù)據(jù)庫的定義:數(shù)據(jù)庫是“按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫”。 是一個長期存儲在計算機內(nèi)的、有組織的、可共享的、統(tǒng)一管理的大量數(shù)據(jù)的集合。 俗稱Database(DB)
數(shù)據(jù)庫管理軟件:對數(shù)據(jù)庫進行管理和控制,包括了增刪查改等操作,使用和維護數(shù)據(jù)庫。俗稱DataBase Management System(DBMS)
安裝配置啟動MySQL可能是Windows,Mac,Linux,Dokcer等安裝方式,網(wǎng)上的安裝教程很多 為了快速啟動學(xué)習(xí),演示Docker進行安裝(Docker本體安裝自行搜索),安裝后可以使用Navicat Premiun,SQLyog之流的圖形化工具去管理使用,出于學(xué)習(xí)目的,這里只使用命令行
docker?run?--name?testDbContainer?-v?~/testDb:/root?-e?MYSQL_ROOT_PASSWORD=?-e?MYSQL_DATABASE=testDb?-p?3306:3306?-d?mysql:8.0.29-oracle`這段命令的作用是啟動一個MySQL的容器,如果當(dāng)前沒有對應(yīng)鏡像會先下載,然后啟動并輸出容器ID,3306是MySQL默認端口
--name [customName]指定了容器名字
-e MYSQL_ROOT_PASSWORD=[password]指定了root用戶的密碼
-e MYSQL_DATABASE=[testDb]創(chuàng)建一個名為testDb的數(shù)據(jù)庫
-p 3306:3306指定了宿主機(冒號前)與容器(冒號后)之間的端口映射,可以理解為訪問啟動Docker的機子(就是我們使用的機子,宿主機)的3306端口,就是訪問容器里的3306端口,容器可以理解為一臺完整的主機,可以選擇自己想使用的端口號
-d表示在后臺運行,MySQL:8.0.29-oracle指定了鏡像名及版本(此版本M1可用)
docker ps -a可以查看所有Docker的容器列表,包括沒有運行的容器
docker exec -it [容器Id/容器名稱] /bin/bash 這段命令中exec是execute的縮寫(執(zhí)行)。 -i是交互模式。 -t是分配終端。 docker的options可以連起來縮寫(-it)。 目標(biāo)容器可以用id或者名稱指定,id不一定要輸全,輸入到保證沒有其他容器id重復(fù)即可。 -v 宿主機路徑:容器路徑指定了數(shù)據(jù)卷的映射,簡單理解為我當(dāng)前本機的目錄就是容器主機里的對應(yīng)目錄,訪問容器內(nèi)的目錄等同于訪問宿主機。 /bin/bash指要運行的命令。 總結(jié)就是通過exec命令對指定的容器執(zhí)行腳本命令并提供一個可交互的終端,在bash中輸入exit可以退出終端交互
mysql -uroot -p 在終端中輸入命令,通過賬號密碼登陸mysql,出現(xiàn)下圖所示輸出就配置環(huán)境完畢,可以開始MySQL的學(xué)習(xí)之旅了
開始入門主要學(xué)習(xí)的是SQL語句 -- 結(jié)構(gòu)化查詢語言(Structured Query Language) 這里要捋清楚數(shù)據(jù)庫-數(shù)據(jù)庫管理系統(tǒng)-SQL語言三者的關(guān)系
數(shù)據(jù)庫是存放數(shù)據(jù)的地方,一個文件(特定結(jié)構(gòu))就可以看成一個數(shù)據(jù)庫
數(shù)據(jù)庫管理系統(tǒng)是專門用來管理數(shù)據(jù)庫的軟件,可以增刪查改(CRUD)操作數(shù)據(jù)庫
SQL編寫后通過DBMS編譯執(zhí)行來達到操作數(shù)據(jù)庫的目的 CRUD補充 C增(Create)R查(Retrieve,不是Read)U更新(Update)D刪除(Delete)
SQL的分類數(shù)據(jù)庫查詢語言 DQL(Data Query Language)
數(shù)據(jù)庫操縱語言 MDL(Data Manipulation Language)
insert,delete,update
數(shù)據(jù)庫定義語言 DDL(Data Definition Language)
create,drop,alert
事務(wù)控制語言 TCL Transactional Control Language)
commit,rollback
數(shù)據(jù)控制語言 DCL(Data Control Language)
grant,revoke
查看使用的數(shù)據(jù)庫版本select version();
查看當(dāng)前所有數(shù)據(jù)庫show database; (SQL語句遇分號才執(zhí)行,且不分大小寫)會自帶4個默認的數(shù)據(jù)庫,下圖名為demo的數(shù)據(jù)庫就是通過docker命令啟動時創(chuàng)建的
使用數(shù)據(jù)庫use [數(shù)據(jù)庫名]; 執(zhí)行后會提示當(dāng)前使用數(shù)據(jù)庫已發(fā)生改變
select database(); 查看當(dāng)前使用的數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫create database [數(shù)據(jù)庫名]; 執(zhí)行后會輸出執(zhí)行狀態(tài),下圖表示創(chuàng)建成功
查看當(dāng)前數(shù)據(jù)庫所有的表show tables; 當(dāng)前還沒有任何表,執(zhí)行后只會輸出Empty set (0.00 sec)
創(chuàng)建表及插入數(shù)據(jù)在這之前需要先認識MySQL中的數(shù)據(jù)類型比較常見的類型類型描述char (255)定長字符,不管實際存儲值是多少,分配的存儲空間大小都是給定的字符長度空間,示例表示最多存儲255個字符,速度快varchar (255)可變長度字符,會動態(tài)的根據(jù)實際存儲數(shù)據(jù)分配存儲空間,示例表示最多存儲255個字符,速度稍慢,因為動態(tài)分配計算過程需要時間int最長11位,數(shù)字整數(shù)類型,等同于Java中的int,int(3)表示最大存儲三位數(shù)?text長文本數(shù)據(jù)bigint等同于Java中的longfloat等同于Java中的floatdouble等同于Java中的doubledate短日期類型,只有年月日datetime長日期類型,包含年月日時分秒毫秒clob字符大對象,最多可以存儲4G的字符串,clob是Character Large Object的縮寫blob二進制大對象,用于存流媒體數(shù)據(jù),插入時要使用IO流,blob是Binary Large Object的縮寫類型列表并不全,其他不常用的可以有需要用到時再查看,這里只做一個簡單認識
創(chuàng)建語法格式為create table [表名] (字段名 數(shù)據(jù)類型 [可選列約束], ...以此排列);
CREATE?TABLE?t_user?(????id?INT?PRIMARY?KEY?auto_increment,????username?VARCHAR?(?10?)?UNIQUE?);上述語句表示創(chuàng)建一個名為t_user的表,其中有兩個字段,一個叫id到為int類型,作為該表的主鍵(非空且不能重復(fù),后面約束會講),id的值自增1。 username字段則為可變長度字符,最多10個字符且不能有重名。
此時再執(zhí)行show tables就能看見表名的輸出
查看表結(jié)構(gòu),創(chuàng)建后,可以通過desc [表名]查看表的結(jié)構(gòu)(不是表數(shù)據(jù)),分別列出了每個字段的結(jié)構(gòu)配置
在字段名后加上default跟上值,表示username字段當(dāng)沒有傳值時,默認會使用配置的default值填充,sql中的字符串用單引號包裹,效果不演示了
create?table?t_user?(????id?int?primary?key?auto_increment,????username?varchar?(?10?)?default?test);insert 插入語法語法結(jié)構(gòu)為insert into [表名] (字段名) values(按順序?qū)?yīng)字段的值);
這里有兩個要點,第一:字段名可以忽略,但忽略后,需要把所有的字段都一一填寫在values中,示例 insert into t_user values(1,JackMa);
第二:被自增約束的字段可以不傳入,values后面可以一次插入多行數(shù)據(jù),只需要用逗號進行隔開,用小括號包裹另一行的值,示例 insert into t_user(username) values(aaa),(bbb),(ccc);
這段語句表示向t_user表插入三條數(shù)據(jù) 這里列舉一些使用特性
字段類型/函數(shù)/規(guī)則說明/特性mysql的日期格式%Y=年,%m=月,%d=日,%h=時,%i=分,%s=秒 注意大小寫now()獲取當(dāng)前系統(tǒng)時間date_format(字段,格式)可以將日期轉(zhuǎn)換成特定格式,如查詢時可以將日期字段使用函數(shù)進行特定格式處理! str_to_date(日期字符串,格式)當(dāng)插入時如果日期符合%Y-%m-%d(2000-01-01)格式,則可以不需要使用str_to_date函數(shù),等價于這樣寫insert into t_user (username, age, gender,created_at) values(J12fs, 15, 1,str_to_date(2020-01-21,%Y-%m-%d));date,datetimeinsert時可以使用now()函數(shù),date會取當(dāng)天,datetime會取當(dāng)前年月日時分秒,使用示例insert into t_user (username, age, gender,created_at) values(J13fs, 15, 1, now());update 更新/修改語法語法結(jié)構(gòu)為update [表名] set 字段名 = 值,字段名 = 值 where 條件 條件語句不加會導(dǎo)致整張表進行更新,使用時一定要加上條件,如where id = 1才進行更新這段語句表示將性別是男的數(shù)據(jù)都設(shè)置年齡為30歲
delete 刪除數(shù)據(jù)語法結(jié)構(gòu)為delete from [表名] where 條件 條件語句不加會導(dǎo)致整張表進行刪除,使用時一定要加上條件,如where id = 1才進行刪除這段語句表示將所有id=2的數(shù)據(jù)進行刪除
drop 刪除表drop table [表名] 執(zhí)行后整張表包括數(shù)據(jù)都會被刪除,可以加上一個判斷條件,drop table if exists t_user;,加入了if exists關(guān)鍵字,表名只有表存在情況下才會進行刪除表操作,沒有表時執(zhí)行刪除會報錯
alert 修改表結(jié)構(gòu)盡量做到設(shè)計表時就處理好表結(jié)構(gòu),這里8說了
select 查詢數(shù)據(jù)(DQL重中之重)在查詢前,需要有數(shù)據(jù)進行查詢,所以先執(zhí)行下面這段SQL語句,先堆數(shù)據(jù)
drop?table?if?exists?t_user;create?table?t_user?(????id?int?primary?key?auto_increment,????username?varchar(10)?unique,????age?int(3),????gender?int(1)?comment?1表示男,0表示女);insert?into?t_user?(username,?age,?gender)?values(Jack,?15,?1),(Mike,?20,?1),(Susan,?22,?0);插入數(shù)據(jù)有兩種方式
一種是手動的執(zhí)行每一行sql(直接復(fù)制粘貼也會自動執(zhí)行)
使用讀取SQL文件的方式,將上面SQL保存到sql后綴的文件文件當(dāng)中,使用source [文件地址];的方式進行批量導(dǎo)入,由于使用了Docker,并且進行了數(shù)據(jù)卷映射-v ~/testDb:/root,這樣容器內(nèi)也可以讀取宿主機的本地文件,所以按照我的配置,只要把文件保存到宿主機的~/testDb目錄下,再在容器中的bash執(zhí)行source /root/就能批量執(zhí)行sql文件中的語句
說了導(dǎo)入順便講講導(dǎo)出SQL的命令,先exit退出mysql回到bash中,輸入以下命令mysqldump [數(shù)據(jù)庫名稱] > [目標(biāo)文件地址] -uroot -p,提示是說明文密碼不安全可以忽略,由于我進行了容器的數(shù)據(jù)卷映射,所以可以去宿主機查看導(dǎo)出文件查看被映射的宿主真機對應(yīng)的文件夾,對應(yīng)的文件便有了
select語句最基本的查詢語法格式select 1個或多個字段名 from [表名],可以使用*通配符,表示查詢所有字段,執(zhí)行時會被解析成id,username,age,gender。select和from是關(guān)鍵字,字段名和表名是標(biāo)識符,查詢多個字段用逗號隔開,為了演示使用了*,實際中不建議使用,可讀性差,效率相對低
給字段設(shè)置別名查詢時將字段轉(zhuǎn)成其他名字進行查看,as關(guān)鍵字可以省略,字段名與別名使用空格隔開即可
字段名可以進行數(shù)學(xué)計算表達式會設(shè)置為默認別名,對應(yīng)的列數(shù)據(jù)也進行了數(shù)學(xué)運算
條件查詢select (一個或多個字段名) from [表名] where (一個或多個條件); | 操作符 | 操作符描述 | | --- | --- | | = | 等于,select * from t_user where id = 1; 查詢id等于1的數(shù)據(jù) | | !=,<> | 不等于,兩種寫法等價,select * from t_user where id <> 1; 查詢id不等于1的數(shù)據(jù) | | < | 小于,select * from t_user where id < 2; 查詢id小于2的數(shù)據(jù)| | = | 等于,select * from t_user where id > 1; 查詢id大于1的數(shù)據(jù)| | >= | 大于等于,select * from t_user where id >= 2; 查詢id大于等于2的數(shù)據(jù)| | <= | 小于等于,select * from t_user where id <= 1; 查詢id小于等于1的數(shù)據(jù)| | between ... and ... | 等價于 x >= 1 and x <= 2的寫法,需要遵循左小右大 select * from t_user where id between 1 and 2; 等規(guī)則,否則會報錯,查詢id>=1且id<=2的數(shù)據(jù)| | and | 并且,只有and左右兩邊的表達式都成立才算復(fù)合條件 select * from t_user where id = 1 and age > 10; 查詢id等于1且年齡大于10的數(shù)據(jù)| | or | 或者,or任意一邊的表達式成立都算復(fù)合條件 select * from t_user where id = 1 and age > 10; 查詢id等于1或者年齡大于10的數(shù)據(jù)| | in | 包含,可以替換or實現(xiàn)同等查詢效果 select * from t_user where username in (Jack, Mike); 查詢usernmae等于Jack或者等于Mike的數(shù)據(jù)| | like | 模糊查詢,支持%或者下劃線,百分號表示匹配任意個字符,下劃線表示匹配一個字符,想匹配的字符中就有下滑線時,需要使用`\進行轉(zhuǎn)義,select * from t_user where username like %c_k%;` 查詢usernmae包含c_k的數(shù)據(jù),c_k的前面或者后面有沒有字符都可以
排序select * from t_user order by 字段名 排序方式,字段名 排序方式排序可選的值有asc和desc,不寫排序方式默認為升序(等于同寫了asc)
多個字段排序只需要用逗號進行分割,規(guī)則為只有前面的排序結(jié)果為相等時,才會采用后面的排序條件,如order by age asc,id desc,age相等的話就會使用id進行排序
還可以根據(jù)查詢字段的序號進行排序,默認從1開始,order by后的字段名用序號替代,可讀性差且依賴字段,不建議使用
數(shù)據(jù)處理函數(shù)又被稱為單行處理函數(shù),一個輸入對應(yīng)一個輸出,一些常用的函數(shù)列舉,可以用在select后的字段,也可以用在where條件后的字段 | 函數(shù) | 語法作用 | | --- | --- | | lower | 將目標(biāo)字段數(shù)據(jù)轉(zhuǎn)為小寫 select lower(username) from t_user; | | upper | 將目標(biāo)字段數(shù)據(jù)轉(zhuǎn)為大寫 select lower(username) from t_user; | | substr | 將username是J開頭的數(shù)據(jù)查出,可以做到和like相同的功能 select * from t_user where substr(username,1,1) = J; 語法:substr(字段名,字符索引1開始,截取多少個不寫的則相當(dāng)于截剩余部分) | | concat | 字符串拼接,將username字段的查詢結(jié)果轉(zhuǎn)為小寫開頭,結(jié)合了substr和lower select concat(lower(substr(username,1,1)),substr(username,2)) result from t_user; 語法格式:concat(字符,字符,...字符) | | length | 取字符長度 select length(username) len from t_user; | | trim | 如果字符前后有空格則去掉 select trim(username) len from t_user; | | round | 四舍五入(支持正負數(shù)),將查出數(shù)據(jù)的年齡進行個位數(shù)的四舍五入 select round(age,-1) from t_user; | | rand | 生成隨機數(shù),生成0-100的隨機數(shù),套了層round進行四舍五入 select round(rand() * 100) from t_user; | | ifnull | 空值處理,需要注意在所有數(shù)據(jù)庫中,涉及和null進行數(shù)學(xué)運算的結(jié)果都是null,當(dāng)年齡為空時將結(jié)果集的值設(shè)為100,不會修改源數(shù)據(jù) select ifnull(age,100) from t_user; | | | sql中的switch case語句,如果年齡為20的則年齡乘以2,否則原值輸出 select case age when 20 then age*2 else age end as result from t_user; |
分組函數(shù)又稱為多行處理函數(shù),輸入多行最終輸出一行,與單行處理函數(shù)相反
group by 分組將表按照一個字段或多個字段進行分組group [字段1,字段2...], 在使用分組函數(shù)前需要先對表進行g(shù)roup by分組,當(dāng)沒有寫group by時默認整張表為一組,分組函數(shù)也不能寫在where關(guān)鍵字后面,因為涉及到執(zhí)行順序問題select sum(age) result,gender from t_user where id > 1 group by gender order by result desc; 這段SQL的執(zhí)行順序為,先1 from,2 where,3 group by,4 select,5 order by,當(dāng)執(zhí)行到where時此時表還沒有進行分組,所以不能將分組函數(shù)應(yīng)用到where 條件中,這段SQL會先將id>1的篩選掉,然后進行性別分組查詢,分組后將組里的年齡求和最后按照求和的結(jié)果降序排列
如果有g(shù)roup by語句,則select后面跟隨的只能是被排序的字段和分組函數(shù)
聯(lián)合字段使用逗號進行隔開即可,會將兩個字段合并起來當(dāng)成一個字段進行分組
having 過濾having需要配合group by,無法單獨使用,可以對分組后的數(shù)據(jù)進行篩選,having的執(zhí)行時機在group by 之后,select之前 select sum(age) result,gender from t_user where id > 1 group by gender having result > 50 order by result desc; 直接在上面的示例加一句having result > 50,則數(shù)據(jù)會將年齡綜合低于50的篩選掉
distinct將查詢結(jié)果相同的去重,distinct關(guān)鍵字只能出現(xiàn)在selec之后字段之前select distinct age from t_user; 這段代碼會將年齡相同的數(shù)據(jù)從結(jié)果集中篩選掉,如果有多個字段就表示聯(lián)合去重(多字段聯(lián)合起來相同才會去重)
第一篇先?到這 : )
原文:
SELECT * FROM table WHERE time_to_sec(time)
以上為比較方法。
在Oracle系統(tǒng)中,select語句的基本語法格式如下:
select [distinct] [*, column_name [alias], …] from tablename Where {conditions} group by {conditions} having order by expressions} [ASC/DESC];
查詢所有列:
select * from table;
查詢指定列:select colum1,colum2 from table;
取消重復(fù)行:select distinct deptno,job from emp;
使用表達式:可以在查詢列中使用表達式來連接字符串(使用 || 連接字符串)、改變顯示格式(如使用函數(shù)to_char)、計算顯示的數(shù)據(jù)(如使用+,-,×,/)等。
舉例: select * from emp; select ename ,sal,deptno from emp; select deptno from emp; select distinct deptno from emp;
一、常見列類型(字段類型)1.數(shù)值類型 :1° 整型①tinyint [1 byte;有符號-128~127,無符號0~255] ②smallint [2 bytes;有符號-2^15~2^15 - 1,無符號0~2^16 - 1] ③mediumint [3 bytes;有符號-2^23~2^23 - 1,無符號0~2^24 - 1] ④int [4 bytes;有符號-2^31~2^31 - 1,無符號0~2^32 - 1] ⑤bigint [8 bytes;有符號-2^63~2^63 - 1,無符號0~2^64 - 1] PS : 1>Δ默認均為有符號數(shù)。
若想定義無符號數(shù),需要在定義字段的類型時,在后面添加一個UNSIGNED。
2>以上范圍均為補碼可表示的范圍。
3>bit類型默認為無符號數(shù),使用格式為“bit(M)”,其中M表示指定的位數(shù),默認值是1,實際范圍是1~64;使用bit類型的字段,查詢時以二進制的形式顯示;當(dāng)需要存入0或者1時,可以考慮使用bit(1)來節(jié)省空間。
2° 浮點型①float [single precision, 4 bytes] ②double [double precision, 8 bytes] ③decimal [M, D],M決定了數(shù)的長度(M最大65),D決定了其中的小數(shù)位數(shù)(D最大30);如果D是0,表示無小數(shù)點或分?jǐn)?shù)部分;若D被省略,默認是0;若M被省略,默認是10;2.文本類型(字符串類型) : ①char [0~255(字符)],固定長度字符串(即分配的空間大小是固定的);這里的范圍就是字符數(shù)的范圍(不管中英文)。
②varchar [0~ (0 ~ 2^16 - 1)(字節(jié))],可變長度字符串(即分配的空間大小決定于實際的占用情況;這里的范圍是字節(jié)的范圍。
實際最大字節(jié)是 - 3 = ,因為要預(yù)留出1~3個字節(jié)用于存儲字段的大小,在不同編碼中最終對應(yīng)的字符數(shù)不同。
③text [0 ~ 2^16 - 1] ,更簡單,存放文本內(nèi)容時可以考慮,可以將TEXT類型視為VARCHAR類型。
PS : TEXT類型沒有默認值。
④longtext [0 ~ 2^32 - 1] PS : 實際使用時,括號中傳入的一定是字符數(shù)。
一般來講,使用varchar類型更好;但是,若某個字段已明確為定長,使用char類型可以提高查詢速度。
3.二進制類型 : ①blob [0 ~ 2^16 - 1] ②longblob [0 ~ 2^32 - 1] PS : 一般不會直接存儲二進制數(shù)據(jù)。
4.日期類型 : ①date [日期,年月日] ②time [時間,時分秒] ③datetime [年月份 時分秒 YYYY-MM-DD HH:mm:ss] ④timestamp [時間戳],可在定義時間戳類型的字段時加入以下約束——NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,其中,NOT NULL表示不為空;DEFAULT...表示默認是當(dāng)前時間戳;ON UPDATE...表示以后每次修改記錄(INSERT, UPDATE),時間戳?xí)詣痈聻樾薷臅r的當(dāng)前時間戳。
二、表的基本操作1.創(chuàng)建表 :1° 基本語法CREATE TABLE table_name ( field1 data_type, field2 data_type, field3 data_type... ) CHARACTER SET 字符集 COLLATE 校對規(guī)則 ENGINE 引擎; 其中—— ①field : 字段名,表示指定的列名。
②data_type : 字段的數(shù)據(jù)類型,表示指定的列類型。
③CHARACTER SET : 若不指定則為表所在數(shù)據(jù)庫的字符集。
④COLLATE : 若不指定則為表所在數(shù)據(jù)庫的排序規(guī)則。
PS : 創(chuàng)建表時,要根據(jù)需保存的數(shù)據(jù)創(chuàng)建相應(yīng)的列,并根據(jù)字段的數(shù)據(jù)類型定義相關(guān)的列類型。
2° 代碼演示現(xiàn)有三張一模一樣的表(table_0,table_1,table_2),表的具體內(nèi)容如下圖所示 : 刪除表的代碼如下 : 2.刪除表 : 1° 基本語法①刪除整張表—— DROP TABLE table_name; ②只刪除表數(shù)據(jù)(不可使用WHERE)—— TRUNCATE TABLE table_name; ③只刪除數(shù)據(jù)(可使用WHERE)—— DELETE FROM table_name WHERE...;3.修改表 : 1° 基本語法①添加列—— ALTER TABLE table_name ADD column data_type [DEFAULT expr], ADD column data_type [DEFAULT expr]...; ②修改列的類型—— ALTER TABLE table_name MODIFY column data_type [DEFAULT expr], MODIFY column data_type [DEFAULT expr]...; ③修改列的名字—— ALTER TABLE table_name CHANGE 舊列名 新列名 data_type NOT NULL DEFAULT ; ④刪除列—— ALTER TABLE table_name DROP column, DROP column ...; PS : ①修改表名—— RENAME TABLE 舊表名 TO 新表名; ②修改表字符集—— ALTER TABLE 表名 CHARACTER SET 字符集; ③查看表的結(jié)構(gòu)—— DESC 表名; (可以查看表的列的情況)4.復(fù)制表 : 1° 基本語法①表數(shù)據(jù)的復(fù)制—— INSERT INTO table_name(column_1, column_2...) SELECT (column_1, column_2...) FROM table_name; 該語句可以將查詢到的表中的指定數(shù)據(jù)復(fù)制到當(dāng)前表中,亦可以通過該語句進行自我復(fù)制(蠕蟲復(fù)制)。
通過蠕蟲復(fù)制可以為表中添加海量數(shù)據(jù),可用于SQL語句性能的測試。
②表結(jié)構(gòu)的復(fù)制—— CREATE TABLE table_name LIKE table2_name; PS : 表的去重—— 1>先創(chuàng)建一張臨時表,該表的表結(jié)構(gòu)與要去重的表相同。
(使用LIKE); 2>通過DISTINCT關(guān)鍵字處理后,把要去重的表中的數(shù)據(jù)復(fù)制到臨時表一份; 3>清除掉要去重的表中的全部記錄; 4>將臨時表中的記錄復(fù)制到要去重的表一份; 5>刪除臨時表;2° 代碼演示演示Ⅰ—— 表的復(fù)制現(xiàn)有一張員工表如下 :要求建立一張新表demo,并將該員工表中的數(shù)據(jù)復(fù)制到新表demo中,代碼如下 : 運行效果 : 演示Ⅱ—— 表的去重對演示Ⅰ中的demo表進行多次蠕蟲復(fù)制,復(fù)制后,demo表中的記錄總數(shù)如下圖所示 :先對demo表進行去重操作,代碼如下 :運行效果 : (END-----------------------------------------------------------------------------;
MySQL——常見的一些列類型,表的增刪查改操作,表的復(fù)制
相關(guān)標(biāo)簽:
查詢和示例進行詳細說明、 中的時間戳操作、 使用函數(shù)、 mysql中DISTINCT的用法、 MySQL、
內(nèi)容聲明:
1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請聯(lián)系我們進行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請聯(lián)系我們進行舉報處理!
4、本文地址:http://www.hudongshop.com/article/206e487a8c5b8b636178.html,復(fù)制請保留版權(quán)鏈接!
隨著您業(yè)務(wù)的發(fā)展,您的網(wǎng)站也必須隨之發(fā)展,一個可拓展的整站模板可以為您提供所需的靈活性,以輕松滿足您的不斷增長的需求,可拓展性的好處無需重新設(shè)計,您可以根據(jù)需要添加或刪除頁面、功能和內(nèi)容,而無需重新設(shè)計整個網(wǎng)站,易于維護,可拓展的模板通常使用模塊化設(shè)計,使您可以輕松更新和管理您的網(wǎng)站內(nèi)容,提高效率,通過使用可拓展的模板,您可以節(jié)省在網(wǎng)...。
本站公告 2024-09-26 08:53:04
在文本處理中,分隔文本往往是必不可少的任務(wù),傳統(tǒng)的字符串分割操作雖然簡單,但對于復(fù)雜的分隔需求來說卻顯得不夠靈活,而jssplit則是一款輕量級的JavaScript工具,為開發(fā)者提供了更加便捷和強大的文本分隔功能,jssplit的優(yōu)點支持多種分隔符,除了常見的空格、逗號和分號外,還可以使用正則表達式指定任意復(fù)雜的分隔規(guī)則,分隔后輸出...。
本站公告 2024-09-15 08:37:00
<,考慮創(chuàng)建復(fù)合索引,同時使用多個列,以提高復(fù)雜查詢的性能,維護索引以確保它們是最新的,監(jiān)控索引使用情況以識別需要調(diào)整或刪除的索引,結(jié)論索引是優(yōu)化SQLServer數(shù)據(jù)庫性能的關(guān)鍵組件,通過選擇正確的索引策略,可以顯著減少查詢時間并提高應(yīng)用程序的整體響應(yīng)能力,遵循這些最佳實踐并定期監(jiān)控和調(diào)整索引,可以確保數(shù)據(jù)庫保持最佳性能,...。
技術(shù)教程 2024-09-14 14:17:20
簡介grep是一種強大的文本搜索實用程序,它使用正則表達式,regex,來匹配和查找文本數(shù)據(jù)中的模式,正則表達式是一種強大的搜索語法,允許用戶指定要搜索的特定文本模式,本文將引導(dǎo)您從初學(xué)者到專家使用grep正則表達式進行全面文本分析,初學(xué)者典型工作任務(wù),查找單個單詞或短語匹配文本行中的特定模式基本正則表達式,字面文本,使用引號將要匹配...。
最新資訊 2024-09-11 22:38:34
1.簡介C語言是一種通用高級編程語言,由丹尼斯·里奇,DennisRitchie,于1972年開發(fā),它是一種結(jié)構(gòu)化編程語言,廣泛用于開發(fā)操作系統(tǒng)、嵌入式系統(tǒng)和軟件應(yīng)用程序,C語言以其高效、可移植性和靈活性而聞名,它被認為是學(xué)習(xí)編程語言的堅實基礎(chǔ),因為它提供了對編程概念和計算機體系結(jié)構(gòu)的深入理解,2.安裝和配置要在計算機上使用C語言,您...。
本站公告 2024-09-10 22:45:51
深入Java編程需要練習(xí)和實際經(jīng)驗,雖然學(xué)習(xí)教程和閱讀文檔非常重要,但通過編寫實際項目可以讓你對語言和其功能有更深入的理解,小游戲是為學(xué)習(xí)編程提供了一個絕佳的平臺,它們相對較小,可以快速編寫和測試,同時涵蓋了廣泛的編程概念,包括,變量和數(shù)據(jù)類型流程控制面向?qū)ο缶幊虉D形編程俄羅斯方塊,這是一個益智游戲,玩家控制從上方掉落的方塊,以形成水...。
最新資訊 2024-09-09 15:34:28
入門成為一名PHP開發(fā)人員的最佳方法是通過在線課程或認證,以下是一些推薦的資源,CourseraPHP特化課程UdemyPHP課程EdurekaPHP認證課程你還可以通過閱讀書籍、文章和博客文章來學(xué)習(xí)PHP,以下是一些有用的資源,PHP官方手冊PHP正確方法Laravel文檔建立技能成為一名成功的PHP開發(fā)人員需要具有以下方面的技能,...。
技術(shù)教程 2024-09-09 12:09:14
對于編程新手來說,C語言可能是一項令人生畏的任務(wù),但是,有了正確的指導(dǎo),學(xué)習(xí)C語言并消除編程恐懼也并非不可能,為了幫助初學(xué)者踏上C語言編程之旅,我們提供了一份免費的學(xué)習(xí)指南,涵蓋所有基本概念,從基礎(chǔ)語法到高級數(shù)據(jù)結(jié)構(gòu),指南的內(nèi)容C語言簡介變量和數(shù)據(jù)類型運算符和表達式控制流,if,else、switch等,函數(shù)和數(shù)組字符串和指針文件操作...。
本站公告 2024-09-08 11:40:47
隨著HTML5的出現(xiàn),HTML代碼的標(biāo)題元素發(fā)生了巨大的變化,引入了一個新的標(biāo)題級別,hgroup,,同時還增強了現(xiàn)有級別的語義和靈活性,這些變化為web開發(fā)人員提供了前所未有的標(biāo)題定制和組織選項,讓他們的網(wǎng)站更具吸引力、用戶友好且易于訪問,標(biāo)題元素的演變HTML4,標(biāo)題元素為到,HTML5,新標(biāo)題元素hgroup被引入,現(xiàn)有元素獲得...。
本站公告 2024-09-07 04:28:13
隨著網(wǎng)絡(luò)帶寬的不斷提升,視頻內(nèi)容在互聯(lián)網(wǎng)上變得越來越流行,為了,如3D視頻播放和音效增強,GOMPlayer,GOMPlayer是一款免費的、功能全面的視頻播放器,支持各種視頻格式和編解碼器,它還提供了一些方便的功能,如字幕搜索和多媒體轉(zhuǎn)換,這些視頻播放器都提供了強大的功能,可以滿足不同的視頻播放需求,您需要根據(jù)您的具體需求來選擇最適...。
最新資訊 2024-09-06 19:25:31
用戶體驗提升僅一步之遙作為一名PHP開發(fā)人員,您一直致力于提高代碼質(zhì)量、效率和應(yīng)用程序性能,有時候您還需要一些額外的東西來提升您的用戶體驗,這就是免費源代碼發(fā)揮作用的地方,免費源代碼是一段可供任何人使用、修改和分發(fā)的代碼,它可以幫助您快速輕松地添加新功能、修復(fù)錯誤或提高應(yīng)用程序的速度,以下是免費源代碼可以為您實現(xiàn)的一些好處,提高代碼質(zhì)...。
最新資訊 2024-09-05 22:04:53
一、購買域名新手建立網(wǎng)站,域名是必不可少的,簡潔的域名能讓人記憶深刻,選擇域名大部分都以為主,也有很多新的后綴域名,域名后綴不同價格也不同,一般以年為單位,新手可以到阿里域名平臺購買,二、購買虛擬主機虛擬主機和服務(wù)器可以用來裝載網(wǎng)站程序,是網(wǎng)站建設(shè)必不可少的部分,對于新手來說選擇虛擬主機比較好,虛擬主機我們常稱為,空間,價格低廉,操作...。
技術(shù)教程 2024-09-02 00:15:38