最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫(kù)語句完全講解

 更新時(shí)間:2026年01月15日 10:10:24   作者:?_APPROPRIATE"ぁ.  
MySQL作為最流行的開源關(guān)系型數(shù)據(jù)庫(kù),其查詢語句涵蓋了從基礎(chǔ)數(shù)據(jù)檢索到復(fù)雜多表關(guān)聯(lián)的全場(chǎng)景需求,這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)語句的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

基礎(chǔ)知識(shí)

  • 數(shù)據(jù)庫(kù)(database) 是一個(gè)以某種有組織的方式存儲(chǔ)的數(shù)據(jù)集合。理解數(shù)據(jù)庫(kù)的一種最簡(jiǎn)單的辦法是將其想象為一個(gè)文件柜。此文件柜是一個(gè)存放數(shù)據(jù)的物理位置,不管數(shù)據(jù)是什么以及如何組織的

  • 表(table) 是一種結(jié)構(gòu)化的文件,可用來存儲(chǔ)某種特定類型的數(shù)據(jù)(數(shù)據(jù)庫(kù)中的每個(gè)表名都是唯一的)

  • 模式(schema) 是指數(shù)據(jù)庫(kù)的結(jié)構(gòu)和組織方式,描述了數(shù)據(jù)庫(kù)中對(duì)象的布局、特性及它們之間的關(guān)系

  • 列(column) 是表中的一個(gè)字段。所有表都是由一個(gè)或多個(gè)列組成的。

  • 行(row) 是表中的一個(gè)記錄。

  • 主鍵(primary key) 是一列(或一組列),其值能夠唯一區(qū)分表中每個(gè)行。

    • 一列:主鍵列不允許NULL值和重復(fù)值
    • 一組列:所有列值的組合必須是唯一的(但單個(gè)列的值可以不唯一)

打開數(shù)據(jù)庫(kù)

打開數(shù)據(jù)庫(kù):

mysql -u 用戶名 -p

選擇數(shù)據(jù)庫(kù):

USE 數(shù)據(jù)庫(kù)名;

必須先使用 USE 打開數(shù)據(jù)庫(kù),才能讀取其中的數(shù)據(jù)。

基礎(chǔ)命令

命令輸入在 mysql> 之后;

  • 命令用 ;\g 結(jié)束,換句話說,僅按Enter不執(zhí)行命令;

  • 輸入 help\h 獲得幫助,也可以輸入更多的文本獲得特定命令的幫助(如,輸入 help select; 獲得使用SELECT語句的幫助);

  • 輸入 quitexit 退出命令行實(shí)用程序。

顯示信息

顯示數(shù)據(jù)庫(kù)信息:

SHOW DATABASES;

獲得一個(gè)數(shù)據(jù)庫(kù)內(nèi)的表的列表:

SHOW TABLES;

顯示表列:

SHOW COLUMNS FROM 表名; 
DESCRIBE 表名;  # 另一種快捷方式

顯示廣泛的服務(wù)器狀態(tài)信息:

SHOW STATUS;

顯示創(chuàng)建特定數(shù)據(jù)庫(kù):

SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名;

顯示創(chuàng)建特定表:

SHOW CREATE TABLE 表名;

顯示表的列結(jié)構(gòu):

desc 表名;

顯示各列數(shù)據(jù):

select 列名1, 列名2, ... from 表名;  

select 命令還能用來顯示與數(shù)據(jù)庫(kù)無關(guān)的值;例如:

select '測(cè)試123123';  # 輸出結(jié)果為:`測(cè)試123123`
select 2+3*4;  # 輸出結(jié)果為:`14`

顯示表格中全部列的數(shù)據(jù):

select * from 表名;

顯示授予用戶的安全權(quán)限:

SHOW GRANTS;

顯示服務(wù)器錯(cuò)誤或者警告信息:

SHOW ERROES;
SHOW WARNINGS;

顯示允許的 SHOW 語句:

HELP SHOW;

查看和顯示數(shù)據(jù)庫(kù)的編碼方式:

show create database 數(shù)據(jù)庫(kù)名;

顯示當(dāng)前使用的數(shù)據(jù)庫(kù):

select database();

顯示索引

show insex from 表名;

增刪改

創(chuàng)建數(shù)據(jù)庫(kù):

create database 數(shù)據(jù)庫(kù)名;
# 舉例:創(chuàng)建并使用數(shù)據(jù)庫(kù)
create database phone;  # 創(chuàng)建數(shù)據(jù)庫(kù) phone
show databases;  # 查看是否成功創(chuàng)建 phone
use phone;  # 使用數(shù)據(jù)庫(kù)

/* 在使用 use 選擇數(shù)據(jù)庫(kù)的狀態(tài)下,也能夠操作其他數(shù)據(jù)庫(kù)中的表。(將數(shù)據(jù)庫(kù)名和表名用 . 連接起來)*/
select * from db2.table1;

創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置數(shù)據(jù)庫(kù)的字符編碼:

create database 數(shù)據(jù)庫(kù)名 character set utf8;
# 另一種縮寫方式
create database 數(shù)據(jù)庫(kù)名 charset utf8;

創(chuàng)建表:

create table 表名(列名1 字段類型, 列名2 字段類型, 列名3 字段類型, …); 

為創(chuàng)建索引

create index 索引名 on 表名 (列名1, 列名2, ...);

復(fù)制表的列結(jié)構(gòu)和記錄:

create table 新表名 as select * from 舊表名;

僅復(fù)制表的列結(jié)構(gòu):

create table 新表名 like 原表名;

僅復(fù)制表的記錄:

insert into 新表名 select * from 原表名;

選擇某一列進(jìn)行復(fù)制:(復(fù)制 列的數(shù)據(jù)結(jié)構(gòu)必須一致,否則可能會(huì)復(fù)制失敗)

insert into 新表名(新列名) select 原列名 from 原表名;

設(shè)置主鍵:

# 設(shè)置單個(gè)主鍵列
create table 表名 (主鍵列名 數(shù)據(jù)類型 primary key, 普通列名 數(shù)據(jù)類型);

# 設(shè)置復(fù)合主鍵
CREATE TABLE 表名 (主鍵列名1 數(shù)據(jù)類型, 主鍵列名2 數(shù)據(jù)類型, 普通列名 數(shù)據(jù)類型, PRIMARY KEY (主鍵列名1, 主鍵列名2));

設(shè)置唯一鍵:

create table 表名 (唯一鍵列名 數(shù)據(jù)類型 unique, 普通列名 數(shù)據(jù)類型);

主鍵和唯一鍵區(qū)別

特性主鍵約束 (PRIMARY KEY)唯一約束 (UNIQUE)
列的唯一性確保列值唯一,且不能為 NULL。確保列值唯一,但可以包含 NULL(根據(jù)數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn))。
NULL 值不允許有 NULL 值。可以有 NULL 值,但通常每個(gè) NULL 只能出現(xiàn)一次(具體依賴數(shù)據(jù)庫(kù)實(shí)現(xiàn))。
索引自動(dòng)創(chuàng)建唯一索引,且該索引被視為主索引。自動(dòng)創(chuàng)建唯一索引,但它不是主索引。
表中的數(shù)量每個(gè)表只能有一個(gè)主鍵。一個(gè)表可以有多個(gè)唯一約束。
用途用于標(biāo)識(shí)每行唯一數(shù)據(jù)。用于確保某列的值是唯一的,適用于不需要作為行標(biāo)識(shí)符的列。

添加能自動(dòng)連續(xù)編號(hào)的列,列要求:

  1. 數(shù)據(jù)類型為 int 等整數(shù)類型
  2. 加上關(guān)鍵字 auto_increment (每個(gè)表中只能有一個(gè) AUTO_INCREMENT 列)
  3. 必須是 主鍵唯一鍵。
create table 表名 (能自動(dòng)編號(hào)的列名 整數(shù)數(shù)據(jù)類型 auto_increment primary key, 其他列名 數(shù)據(jù)類型);
create table 表名 (能自動(dòng)編號(hào)的列名 整數(shù)數(shù)據(jù)類型 auto_increment unique, 其他列名 數(shù)據(jù)類型);

插入數(shù)據(jù)驗(yàn)證是否連續(xù)編號(hào):

insert into 表名 (其他列名) values(插入的值);
# 舉例
insert into phone_test (name) values('mike');

設(shè)置連續(xù)編號(hào)的初始值:

insert into 表名  values(連續(xù)編號(hào)值, 其他列值);
# 舉例
insert into phone_test values(100, 'mike');

如果把表中數(shù)據(jù)都刪除,然后重新輸入,編號(hào)不會(huì)從頭開始,而是從 最大值+1 開始分配

create table test1 (id1 int auto_increment primary key, name char(10));
insert into test1 (name) values('mmike');  # 1 mmike
insert into test1 values(100, 'mike');  # 1 mmike  和 100 mike
delete from test1;  # 刪除上面兩條數(shù)據(jù)
insert into test1 (name) values('moke');  # 101 moke

初始化 auto_increment 的值 (如果初始化的值小于現(xiàn)有表格中最大值,那么初始化會(huì)不起作用;如果想要重新從 1 開始,必須清空表中的數(shù)據(jù)。)

alter table 表名 auto_increment=200;

設(shè)置列的默認(rèn)值

create table 表名 (列名 數(shù)據(jù)類型 default 默認(rèn)值 ...);
# 修改已有列并為其添加默認(rèn)值
alter table 表名 modify column 列名 數(shù)據(jù)類型 default 默認(rèn)值;
# 添加默認(rèn)值到新列
alter table 表名 add column 列名 數(shù)據(jù)類型 default 默認(rèn)值;
# 添加默認(rèn)值,不更改數(shù)據(jù)類型
alter table 表名 alter column 列名 set default 默認(rèn)值;

更新數(shù)據(jù):

UPDATE customers   # 更新 customers 表
SET Cust_name = 'The Fudds', cust_email='elmer@fudd.com'  # 將 Cust_name 列的值更新為 The Fudds,cust_email 列的值更新為 elmer@fudd.com
WHERE cust_id = 10005;  # 僅更新 Cust_id 等于 '10005' 的行

UPDATE IGNORE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 條件;  # 在執(zhí)行 UPDATE 操作時(shí),如果出現(xiàn)某些錯(cuò)誤(如重復(fù)鍵錯(cuò)誤),則忽略這些錯(cuò)誤并繼續(xù)更新其余記錄

重命名表:

RENAME TABLE 舊表名1 TO 新表名1,舊表名2 TO 新表名2... ;

刪除數(shù)據(jù)庫(kù):

drop database 數(shù)據(jù)庫(kù)名;

刪除表:

drop table 表名;
# 如果目標(biāo)表不存在的情況下執(zhí)行drop命令會(huì)報(bào)錯(cuò),可以加個(gè) if exists
drop table if exists 表名;

刪除列:

alter table 表名 drop 列名; 

刪除表中所有記錄:

delete from 表名;
# 刪除符合條件的那一行數(shù)據(jù)
delete from 表名 where 列名=1006;

# turncate table(速度比delect快)
# 如果表被其他表通過外鍵約束引用,通常無法執(zhí)行 TRUNCATE 操作。你需要先刪除外鍵約束,或使用 DELETE 操作。
# 通常,TRUNCATE 不會(huì)觸發(fā)與表相關(guān)的觸發(fā)器(Triggers),而 DELETE 可能會(huì)觸發(fā) BEFORE DELETE 或 AFTER DELETE 觸發(fā)器。
# TRUNCATE 不支持條件WHERE,它會(huì)刪除表中所有的記錄,沒有條件限制。
TRUNCATE TABLE 表名;  # 刪除整個(gè)表的數(shù)據(jù),表結(jié)構(gòu)不變

修改數(shù)據(jù)庫(kù)編碼:

alter database 數(shù)據(jù)庫(kù)名 character set utf8;

修改字段數(shù)據(jù)類型:

alter table 表名 modify 列名 數(shù)據(jù)類型;

修改字段的數(shù)據(jù)類型并且改名:

alter table 表名 change 原列名 新列名 數(shù)據(jù)類型;

修改列的順序:

# 把某一列放在最前面
alter table 表名 modify 列名 數(shù)據(jù)類型 first;

向表中插入一列數(shù)據(jù):

alter table 表名 add 列名 數(shù)據(jù)類型;
# 把列添加到最前面
alter table 表名 add 列名 數(shù)據(jù)類型 first;
# 把列插到某一列后面
alter table 表名 add 列名 數(shù)據(jù)類型 after 某一列列名;

刪除默認(rèn)值

alter table 表名 modify column 列名 數(shù)據(jù)類型 default null;

刪除索引

drop index 索引名 on 表名;
create index my_ind on test1 (name);  # 在 表test1 的 列name 上創(chuàng)建名為 my_ind 的索引
show index from test1;  # 顯示創(chuàng)建的索引
show index from test1 \G  # 縱向顯示列值方便查看
drop index my_ind on test1;  # 刪除索引

定義外鍵

ALTER TABLE 表名  # 指定要修改的表
ADD CONSTRAINT 外鍵名稱  # 定義外鍵名稱
FOREIGN KEY (外鍵列名)  # 當(dāng)前表中哪個(gè)列將作為外鍵
REFERENCES 參照表名(主鍵列名);  # 引用目標(biāo)表及其主鍵

# 假設(shè)我們有兩個(gè)表:orders 和 customers。我們想要在 orders 表中添加一個(gè)外鍵,以引用 customers 表中的 customer_id 列。
CREATE TABLE customers (customer_id INT PRIMARY KEY, name VARCHAR(100));
CREATE TABLE orders (order_id INT PRIMARY KEY, order_date DATE, customer_id INT);
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

復(fù)雜的表結(jié)構(gòu)更改一般需要手動(dòng)刪除過程,:

  1. 用新的列布局創(chuàng)建一個(gè)新表;
  2. 使用INSERT SELECT語句從舊表復(fù)制數(shù)據(jù)到新表。如果有必要,可使用轉(zhuǎn)換函數(shù)和計(jì)算字段;
  3. 檢驗(yàn)包含所需數(shù)據(jù)的新表;
  4. 重命名舊表或者刪除舊表;
  5. 用舊表原來的名字重命名新表;
  6. 根據(jù)需要,重新創(chuàng)建觸發(fā)器、存儲(chǔ)過程、索引和外鍵。

向表中插入一行數(shù)據(jù):

insert into 表名 values(數(shù)據(jù)1, 數(shù)據(jù)2, ...);  # 句高度依賴于表中列的定義次序

指定列名插入數(shù)據(jù):

insert into 表名 (列名1, 列名2, ...) values(數(shù)據(jù)1, 數(shù)據(jù)2, ...);  
# 也可以一次性插入多條數(shù)據(jù): 
insert into 表名 (列名1, 列名2, ...) values (數(shù)據(jù)1, 數(shù)據(jù)2, ...),(數(shù)據(jù)1, 數(shù)據(jù)2, ...),(數(shù)據(jù)1, 數(shù)據(jù)2, ...)...;

# 舉例
insert into Phone (pid, name, color) values(456, 'marry', 'blue');
insert into Phone (pid, name, color) values(456, 'aaa', 'rrrr'),(789, 'bbb', 'ooo'),(012, 'ccc', 'yyy');

插入列往往比較耗時(shí),可以使用LOW_PRIORITY降低insert語句的優(yōu)先級(jí)(尤其是在數(shù)據(jù)庫(kù)有大量的并發(fā)寫操作時(shí))

INSERT LOW_PRIORITY INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);

插入檢索出的數(shù)據(jù)

INSERT INTO 新表名(列1, 列2, ...) SELECT 列1, 列2, ... FROM 原表名 WHERE 條件;

檢索

檢索不同的列:

# 從表中檢索一列
select 列名 from 表名;
# 從表中檢索多列
select 列名, 列名, 列名 from 表名;
# 檢索所有列
select * from 表名;

檢索不同的行:

# 返回每列的唯一值 (DISTINCT 會(huì)作用于查詢中的所有列的組合,而不是單獨(dú)某一列。)
select distinct 列名, 列名 from 表名;
# 如果只去除某一列的重復(fù),應(yīng)該只選擇該列,而不是整個(gè)組合。
select distinct 列名 from 表名;

限制結(jié)果:

# 顯示前m行
select * from 表名 limit m;
# 如果要得出m行后的n行,可指定要檢索的開始行和行數(shù)
select * from 表名 limit m,n;  # m:跳過前m行,即從第m+1行開始;  n:從第m+1行開始,返回后n行數(shù)據(jù)

使用完全限定的表名:

select 表名.列名 from 數(shù)據(jù)庫(kù)名.表名;

按順序檢索:

# 按順序檢索某一列
select 列名1 from 表名 order by 列名2;  # 按列名2的順序給列名1排序(order by后面的排序列和select的選擇列可以不一樣)
# 按多個(gè)列排序
select 列名1, 列名2, 列名3...  from 表名 order by 列名1, 列名2...;  # 先按 order by 中列1的順序排序,如果列1有相同值,相同部分按列2排序
# 降序排序
select 列名1, 列名2, 列名3... from 表名 order by 列名1 desc; 
# 也可以指定某一列為降序
select 列名1, 列名2, 列名3... from 表名 order by 列名1 desc, 列名2... ;  # 列1降序,列2升序,如果每列都想降序;必須對(duì)每列都指定desc關(guān)鍵字

找到一列中最高或最低值:

# 結(jié)合order by + limit
select 列名 from 表名 order by 列名 desc limit 1;  # 找到最高值

按指定搜索條件過濾檢索:

select 列名1, 列名2 from 表名 where 列名1 = 'a';  # 找到列名1中值等于a的 列1列2數(shù)據(jù)
select 列名1, 列名2 from 表名 where 列名1 between A and B;  # 找到列名1中值在`A<=值<=B`范圍內(nèi)的 列1列2數(shù)據(jù)
# where 子句可以組合使用
select 列名1, 列名2, 列名3 from 表名 where 列名1=100 and 列名2 <=10;  # 找到 列名1中值=100 并且 列2數(shù)據(jù)<=10 的 列1列2列3數(shù)據(jù)
select 列名1, 列名2, 列名3 from 表名 where 列名1=100 or 列名2 =200;  # 找到 列名1中值=100 或者 列2數(shù)據(jù)=200 的 列1列2列3數(shù)據(jù)
# where子句的計(jì)算次序(默認(rèn) AND 的優(yōu)先級(jí)高于 OR)
select 列名1, 列名2, 列名3 from 表名 where 列名1=100 or 列名2 =200 and 列名3>=10;  # 等價(jià)于WHERE (列名1 = 100) OR (列名2 = 200 AND 列名3 >= 10);找到 列名1中值=100 或者 (列2數(shù)據(jù)=200并且列名3>=10) 的 列1列2列3數(shù)據(jù)
select 列名1, 列名2, 列名3 from 表名 where (列名1=100 or 列名2 =200) and 列名3>=10;  # 找到 (列名1中值=100或者列2數(shù)據(jù)=200)并且 列名3>=10 的 列1列2列3數(shù)據(jù)
# where 子句的 in 操作符:in 操作符等價(jià)于多個(gè) or 條件組合。它的作用是檢查 列名1 的值是否匹配括號(hào)中的任意一個(gè)值
select 列名1, 列名2, 列名3 from 表名 where 列名1 in (值1, 值2, 值3) order by 列名2;
# where 子句的 not 操作符:not 操作符否定它之后所跟的任何條件
select 列名1, 列名2, 列名3 from 表名 where 列名1 not in (值1, 值2, 值3) order by 列名2;

在同時(shí)使用order bywhere子句時(shí),應(yīng)該讓order by位于where之后,否則將會(huì)產(chǎn)生錯(cuò)誤

where 子句操作符

操作符說明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
between在指定的兩個(gè)值之間
(包括邊界值)

空值檢索:

select 列名 from 表名 where 列名 is null;

用通配符過濾檢索:

# %通配符:%表示任何字符出現(xiàn)任意次數(shù)。(%會(huì)區(qū)分大小寫;%可以匹配0個(gè)字符)
select 列名 from 表名 where 列名 like 'aaa' order by 列名;  # 檢索字符串 完全等于 'aaa' 的字符串
select 列名1 from 表名 where 列名1 like 'aaa%';  # 檢索任意以aaa開頭的字符串(字符串:aaa也會(huì)被檢索)
select 列名1 from 表名 where 列名1 like '%aaa%';  # 檢索任何包含aaa的字符串
select 列名1 from 表名 where 列名1 like 'a%b';  # 檢索任何以a開頭b結(jié)尾的字符串

# %通配符不能匹配null
select 列名1 from 表名 where 列名1 like '%';  # 這樣也檢索不到 null 值
# _通配符:和%通配符用途一樣,但只匹配單個(gè)字符
select 列名1 from 表名 where 列名1 like 'aaa_';  # 檢索任意以aaa開頭且后面只跟一個(gè)字符的字符串 (字符串:aaa不會(huì)被檢索;aaall也不會(huì)被檢索,只能檢索到aaal)

用正則表達(dá)式進(jìn)行搜索

# 基本字符匹配(正則表達(dá)式不會(huì)區(qū)分大小寫,區(qū)分大小寫的話需要在 regexp 后面添加 binary 關(guān)鍵字,)
select 列名 from 表名 where 列名 regexp 'aaa' order by 列名;  # 檢索字符串所有包含aaa的字符串
select 列名 from 表名 where 列名 regexp '.aaa' order by 列名;  # 檢索字符串所有包含aaa結(jié)且前面跟有一個(gè)字符 的 字符串(.表示匹配任意一個(gè)字符,例如:22aaa,2aaa,2aaab)

# or 匹配 (|)
select 列名 from 表名 where 列名 regexp 'aaa|bbb|ccc' order by 列名;  # 匹配包含 aaa、bbb 或 ccc 任意一個(gè)的字符串

# 匹配幾個(gè)字符之一 ([])
select 列名 from 表名 where 列名 regexp '[123]aaa' order by 列名;  # 它要求該字符串必須以 1、2 或 3 之一開始,并緊接著是 aaa。換句話說,它會(huì)匹配 1aaa、2aaa 或 3aaa 開頭的任何字符串。

# 匹配范圍
select 列名 from 表名 where 列名 regexp '[1-5]aaa' order by 列名;  # 匹配 列名 中以數(shù)字 1 到 5 之間的任何一個(gè)數(shù)字開頭,并緊接著是 aaa 的字符串

# 匹配特殊字符(例如:.[]|_等):用\\為前導(dǎo)
select 列名 from 表名 where 列名 regexp '\\.' order by 列名;  # 匹配包含 .(點(diǎn)號(hào))的字符串

空白元字符

元 字 符說 明
\\f換頁
\\n換行
\\r回車
\\t制表
\\v縱向制表

字符類:放在 方括號(hào)內(nèi)部 ,例如 [[:alnim:]]

說 明
[:alnum:]任意字母和數(shù)字(同[a-z A-Z 0-9])
[:alpha:]任意字符(同[a-z A-Z])
[:blank:]空格和制表(同[\\t])
[:cntrl:]ASCII控制字符(ASCII 0到31和127)
[:digit:]任意數(shù)字(同[0-9])
[:graph:]與[:print:]相同,但不包括空格
[:lower:]任意小寫字母(同[a-z])
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空格在內(nèi)的任意空白字符(同[\\f \\n \\r \\t \\v])
[:upper:]任意大寫字母(同[A-Z])
[:xdigit:]任意十六進(jìn)制數(shù)字(同[a-fA-F0-9])

重復(fù)元字符

元 字 符說明
*0個(gè)或多個(gè)匹配
+1個(gè)或多個(gè)匹配(等于{1,})
?0個(gè)或1個(gè)匹配(等于{0,1})
{n}指定數(shù)目的匹配
{n,}不少于指定數(shù)目的匹配
{n,m}匹配數(shù)目的范圍(m不超過255)
# 舉例
select 列名 from 表名 where 列名 regexp '[[:digit:]]{4}'  # 匹配任何包含 4個(gè)連續(xù)數(shù)字 的字符串
select 列名 from 表名 where 列名 regexp '[0-9][0-9][0-9][0-9]'  # 和上面一致:匹配任何包含 4個(gè)連續(xù)數(shù)字 的字符串
select 列名 from 表名 where 列名 regexp '\\([0-9]aas?\\)'  # 匹配任何包含 以(開頭,后跟一個(gè)數(shù)字,后跟aas或者aa(aaa? 只匹配 aas 或 aa) 最后跟一個(gè)) 的字符串

定位元字符

元 字 符說明
^文本的開始
$文本的結(jié)尾
[[:<:]]詞的開始
[[:>:]]詞的結(jié)尾
# 舉例
select 列名 from 表名 where 列名 regexp '^[0-9\\.]'  # 匹配任何 以一個(gè)數(shù)字(0-9)或一個(gè)點(diǎn)(.)開始 的字符串
select 列名 from 表名 where 列名 regexp '[0-9\\.]'  # 匹配任何 包含至少一個(gè)數(shù)字(0-9)或一個(gè)點(diǎn)號(hào)(.)的字符串。

創(chuàng)建計(jì)算字段

拼接字段:Concat()需要一個(gè)或多個(gè)指定的串,各個(gè)串之間用逗號(hào)分隔。

select concat(列名1, '(', 列名2, ')') from 表名 order by 列名1;  # 返回結(jié)果:列名1(列名2)

刪除數(shù)據(jù)右側(cè)多余的空格:RTrim()

select concat(rtrim(列名1), '(', 列名2, ')') from 表名 order by 列名1;  # rtrim():去掉右邊所有空格;  ltrim():去掉左邊所有空格;  trim():去掉兩邊所有空格

使用別名:as

select concat(rtrim(列名1), '(', 列名2, ')') as 新列名 from 表名 order by 列名1;

執(zhí)行算數(shù)計(jì)算:

select 列名3+列名4 as 新列名 from 表名;

算術(shù)操作符

操作符說明
+
-
*
/

使用數(shù)據(jù)處理函數(shù)

文本處理函數(shù)

函數(shù)說明
upper(string)將文本轉(zhuǎn)換為大寫
trim(string)去掉兩邊所有空格
left(string, length)返回串左邊的字符
length(string)返回串的長(zhǎng)度
locate(substring, string, [start_position])返回一個(gè)子字符串在另一個(gè)字符串中首次出現(xiàn)的位置
lower(string)將串轉(zhuǎn)換為小寫
right(string, length)返回串右邊的字符
soundex(string)將字符串轉(zhuǎn)換為一個(gè)表示其發(fā)音的編碼值(用于模糊匹配和聲音相似度比較)
subString(string, start, length)從一個(gè)字符串中提取指定位置開始的子字符串
select left(列名1, 3) as 新列名 from 表名;  # 返回列名1的前3個(gè)字符
select locate('Pro', product_name, 3) from 表名;  # 從 列product_name 第3個(gè)字符開始 找到 Pro 首次出現(xiàn)的位置(找不到返回 0 )
select right(列名1, 3) as 新列名 from 表名;  # 返回列名1的后3個(gè)字符
select soundex(列名) from 表名;  # 返回每個(gè)數(shù)據(jù)發(fā)音的編碼值
select 列名 from 表名 where soundex(列名) = soundex('Smith');  # 想找出所有發(fā)音與 "Smith" 相似的數(shù)據(jù)
select subString(列名, 1, 3) FROM 表名;  # 提取前 3 個(gè)字符
select subString(列名, 4) FROM 表名;  # 從第 4 個(gè)字符開始提取,提取到字符串的末尾

日期和時(shí)間處理函數(shù)

函數(shù)說明
AddDate()增加一個(gè)日期(天、周等)
AddTime()增加一個(gè)時(shí)間(時(shí)、分等)
CurDate()返回當(dāng)前日期
CurTime()返回當(dāng)前時(shí)間
Date()返回日期時(shí)間的日期部分
DateDiff()計(jì)算兩個(gè)日期之差
Date_Add()高度靈活的日期運(yùn)算函數(shù)
Date_Format()返回一個(gè)格式化的日期或時(shí)間串
Day()返回一個(gè)日期的天數(shù)部分
DayOfWeek()對(duì)于一個(gè)日期,返回對(duì)應(yīng)的星期幾
Hour()返回一個(gè)時(shí)間的小時(shí)部分
Minute()返回一個(gè)時(shí)間的分鐘部分
Month()返回一個(gè)日期的月份部分
Now()返回當(dāng)前日期和時(shí)間
Second()返回一個(gè)時(shí)間的秒部分
Time()返回一個(gè)日期時(shí)間的時(shí)間部分
Year()返回一個(gè)日期的年份部分

數(shù)值處理函數(shù)

函數(shù)說明
Abs()返回一個(gè)數(shù)的絕對(duì)值
Cos()返回一個(gè)角度的余弦
Exp ()返回一個(gè)數(shù)的指數(shù)值
Mod()返回除操作的余數(shù)
Pi()返回圓周率
Rand()返回一個(gè)隨機(jī)數(shù)
Sin()返回一個(gè)角度的正弦
Sqrt()返回一個(gè)數(shù)的平方根
Tan()返回一個(gè)角度的正切
select abs(列名) from 表名;  # 返回絕對(duì)值

匯總數(shù)據(jù)

聚合函數(shù) (MySQL返回結(jié)果一般比你在自己的客戶機(jī)應(yīng)用程序中計(jì)算要快得多。)

函數(shù)說 明
AVG()返回某列的平均值, 忽略列值為NUL的行。
COUNT()返回某列的行數(shù)() COUNT(*)對(duì)表中行的數(shù)目進(jìn)行計(jì)數(shù),不管表列中包含的是空值(NULL)還是非空值;COUNT(column) 對(duì)特定列中具有值的行進(jìn)行計(jì)數(shù),忽略NULL
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和

以上5個(gè)聚集函數(shù)都可以如下使用:

  • 對(duì)所有的行執(zhí)行計(jì)算,指定ALL參數(shù)或不給參數(shù)(因?yàn)?code>ALL是默認(rèn)行為);
  • 只包含不同的值,指定DISTINCT參數(shù)。(如果指定列名,則DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*),因此不允許使用COUNT(DISTINCT))
select avg(數(shù)值列名) from 表名;
select count(*) from 表名;
select avg(distinct prod_price) as acg_price from prducts where vend_id = 1003;
select count(*) as num_items, min(prod_price) as price_min, max(prod_price) as price_max, avg(prod_price) as price_avg from products; 

數(shù)據(jù)分組

GROUP BY子句

  • 如果在GROUP BY子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組上進(jìn)行匯總。
  • GROUP BY子句中列出的每個(gè)列都必須是檢索列或有效的表達(dá)式(但不能是聚集函數(shù))。
  • 如果分組列中具有NULL值,則NULL將作為一個(gè)分組返回。如果列中有多行NULL值,它們將分為一組。
  • GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY子句之前。
  • 使用WITH ROLLUP關(guān)鍵字,可以得到每個(gè)分組以及每個(gè)分組匯總級(jí)別(針對(duì)每個(gè)分組)的值
select vend_id, count(*) as num_prods from products group by vend_id;  # 對(duì)每個(gè)vend_id而不是整個(gè)表計(jì)算num_prods

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id WITH ROLLUP;  # WITH ROLLUP 是一個(gè)用于生成匯總數(shù)據(jù)的特殊選項(xiàng)。它在原本分組的基礎(chǔ)上,額外生成一個(gè)“總計(jì)”行,該行顯示所有vend_id的總產(chǎn)品數(shù)量。

HAVING子句

  • WHERE過濾行,HAVING過濾分組。
SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;  # 過濾掉 聚合后cust_id數(shù)量 小于2 的 cust_id

SELECT vend_id,COUNT(*) AS num_prods FROM products WHERE prod_price >=10 GROUP BY vend_id HAVING COUNT(*) >= 2;  # 過濾掉 聚合后vend_id數(shù)量小于2 且 prod_price大于或等于10的 vend_id

ORDER BY 子句

  • 一般在使用GROUP BY子句時(shí),應(yīng)該也給出ORDER BY子句
SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50 ORDER BY ordertotal;  # 查詢返回了所有ordertotal大于或等于 50 的order_num,并且按照ordertotal從小到大排序。

select 子句順序

子句說明是否必須使用
select要返回的列或表達(dá)式
from從中檢索數(shù)據(jù)的表僅在從表選擇數(shù)據(jù)時(shí)使用
where行級(jí)過濾
group by分組說明僅在按組計(jì)算聚集時(shí)使用
having組級(jí)過濾
order by輸出排序順序
limit要檢索的行數(shù)

使用子查詢

  • 子查詢:嵌套在其他查詢中的查詢
  • 子查詢從內(nèi)向外處理
  • WHERE子句中使用子查詢,應(yīng)該保證SELECT語句具有與WHERE子句中相同數(shù)目的列。
select cust_nume,cust_contact from customers where cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'tnt2'));  # 先在表orderitems中查詢prod_id='tnt2'的order_num,再在orders表中找 order_num=子句中查詢結(jié)果 的cust_id,最后在表customers中找到 cust_id=子句中查詢結(jié)果 的cust_nume和cust_contact

# 修改格式
select cust_nume,cust_contact 
from customers 
where cust_id in (select cust_id 
                  from orders 
                  where order_num in (select order_num 
                                      from orderitems 
                                      where prod_id = 'tnt2'));
                                      
# 等同于
SELECT cust_name,cust_contact
FROM customers,orders,orderitems
wHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num
AND prod_id = 'TNT2';

相關(guān)子查詢:涉及外部查詢的子查詢

SELECT cust_name,
       cust_state,
       (SELECT COUNT(*)
        FROM orders
       	WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;

聯(lián)結(jié)表

使用表別名

  • 例如:customers AS c
  • 表別名只在查詢執(zhí)行中使用
SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;

SELECT cust_name,cust_contact
FROM customers AS c,orders AS o,orderitems AS oi
WHERE c.Cust_id = o.Cust_id
AND oi.order_num = o.order_num
AND prod_id = 'TNT2';
  • 等值聯(lián)結(jié)(內(nèi)部聯(lián)結(jié))
    • 例如:vendors.vend_id = products.vend_id

    • 外鍵為某個(gè)表中的一列,它包含另一個(gè)表的主鍵值,定義了兩個(gè)表之間的關(guān)系。

    • 聯(lián)結(jié)是一種機(jī)制,用來在一條SELECT語句中關(guān)聯(lián)表,因此稱之為聯(lián)結(jié)。

    • 完全限定列名:在引用的列可能出現(xiàn)二義性時(shí),必須使用完全限定列名(用一個(gè)點(diǎn)分隔的表名和列名)。

    • 笛卡兒積:由沒有聯(lián)結(jié)條件的表關(guān)系返回的結(jié)果為笛卡兒積。檢索出的行的數(shù)目將是第一個(gè)表中的行數(shù)乘以第二個(gè)表中的行數(shù)

# 聯(lián)結(jié)(很少用,基本都用下面的內(nèi)聯(lián)結(jié)方式)
SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name;

# 笛卡爾積
SELECT vend_name,prod_name,prod_price
FROM vendorS,products
ORDER BY vend_name,prod_name;
  • 聯(lián)結(jié)多個(gè)表
SELECT prod_name, vend_name, prod_price, quantity
FROM orderitems,products,vendors
WHERE products.vend_id = vendors.vend_id
AND orderitems.prod_id = products.prod_id
AND order_num = 20005;
  • 內(nèi)聯(lián)結(jié)
    • 例如:vendors INNER JOIN products ON vendors.vend_id = products.vend_id
# 用內(nèi)聯(lián)結(jié)實(shí)現(xiàn)上面等值聯(lián)結(jié)的查詢
SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;  # INNER JOIN 表示將 vendors 表與 products 表按照 vend_id 進(jìn)行連接,連接條件是 vendors.vend_id 與 products.vend_id 相等。這樣能獲取所有與供應(yīng)商相關(guān)的產(chǎn)品信息。
  • 自聯(lián)結(jié)
    • 例如: pl.vend_id = p2.vend_id
    • p1和p2是同一個(gè)表
SELECT prod_id, prod_name
FROM products
WHERE vend_id = (SELECT vend_id
                 FROM products
                 WHERE prod_id = 'DTNTR');
                 
# 自聯(lián)結(jié)實(shí)現(xiàn)上述查詢
SELECT pl.prod_id, pl.prod_name
FROM products AS pl, products AS p2
WHERE pl.vend_id = p2.vend_id
  AND p2.prod_id = 'DTNTR';

  • 自然聯(lián)結(jié)

    • 無論何時(shí)對(duì)表進(jìn)行聯(lián)結(jié),應(yīng)該至少有一個(gè)列出現(xiàn)在不止一個(gè)表中(被聯(lián)結(jié)的列)。標(biāo)準(zhǔn)的聯(lián)結(jié)返回所有數(shù)據(jù),甚至相同的列多次出現(xiàn)。自然聯(lián)結(jié)排除多次出現(xiàn),使每個(gè)列只返回一次。

    • 自然聯(lián)結(jié)是這樣一種聯(lián)結(jié),其中你只能選擇那些唯一的列。這一般是通過對(duì)表使用通配符(SELECT *),對(duì)所有其他表的列使用明確的子集來完成的

SELECT c.*, o.order_num, o.order_date,
oi.prod_id, oi.quantity, oi.item_price
FROM customers AS c, orders AS o, orderitems AS oi
WHERE c.cust_id = o.cust_id
AND oi.order_num = o.order_num
AND oi.prod_id = 'FB';
  • 外部聯(lián)結(jié)
    • 聯(lián)結(jié)包含了那些在相關(guān)表中沒有關(guān)聯(lián)行的行。這種類型的聯(lián)結(jié)稱為外部聯(lián)結(jié)
      • 在使用OUTER JOIN語法時(shí),必須使用RIGHTLEFT關(guān)鍵字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右邊的表)。上面的例子使用LEFT OUTER JOINFROM子句的左邊表(customers表)中選擇所有行。
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;  # 返回 左表(第一個(gè)表) 中的所有記錄,對(duì)于沒有匹配的右表記錄,查詢結(jié)果中的相關(guān)列會(huì)顯示為 NULL

  • 使用帶聚集函數(shù)的聯(lián)結(jié)
SELECT customers.cust_name, customers.cust_id,
	   COUNT(orders.order_num) AS num_ord
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;

SELECT customers.cust_name,
customers.cust_id,
COUNT(orders.order_num) AS num_ord
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id= orders.cust_id
GROUP BY customers.cust_id;

組合查詢

有兩種基本情況,其中需要使用組合查詢:

  • 在單個(gè)查詢中從不同的表返回類似結(jié)構(gòu)的數(shù)據(jù);

  • 對(duì)單個(gè)表執(zhí)行多個(gè)查詢,按單個(gè)查詢返回?cái)?shù)據(jù)。

UNION規(guī)則:

  • UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關(guān)鍵字UNION分隔。
  • UNION中的每個(gè)查詢必須包含相同的列、表達(dá)式或聚集函數(shù)(不過各個(gè)列不需要以相同的次序列出)。
  • 列數(shù)據(jù)類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含地轉(zhuǎn)換的類型(例如,不同的數(shù)值類型或不同的日期類型)。
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5;

SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id in (1001,1002);

# 組合上面兩條語句
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id in (1001,1002);  # 會(huì)自動(dòng)去除重復(fù)的行

# 等同于
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
OR vend_id IN (1001,1002);

# 包含重復(fù)的行
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION ALL
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id in (1001,1002);  

# 對(duì)組合查詢結(jié)果排序
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id in (1001,1002)
ORDER BY vend_id, prod_price;   # 對(duì)返回最終結(jié)果進(jìn)行排序,不是只對(duì)第二條select語句進(jìn)行排序 

全文本搜索

  • 全文索引的默認(rèn)行為是忽略長(zhǎng)度小于一定字符數(shù)的詞。這個(gè)長(zhǎng)度閾值可以通過系統(tǒng)變量 ft_min_word_len 來配置,默認(rèn)值是 4 字符
  • MySQL規(guī)定了一條50%規(guī)則,如果一個(gè)詞出現(xiàn)在50%以上的行中,則將它作為一個(gè)非用詞忽略。50%規(guī)則不用于IN BOOLEAN MODE
  • 如果表中的行數(shù)少于3行,則全文本搜索不返回結(jié)果
  • 忽略詞中的單引號(hào)。例如,don’t索引為dont
  • 不具有詞分隔符(包括日語和漢語)的語言不能恰當(dāng)?shù)胤祷厝谋舅阉鹘Y(jié)果。
CREATE TABLE productnotes
(
note_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL,
PRIMARY KEY(note_id),
FULLTEXT(note_text)  # 為 note_text 字段創(chuàng)建全文索引
)ENGINE=MyISAM;
  • 如果正在導(dǎo)入數(shù)據(jù)到一個(gè)新表,應(yīng)該首先導(dǎo)入所有數(shù)據(jù),然后再修改表,定義FULLTEXT。
  • 必須先創(chuàng)建了FULLTEXT索引,才能使用match()against()進(jìn)行全文檢索查詢
  • Match()指定被搜索的列,Against()指定要使用的搜索表達(dá)式
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('rabbit');

SELECT note_text,
	Match(note_text) Against('rabbit') AS rank  # 計(jì)算每條記錄與搜索詞的相關(guān)性
FROM productnotes;  # 查詢結(jié)果返回note_text,rank兩列

查詢擴(kuò)展

  1. 進(jìn)行一個(gè)基本的全文本搜索,找出與搜索條件匹配的所有行
  2. MySQL檢查這些匹配行并選擇所有有用的詞
  3. MySQL再次進(jìn)行全文本搜索,這次不僅使用原來的條件,而且還使用所有有用的詞。
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION);  # 在原始查詢基礎(chǔ)上,自動(dòng)找到與 'anvils' 相關(guān)的其他詞匯(這些詞是基于 FULLTEXT 索引的相關(guān)文檔生成的)。

布爾文本搜索

  • 即使沒有FULLTEXT索引也可以使用
  • 在布爾方式中,不按等級(jí)值降序排序返回的行
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('heavy -rope*'IN BOOLEAN MODE);  # 匹配包含heavy但不包含任意以rope開始的詞的行

全文本布爾操作符

布爾操作符說明
+包含,詞必須存在
-排除,詞必須不出現(xiàn)
>包含,而且增加等級(jí)值
<包含,且減少等級(jí)值
()把詞組成子表達(dá)式(允許這些子表達(dá)式作為一個(gè)組被包含、排除、排列等)
~取消一個(gè)詞的排序值
*詞尾的通配符
“”定義一個(gè)短語(與單個(gè)詞的列表不一樣,它匹配整個(gè)短語以便包含或排除這個(gè)短語)
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('+rabbit +bait' IN BOOLEAN MODE);  # 匹配包含詞rabbit和bait的行

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('rabbit bait' IN BOOLEAN MODE);  # 匹配包含rabbit和bait中的至少一個(gè)詞的行

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('"rabbit bait"' IN BOOLEAN MODE);  # 匹配短語rabbit bait而不是匹配兩個(gè)詞rabbit和 bait

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('>rabbit <carrot' IN BOOLEAN MODE);  # 匹配rabbit和carrot,增加前者的等級(jí),降低后者的等級(jí)

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('+safe +(<combination)' IN BOOLEAN MODE);  # 匹配詞safe和combination,降低后者的等級(jí)。

總結(jié) 

到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)語句的文章就介紹到這了,更多相關(guān)MySQL語句詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL之where使用詳解

    MySQL之where使用詳解

    我們需要獲取數(shù)據(jù)庫(kù)表數(shù)據(jù)的特定子集時(shí),可以使用where子句指定搜索條件進(jìn)行過濾。本文主要介紹了MySQL之where使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Linux下卸載MySQL數(shù)據(jù)庫(kù)

    Linux下卸載MySQL數(shù)據(jù)庫(kù)

    如何在Linux平臺(tái)卸載MySQL呢?這篇文章主要介紹了Linux下卸載MySQL數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • MySQL 觸發(fā)器的使用和理解

    MySQL 觸發(fā)器的使用和理解

    這篇文章主要介紹了MySQL 觸發(fā)器的使用和理解,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-02-02
  • mysql存儲(chǔ)過程事務(wù)管理簡(jiǎn)析

    mysql存儲(chǔ)過程事務(wù)管理簡(jiǎn)析

    本文將提供了一個(gè)絕佳的機(jī)制來定義、封裝和管理事務(wù),需要的朋友可以參考下
    2012-11-11
  • Centos下 修改mysql密碼的方法

    Centos下 修改mysql密碼的方法

    這篇文章主要介紹了Centos下 修改mysql密碼的方法,需要的朋友可以參考下
    2017-02-02
  • 在JPA項(xiàng)目啟動(dòng)時(shí)如何新增MySQL字段

    在JPA項(xiàng)目啟動(dòng)時(shí)如何新增MySQL字段

    這篇文章主要介紹了在JPA項(xiàng)目啟動(dòng)時(shí)新增MySQL字段,本來用了JPA,直接實(shí)體類加參數(shù)就可以新增字段了,但是架不住垃圾項(xiàng)目在啟動(dòng)項(xiàng)目時(shí)會(huì)加載數(shù)據(jù)庫(kù)SQL文件去插入數(shù)據(jù),需要一些操作幫助修復(fù),需要的朋友可以參考下
    2024-06-06
  • 很全面的MySQL處理重復(fù)數(shù)據(jù)代碼

    很全面的MySQL處理重復(fù)數(shù)據(jù)代碼

    這篇文章主要為大家詳細(xì)介紹了MySQL處理重復(fù)數(shù)據(jù)的實(shí)現(xiàn)代碼,如何防止數(shù)據(jù)表出現(xiàn)重復(fù)數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復(fù)數(shù)據(jù),感興趣的小伙伴們可以參考一下
    2016-05-05
  • Ubuntu中更改MySQL數(shù)據(jù)庫(kù)文件目錄的方法

    Ubuntu中更改MySQL數(shù)據(jù)庫(kù)文件目錄的方法

    這篇文章主要給大家介紹了關(guān)于在Ubuntu中更改MySQL數(shù)據(jù)庫(kù)文件目錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • ARM64架構(gòu)下安裝mysql5.7.22的全過程

    ARM64架構(gòu)下安裝mysql5.7.22的全過程

    這篇文章主要介紹了ARM64架構(gòu)下安裝mysql5.7.22的全過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • MySQL order by limit 分頁數(shù)據(jù)重復(fù)問題

    MySQL order by limit 分頁數(shù)據(jù)重復(fù)問題

    在MySQL中我們通常會(huì)采用limit來進(jìn)行翻頁查詢,比如limit(0,10)表示列出第一頁的10條數(shù)據(jù),limit(10,10)表示列出第二頁,但是,當(dāng)limit遇到order by的時(shí)候,可能會(huì)出現(xiàn)翻到第二頁的時(shí)候,竟然又出現(xiàn)了第一頁的記錄,下面就來介紹一下該問題的解決
    2026-03-03

最新評(píng)論

丽水市| 财经| 镇雄县| 维西| 苍梧县| 西乡县| 汤原县| 巢湖市| 平邑县| 兴隆县| 南充市| 隆子县| 锡林浩特市| 博客| 沁源县| 图片| 五家渠市| 新安县| 卢氏县| 宁德市| 新郑市| 百色市| 武平县| 东乡| 航空| 无极县| 澎湖县| 定远县| 娱乐| 合川市| 北碚区| 赤峰市| 潞西市| 三穗县| 县级市| 革吉县| 浦江县| 定兴县| 北流市| 石景山区| 台南市|