我們平時都是通過數(shù)據(jù)庫管理工具操作MYSQL數(shù)據(jù)表,那么如何在Intellij IDEA中操作MYSQL數(shù)據(jù)表呢?下面我給大家分享一下。
創(chuàng)新互聯(lián)建站主營武夷山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),武夷山h5重慶小程序開發(fā)搭建,武夷山網(wǎng)站營銷推廣歡迎武夷山等地區(qū)企業(yè)咨詢
工具/材料
Intellij IDEA
01
首先點擊右側(cè)的Data Source,選擇下拉菜單中的MySQL選項,如下圖所示
02
接下來在彈出的Data Sources and Drivers界面中輸入Mysql的用戶名和密碼進行數(shù)據(jù)庫連接,如下圖所示
03
連接成功MYSQL數(shù)據(jù)庫以后,數(shù)據(jù)庫中的表都會顯示出來了,如下圖所示,我們雙擊要操作的數(shù)據(jù)表
04
然后在右側(cè)就會顯示此數(shù)據(jù)表的所有數(shù)據(jù),在這里可以對數(shù)據(jù)表的數(shù)據(jù)進行相應(yīng)的增刪改查,如下圖所示
05
接下來點擊此數(shù)據(jù)表頂部的加號按鈕進行數(shù)據(jù)行的增加,如下圖所示
06
編輯完新的數(shù)據(jù)以后需要右鍵單擊數(shù)據(jù)行,然后選擇Submit New Row選項,如下圖所示
07
接下來我們還可以在輸入欄中通過列表進行數(shù)據(jù)的過濾,如下圖所示
08
最后,如果你不習(xí)慣操作界面,那么可以打開右側(cè)的SQL窗口按鈕,如下圖所示
09
然后在工作區(qū)就會展現(xiàn)出SQL編輯區(qū),我們就可以在里面輸入SQL語句進行數(shù)據(jù)表的操作,如下圖所示
mysql基本操作有:
命令行
1、顯示當(dāng)前數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)庫列表:mysql SHOW DATABASES;
2、建立數(shù)據(jù)庫:mysql CREATE DATABASE 庫名;
3、建立數(shù)據(jù)表:mysql USE 庫名;mysql CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
4、刪除數(shù)據(jù)庫:mysql DROP DATABASE 庫名;
5、刪除數(shù)據(jù)表:mysql DROP TABLE 表名;
6、將表中記錄清空:mysql DELETE FROM 表名;
7、往表中插入記錄:mysql INSERT INTO 表名 VALUES ("hyq","M");
8、更新表中數(shù)據(jù):mysql- UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';
9、用文本方式將數(shù)據(jù)裝入數(shù)據(jù)表中:mysql load data local infile "d:/mysql.txt" into table 表名;
10、導(dǎo)入.sql文件命令:mysql USE 數(shù)據(jù)庫名;mysql source d:/mysql.sql;
11、命令行修改root密碼:mysql update mysql.user set password=password('新密碼') where user='root';mysql flush privileges;
12.修改密碼的三種方法:mysqlupdate user set password=password('123456') where user='joy_pen';mysqlflush privileges;mysqlset password for 'joy_oen'=password('123456');mysqlgrant usage on *.* to 'joy_pen' identified by '123456';
1、創(chuàng)建數(shù)據(jù)庫
命令:create database 數(shù)據(jù)庫名 例如:建立一個名為xhkdb的數(shù)據(jù)庫mysql create database xhkdb;
2、顯示所有的數(shù)據(jù)庫
命令:show databases (注意:最后有個s)mysql show databases;
3、刪除數(shù)據(jù)庫
命令:drop database 數(shù)據(jù)庫名 例如:刪除名為 xhkdb的數(shù)據(jù)庫mysql drop database xhkdb;
4、連接數(shù)據(jù)庫
命令: use 數(shù)據(jù)庫名 例如:如果xhkdb數(shù)據(jù)庫存在,嘗試存取它:mysql use xhkdb; 屏幕提示:Database changed
5、當(dāng)前選擇(連接)的數(shù)據(jù)庫mysql select database();
6、當(dāng)前數(shù)據(jù)庫包含的表信息:mysql show tables; (注意:最后有個s)
三、表操作,操作之前應(yīng)連接某個數(shù)據(jù)庫
1、建表
命令:create table 表名 ( 字段名1 類型1 [,..字段名n 類型n]);
mysql create table MyClass(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default ''0'',
degree double(16,2));
2、獲取表結(jié)構(gòu)
命令: desc 表名,或者show columns from 表名
mysqlDESCRIBE MyClass
mysql desc MyClass;
mysql show columns from MyClass;
3、刪除表
命令:drop table 表名
例如:刪除表名為 MyClass 的表 mysql drop table MyClass;
4、插入數(shù)據(jù)
命令:insert into 表名 [( 字段名1[,..字段名n ])] values ( 值1 )[, ( 值n )]
例如,往表 MyClass中插入二條記錄, 這二條記錄表示:編號為1的名為Tom的成績?yōu)?6.45, 編號為2 的名為Joan 的成績?yōu)?2.99,編號為3 的名為Wang 的成績?yōu)?6.5.
mysql insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);
5、查詢表中的數(shù)據(jù)
1)、查詢所有行
命令: select 字段1,字段2,... from 表名 where 表達式
例如:查看表 MyClass 中所有數(shù)據(jù) mysql select * from MyClass;
2)、查詢前幾行數(shù)據(jù)
例如:查看表 MyClass 中前2行數(shù)據(jù)
mysql select * from MyClass order by id limit 0,2;
6、刪除表中數(shù)據(jù)
命令:delete from 表名 where 表達式
例如:刪除表 MyClass中編號為1 的記錄
mysql delete from MyClass where id=1;
7、修改表中數(shù)據(jù):update 表名 set 字段=新值,… where 條件
mysql update MyClass set name=''Mary'' where id=1;
8、在表中增加字段:
命令:alter table 表名 add 字段 類型 其他;
例如:在表MyClass中添加了一個字段passtest,類型為int(4),默認值為0
mysql alter table MyClass add passtest int(4) default ''0''
9、更改表名:
命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改為YouClass
mysql rename table MyClass to YouClass;
更新字段內(nèi)容
update 表名 set 字段名 = 新內(nèi)容
update 表名 set 字段名 = replace(字段名,''舊內(nèi)容'',''新內(nèi)容'');
需要用的資料以鏈接的形式給需要的同學(xué)。
我用的mysql版本為: Mysql-5.5.45-win64.msi 密碼是:26zw
圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs
開始我的MySQL之旅吧 始于2016.12.04
--WH
一、數(shù)據(jù)庫的安裝
這個就不在這里過多闡述了,因為網(wǎng)上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就能夠安裝完好。
安裝好mysql后,如果需要使用windows命令窗口(也就是cmd)來操作mysql,那么就需要配置環(huán)境變量,在安裝好的mysql下找到bin,將其目錄放到環(huán)境變量path中去,就行了,檢測成功與否的方法是在cmd命令窗口中輸入mysql,就會出現(xiàn)一大段英文,就說明成功了,反之失敗,如果不會的話就去百度搜教程。
二、數(shù)據(jù)庫的基本操作
1、開啟mysql服務(wù)命令
net start mysql
2、進入mysql的兩種方式
明文進入:mysql -uroot -proot格式:mysql -u帳號 -p密碼
密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示為***這樣。
3、查看mysql中所有的數(shù)據(jù)庫(一般在固定的單詞命令就會是用大寫,這個要習(xí)慣,看多了敲多了就認識了)
前面四個數(shù)據(jù)庫是mysql中自帶的,也就是必須的.
SHOW DATABASES;
4、創(chuàng)建名為test_1的數(shù)據(jù)庫
格式:CREATE DATABASE 數(shù)據(jù)庫名
CREATE DATABASE test_1;
5、刪除名為test_1的數(shù)據(jù)庫
格式:DROP DATABASE 數(shù)據(jù)庫名
DROP DATABASE test_1;
總結(jié):學(xué)習(xí)了對數(shù)據(jù)庫的三個操作,1、查看所有數(shù)據(jù)庫 2、創(chuàng)建數(shù)據(jù)庫 3、刪除數(shù)據(jù)庫
三、數(shù)據(jù)表的基本操作
數(shù)據(jù)表和數(shù)據(jù)庫還有Mysql三者的關(guān)系
mysql中保存了很多數(shù)據(jù)庫、一個數(shù)據(jù)庫中可以保存很多表。
對數(shù)據(jù)表的增(創(chuàng)建表)刪(刪除表)改(修改表字段)查(查詢表結(jié)構(gòu))。 注意:這里的操作對象是表,對表的操作也就是表的結(jié)構(gòu),和表中的字段的操作(字段和記錄要分清楚)
前提:表是在數(shù)據(jù)庫下的,所以要先確實使用哪個數(shù)據(jù)庫。
USE test_1;
1、創(chuàng)建數(shù)據(jù)表
格式:CREATE TABLE 數(shù)據(jù)表名(
字段名1數(shù)據(jù)類型[列級別約束條件],
字段名2數(shù)據(jù)類型[列級別約束條件],
字段名3數(shù)據(jù)類型[列級別約束條件]
);
注意:格式不一定需要這樣隔著寫,完全可以全部寫成一行。但是那樣寫可觀性非常差。我這樣寫只是為了可以看的更清晰。
解釋:
1、[]中括號中的內(nèi)容表示可以有可以沒有,
2、列級別這個“列”一定要搞清楚說的是什么,一張表中有行有列,列表示豎,行表示橫
3、約束條件后面會講到
1.1、創(chuàng)建沒有約束的student表
CREATE TABLE student( idINT(11), nameVARCHAR(12), ageINT(11) );
注釋:SHOW TABLES 查詢數(shù)據(jù)庫底下的所有表。
1.2、創(chuàng)建有約束的student表
六大約束:主鍵約束、外鍵約束、非空約束、唯一約束、默認約束、自動增加
1.2.1:主鍵約束
PRIMARY KEY(primary key):獨一無二(唯一)和不能為空(非空),通俗的講,就是在表中增加記錄時,在該字段下的數(shù)據(jù)不能重復(fù),不能為空,比如以上面創(chuàng)建的表為例子,在表中增加兩條記錄,如果id字段用了主鍵約束。則id不能一樣,并且不能為空。一般每張表中度有一個字段為主鍵,唯一標(biāo)識這條記錄。以后需要找到該條記錄也可以同這個主鍵來確認記錄,因為主鍵是唯一的,并且非空,一張表中每個記錄的主鍵度不一樣,所以根據(jù)主鍵也就能找到對應(yīng)的記錄。而不是多條重復(fù)的記錄。如果沒有主鍵,那么表中就會存在很多重復(fù)的記錄,那么即浪費存儲空間,在查詢時也消耗更多資源。
一般被主鍵約束了的字段度習(xí)慣性的稱該字段為該表的主鍵
單字段主鍵約束
兩種方式都可以
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12),nameVARCHAR(12),
ageINT(11) ageINT(11),
); PRIMARY KEY(id) );
多字段主鍵約束(復(fù)合主鍵)
這個id和name都市主鍵,說明在以后增加的插入的記錄中,id和name不能同時一樣,比如說可以是這樣。一條記錄為id=1,name=yyy、另一條記錄為:id=1,name=zzz。 這樣是可以的。并不是你們所理解的兩個字段分別度不可以相同。
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12) PRIMARY KEY, nameVARCHAR(12),
ageINT(11) ageINT(11),
);PRIMARY KEY(id,name) );
1.2.2:外鍵約束
什么是外鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另一張表是dept(部門)表,一個員工屬于一個部門,那么如何通過員工能讓我們自己他在哪個部門呢?那就只能在員工表中增加一個字段,能代表員工所在的部門,那該字段就只能是存儲dept中的主鍵了(因為主鍵是唯一的,才能確實是哪個部門,進而代表員工所在的部門,如果是部門名稱,有些部門的名稱可能是同名。就不能區(qū)分了。),像這樣的字段,就符合外鍵的特點,就可以使用外鍵約束,使該字段只能夠存儲另一張表的主鍵。如果不被外鍵約束,那么該字段就無法保證存儲進來的值就一定是另一張表的主鍵值。
外鍵約束的特點:
1、外鍵約束可以描述任意一個字段(包括主鍵),可以為空,并且一個表中可以有多個外鍵。但是外鍵字段中的值必須是另一張表中的主鍵。
2、這樣被外鍵關(guān)聯(lián)的兩種表的關(guān)系可以稱為父子表或者主從表。子表(從表)擁有外鍵字段的表,父表(主表)被外鍵字段所指向的表。
3、子表被外鍵約束修飾的字段必須和父表的主鍵字段的類型一樣。
注意:一個表中有被外鍵修飾的字段,就稱該表有外鍵(是“有外鍵”。而不是“是外鍵”),并會給該表中的外鍵約束取一個名稱,所以我們常說的這個表有沒有外鍵,指的不是被外鍵約束修飾的字段名,而是指這個表是否有存在外鍵約束。也就是說,不能說這個表的外鍵是xxx(該表中被外鍵約束修飾的字段名),這種說法是錯誤的,但是大多數(shù)人已經(jīng)習(xí)慣了這樣,雖然影響不大,但是在很多時候需要理解一個東西時,會造成一定的困擾。
格式:CONSTRAINT外鍵名稱FOREIGN KEY(被外鍵約束的字段名稱)REFERENCES 主表名(主鍵字段)
英文解釋:CONSTRAINT:約束REFERENCES:參考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解釋:tableB中有一個名為tableA_tableB_1的外鍵關(guān)聯(lián)了tableA和tableB兩個表,被外鍵約束修飾的字段為tableB中的deptId,主鍵字段為tableA中的id
1.2.3:非空約束
NOT NULL. 被該約束修飾了的字段,就不能為空,主鍵約束中就包括了這個約束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:唯一約束
UNIQUE 被唯一約束修飾了的字段,表示該字段中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處于該字段的值不能是一樣的。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是說在插入的記錄中,每條記錄的name值不能是一樣的。
1.2.5:默認約束
Default 指定這一列的默認值為多少,比如,男性同學(xué)比較多,性別就可以設(shè)置為默認男,如果插入一行記錄時,性別沒有填,那么就默認加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自動增加
AUTO_INCREMENT 一個表只能一個字段使用AUTO_INCREMENT,并且使用這個約束的字段只能是整數(shù)類型(任意的整數(shù)類型 TINYINT,SMALLIN,INT,BIGINT),默認值是1,也就是說從1開始增加的。一般就是給主鍵使用的,自動增加,使每個主鍵的值度不一樣,并且不用我們自己管理,讓主鍵自己自動生成
CREATE TABLE table ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(22) NOT NULL );
2、查詢表結(jié)構(gòu)
2.1、查看表基本結(jié)構(gòu)語句
格式1:DESCRIBE 表名/DESC 表名這兩個的功能是一樣的,簡寫了單詞describe
DESCRIBE student;
2.2、查看創(chuàng)建表的語句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
這樣顯示的格式很不好,看不清楚,所以有了下面這個語句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
3、修改數(shù)據(jù)表
修改數(shù)據(jù)表包括:對表中字段的增加、刪除、修改。 在這個里面用的關(guān)鍵字為 ALTER
3.1、修改表名
格式:ALTER TABLE舊表名 RENAME[TO]新表名;
將student表名改為student1(改完后在改回來)
ALTER TABLE student RENAME TO student1;
3.2、修改表中的字段名
格式:ALTER TABLE表名 CHANGE舊字段名新字段名新數(shù)據(jù)類型
將student表中的name字段名改為 username
ALTER TABLE student CHANGE name username VARCHAR(30);
3.3、修改表中的數(shù)據(jù)類型
格式:ALTER TABLE表名 MODIFY字段名數(shù)據(jù)類型
ALTER TABLE student MODIFY username VARCHAR(20);
解釋:只能修改字段名的數(shù)據(jù)類型,但是其原理跟上面change做的事情一樣,這里也有修改字段名的過程,只不過修改后的字段名和修改前的字段名相同,但是數(shù)據(jù)類型不一樣。
3.4、修改字段的排列位置
方式1:ALTER TABLE表名 MODIFY字段1數(shù)據(jù)類型 FIRST|AFTER字段2
解釋:將字段1的位置放到第一,或者放到指定字段2的后面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE表名 CHANGE字段1字段2數(shù)據(jù)類型 FIRST|AFTER字段3
解釋:其實是一樣的,將是字段2覆蓋字段1,然后在進行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
總結(jié)
CHANGE和MODIFY的區(qū)別?
原理都市一樣的,MODIFY只能修改數(shù)據(jù)類型,但是CHANGE能夠修改數(shù)據(jù)類型和字段名,也就是說MODIFY是CHANGE的更具體化的一個操作??赡苡X得用CHANGE只改變一個數(shù)據(jù)類型不太爽,就增加了一個能直接改數(shù)據(jù)類型的使用關(guān)鍵字MODIFY來操作。
3.5、添加字段
格式:ALTER TABLE表名稱 ADD新字段名數(shù)據(jù)類型[約束條件][FIRST|AFTER已存在的表名]
解釋:在一個特定位置增加一個新的字段,如果不指定位置,默認是最后一個。
ALTER TABLE student ADD sex VARCHAR(11);
3.6、刪除字段
格式:ALTER TABLE表名稱 DROP字段名;
ALTER TABLE student DROP sex;
3.7、刪除表的外鍵約束
格式:ALTER TABLE表名稱 DROP FOREIGN KEY外鍵約束名
注意:外鍵約束名 指的不是被外鍵約束修飾的字段名,切記,而是我們在創(chuàng)建外鍵約束關(guān)系時取的名字。
3.8、更改表的存儲引擎
格式:ALTER TABLE表名 ENGINE=更改后的存儲引擎名
這個存儲引擎目前我自己也不太清楚,雖然知道有哪幾種引擎,但是稍微深入一點就不清楚了,所以打算留到日后在說。
4、刪除表
4.1、刪除無關(guān)聯(lián)表
格式:DROP TABLE表名;
ALTER TABLE student;
4.2、刪除被其他表關(guān)聯(lián)的主表
這個是比較重要的一點,在有外鍵關(guān)聯(lián)關(guān)系的兩張表中,如果刪除主表,那么是刪不掉的,并且會報錯。因為有張表依賴于他。那怎么辦呢?針對這種情況,總共有兩種方法
1、先刪除你子表,然后在刪除父表,這樣就達到了刪除父表的目的,但是子表也要被刪除
2、先解除外鍵關(guān)系,然后在刪除父表,這樣也能達到目的,并且保留了子表,只刪除我們不需要的父表。在3.7中就講解了如何刪除外鍵關(guān)系。
# SELECT 數(shù)據(jù)查詢(二)
## 對查詢結(jié)果排序 ORDER BY
ORDER BY 關(guān)鍵字主要用來將查詢結(jié)果中的數(shù)據(jù)按照一定的順序進行排序
1. 語法: - `order by 字段名 [asc|desc]`
- 說明 asc 按照升序排序【默認】, desc 按照降序排序
2. 注意:
- ORDER BY 關(guān)鍵字后可以跟子查詢 - 當(dāng)排序的字段中存在空值時,ORDER BY 會將該空值作為最小值來對待
- 當(dāng)排序的字段中存在空值時,ORDER BY 會將該空值作為最小值來對待查詢數(shù)據(jù)按字母升序進行排序(A Z),但數(shù)據(jù)的排序并不僅限于此,還可以使用 ORDER BY 中的 DESC 對查詢結(jié)果進行降序排序(Z A)。
## 條件查詢數(shù)據(jù) WHERE
如果需要有條件的從數(shù)據(jù)表中查詢數(shù)據(jù),可以使用 WHERE 關(guān)鍵字來指定查詢條件。
1. 語法 - `WHERE conditons`
- 帶比較運算符和邏輯運算符的查詢條件
- 帶 BETWEEN AND 關(guān)鍵字的查詢條件
- 帶 IS NULL 關(guān)鍵字的查詢條件
- 帶 IN 關(guān)鍵字的查詢條件 - 帶 LIKE 關(guān)鍵字的查詢條件
### 單條件查詢
### 多條件查詢
在 WHERE 關(guān)鍵詞后可以有多個查詢條件,這樣能夠使查詢結(jié)果更加精確。
多個查詢條件時用邏輯運算符 `AND()、OR(||)` 或 `XOR` 隔開。
1. AND :記錄 滿足所有條件,才會被查詢出結(jié)果
2. OR : 記錄 滿足任意一個查詢條件,才會被查詢出結(jié)果
3. XOR : 記錄 滿足其中一個條件,并且不滿足另外一個條件是,才會被查詢出結(jié)果
OR、AND 和 XOR 可以一起使用,但是在使用時要注意運算符的優(yōu)先級。
### 模糊查詢 LIKE [新知識 4me]
1. 語法:
- `[NOT]LIKE`
- NOT :可選參數(shù),字段中的內(nèi)容與指定的字符串不匹配時滿足條件。
- 字符串:指定用來匹配的字符串?!白址笨梢允且粋€很完整的字符串,也可以包含通配符。
LIKE 關(guān)鍵字支持百分號` % `和下劃線` _ `通配符。
#### 帶有“%”通配符的查詢
“%”是 MySQL 中最常用的通配符,它能代表 **任何長度的字符串** ,字符串的長度可以為 0。
例如,a%b表示以字母 a 開頭,以字母 b 結(jié)尾的任意長度的字符串。該字符串可以代表 ab、acb、accb、accrb 等字符串。
注意:匹配的字符串必須加 *單引號* 或 *雙引號* 。
#### 帶有“_”通配符的查詢
“_”只能代表單個字符,字符的長度不能為 0。 例如,a_b可以代表 acb、adb、aub 等字符串。
#### LIKE 區(qū)分大小寫(默認不區(qū)分)
默認情況下,LIKE 關(guān)鍵字匹配字符的時候是 不 區(qū)分大小寫的。如果需要 可以加入`BINARY`關(guān)鍵字
#### 使用通配符的注意事項和技巧
1. 注意事項:
- 注意大小寫。MySQL 默認是不區(qū)分大小寫的。如果區(qū)分大小寫,像“Tom”這樣的數(shù)據(jù)就不能被“t%”所匹配到。
- 注意尾部的空格 尾部空格會干擾通配符的匹配。例如,“T% ”就不能匹配到“Tom”。
- 注意NULL?!?”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是說 “%”匹配不到 tb_students_info 數(shù)據(jù)表中值為 NULL 的記錄。
2. 使用技巧:
- 不要過度使用通配符,如果其它操作符能達到相同的目的,應(yīng)該使用其它操作符。因為 MySQL 對通配符的處理一般會比其他操作符花費更長的時間。
- 在確定使用通配符后,除非絕對有必要,否則不要把它們用在字符串的開始處。把通配符置于搜索模式的開始處,搜索起來是最慢的。
- 仔細注意通配符的位置。如果放錯地方,可能不會返回想要的數(shù)據(jù)。 ** *拓展* ** 如果查詢內(nèi)容中包含通配符,可以使用“”轉(zhuǎn)義符。
*** 2021-12-23 今天先學(xué)到這里 明天繼續(xù) MySql 的查詢 學(xué)習(xí)
插入數(shù)據(jù)
insert into 表名(字段) values(‘?dāng)?shù)據(jù)’);
insert into 表名1(name,age) select name,age from 表2; #表2 數(shù)據(jù)信息復(fù)制到表1
修改數(shù)據(jù)
update 表名 set '字段'='數(shù)據(jù)';??? #修改數(shù)據(jù)
delect from 表名 where 字段=值;?? #刪除數(shù)據(jù)
truncate table 表名;?????????? #清空所有數(shù)據(jù) 且無法恢復(fù)
DQL (數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù))
select 要查詢字段 from 表名 [where 滿足條件];
[group by 分組依據(jù)]
[order by 排序依據(jù)]
[limit 限定輸出結(jié)果]
select * from 表名;???????? #查詢 表 所有數(shù)據(jù)
select 字段 字段 from 表名;????? #查詢指定字段數(shù)據(jù)
select st.name,st.age,th.name,th.age from st,th;??????????? #查詢一個或多個? 表中的數(shù)據(jù)
SELECT 字段名 FROM 表名 WHERE 條件1 OR 條件2 [...OR 條件n];
例:SELECT * FROM students WHERE age20 OR education!='大專'; #查詢年齡小于20或 者學(xué)歷不等于大專的學(xué)生信息
SELECT 字段名 FROM 表名 WHERE 條件1 AND 條件2 [...AND 條件n];
例:SELECT * FROM students WHERE age22 AND education='大專'; # 查詢年齡大于22 且學(xué)歷為大專的學(xué)生信息
select 字段 from 表名 where age in (12,17,23);????????????? #數(shù)據(jù)在指定 數(shù)據(jù) 里面
select 字段 from 表名 where age between 23 and 28;?????? #數(shù)據(jù)在23-28 之間
select * from 表名 order by 字段名;???????????????????? ?#排序,升序
select 字段 from 表名 order by desc;????????????????? ???? ?#?? 字段降序
select 字段1,字段2…… from 表名 group by? 分組依據(jù)字段;????????? #每個字段只顯示一條
例:SELECT id,sname,age,phone,place,GROUP_CONCAT(age,place) FROM students GROUP BY age,place; #查詢學(xué)生信息,根據(jù)age,place分組并顯示每一組的記 錄
select? distinct? 字段 from? 表名;????????????????????????? #去除結(jié)果重復(fù)行
例:SELECT DISTINCT age FROM students; # 查詢學(xué)生的年齡段情況
selcet 字段1,字段2,group_concat(分組依賴字段名) from 表名 group by 分組依賴字段名;??? #查詢每個組中記錄數(shù)量,顯示出來(使用關(guān)鍵字GROUP BY與GROUP_CONCAT()函數(shù)一起使用,可以將每個組中的記錄數(shù)量都顯 示出來)
例:selcet id,sname,age,phone,GROUP_CONCAT(age) FROM students GROUP BY age; # 查詢學(xué)生id,姓名,年齡,電話,根據(jù)age分組并顯示每一組的記錄
SELECT 字段名 FROM 表名 [其他條件] LIMIT int,int; 參數(shù)1是開始讀取的第一條記錄的 編號,參數(shù)2是要查詢記錄的個數(shù)
例:SELECT * FROM students ORDER BY age LIMIT 0,5; # 查詢學(xué)生信息,根據(jù)age 排序從第0位開始顯示,只顯示5條
select?字段名?from?表名where字段名?regexp '匹配方式';
(^匹配以特定字符或 字符串開頭的記錄,
$匹配以特定字符或 字符串結(jié)尾的記錄
[^字符集 合]匹配除“字符集合”以 外的任意一個字符
S1|S2|S3匹配S1 S2 S3中 的任意一個字符串
字符串{N }匹配字符串出現(xiàn)N次
字符串 {M,N}匹配字符串出現(xiàn)至 少M次,最多N次)
聚合函數(shù)查詢
select?count(字段名)?from 表名;?????????? #對于除"*"以外的任何參數(shù),返回所選擇集合中非NULL值的行的數(shù)目;對于參數(shù)“*”,返回選擇集 合中所有行的數(shù)據(jù),包含NULL值的行
例:SELECT COUNT(*) FROM students;
select?sum(字段名) from 表名;????????? #表中某個字段取值的總和
select avg(字段名) from 表名;???????#表中某個字段取值的平均值
select max(字段名) from 表名;?????? ?#表中某個字段取值的最大值
select min(字段名) from 表名;??????? ?#表中某個字段取值的最小值
連接查詢
a.內(nèi)連接:列出數(shù)據(jù)表中與連接條件相匹配的數(shù)據(jù)行,組合成新記錄【只有滿足條件的記錄才出現(xiàn)在查詢結(jié) 果】 內(nèi)連接的最常見的例子是相等連接,也就是連接后的表中的某個字段與每個表中的都相同
select 字段名1,字段名2? from 表名1?inner join 表名2?where 連接條件;
例:select s.name,d.dname?from staff s inner join department d WHERE s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,并查詢員工姓名和部門名稱
b.外連接:與內(nèi)連接不同,外連接是指使用OUTER JOIN關(guān)鍵字將兩個表連接起來。外連接生成的結(jié)果集不僅 包含符合連接條件的行數(shù)據(jù) ,而且還包含左表(左外連接時的表) 右表(右外連接時的表)或 兩邊連接表(全外連接時的表)中所有的數(shù)據(jù)行。
select?字段名稱?from 表名1 LEFT|RIGHT?join 表名2 on 表名1.字段名1 = 表名2.字段名2;
例:select?s.name,d.dname FROM staff s LEFT JOIN department d ON s.dpid = d.id; #連接員工表的dpid字段和部門表的id字段,并查詢員工姓名和部門名稱,如果右表中沒有對應(yīng)的 連接數(shù)據(jù),會自動添加NULL值
例:SELECT s.name,d.dname FROM staff s RIGHT JOIN department d ON s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,并查詢員工姓名和部門名稱,如果左表中沒有對應(yīng) 的連接數(shù)據(jù),會自動添加NULL值
例:SELECT 字段名1,字段名2 FROM 表名1,表名2 WHERE 連接條件 AND 限制條件; 例:SELECT s.name,d.dname FROM staff s,department d WHERE s.dpid = d.id AND s.dpid1; # 查詢員工姓名和部門名稱,條件是員工表的dpid字段與部門表中的id字段相等,并且dpid大于1
合并查詢結(jié)果
select 字段名?from ?表名 UNION?select 字段名 ?from 表名;?? #關(guān)鍵字UNION是將所 有的查詢結(jié)果合并到一起,并且去除相同記錄
例:SELECT dpid FROM staff UNION SELECT id FROM department; # 查詢員工表dpid與部門表id,如果有重復(fù)數(shù)據(jù),只顯示一次
select?字段名?drom 表名 UNION ALL?select 字段名from表名;?? #關(guān)鍵字UNION ALL 則只是簡單地將結(jié)果合并到一 起
例:SELECT dpid FROM staff UNION ALL SELECT id FROM department; # 查詢員工表dpid與部門表id,全部顯示
# SELECT 數(shù)據(jù)查詢
## 基礎(chǔ)
顯示如何使用簡單的`select`語句查詢單個表中的數(shù)據(jù) 使用`SELECT`語句從表或視圖獲取數(shù)據(jù)。
表由行和列組成,如電子表格。 通常,我們只希望看到子集行,列的子集或兩者的組合。
SELECT語句的結(jié)果稱為結(jié)果集,它是行列表,每行由相同數(shù)量的列組成。
select 語法
SELECT語句由以下列表中所述的幾個子句組成:
1. SELECT 之后是逗號分隔列或星號(*)的列表,表示要返回所有列。
2. FROM 指定要查詢數(shù)據(jù)的表或視圖。
3. JOIN 根據(jù)某些連接條件從其他表中獲取數(shù)據(jù)。
4. WHER E過濾結(jié)果集中的行。
5. GROUP BY將一組行組合成小分組,并對每個小分組應(yīng)用聚合函數(shù)。
6. HAVING 過濾器基于GROUP BY子句定義的小分組。
7. ORDER BY 指定用于排序的列的列表。
8. LIMIT 限制返回行的數(shù)量。
語句中的`SELECT`和`FROM`語句是必須的,其他部分是可選的。
`SELECT`語句允許通過在`SELECT`子句中指定逗號分隔列的列表來查詢表的部分數(shù)據(jù)
建議顯式獲取數(shù)據(jù)的列,原因如下:
1. 使用星號(*)可能會返回不使用的列的數(shù)據(jù)。 它在MySQL數(shù)據(jù)庫服務(wù)器和應(yīng)用程序之間產(chǎn)生不必要的I/O磁盤和網(wǎng)絡(luò)流量。
2. 如果明確指定列,則結(jié)果集更可預(yù)測并且更易于管理。 想象一下,當(dāng)您使用星號(*)并且有人通過添加更多列來更改表格數(shù)據(jù)時,將會得到一個與預(yù)期不同的結(jié)果集。
3. 使用星號(*)可能會將敏感信息暴露給未經(jīng)授權(quán)的用戶
格式 `select 列篩選 form table where 行篩選`
還有一些有用的運算符可以在WHERE子句中使用來形成復(fù)雜的條件,例如:
BETWEEN 選擇在給定范圍之內(nèi)的值。
LIKE 匹配基于模式匹配的值。
IN 指定值是否匹配列表中的任何值。
IS NULL 檢查該值是否為NULL。
## SELECT 子查詢
在一個查詢過程中 嵌套另一個查詢,子查詢的結(jié)果作為外部查詢的條件或者數(shù)據(jù)范圍來使用。
分為 3 類:
1. where 型
- `select展示列名 from 表名 where 列名 運算符[in...] (select 對應(yīng)列名 from ...)`
- 這個列名 和 對應(yīng)列名 應(yīng)該做到類型相同
- 如果不加入運算符 也可使用IN 這些類似的符號 - `select 展示列名 from 表名 where 列名 in (select 對應(yīng)列名 from ...)`
- ex:
`select 展示列名 from 表名 where 列名 ALL(select 對應(yīng)列名 from ....)`;
比子查詢的值都大
`select 展示列名 from 表名 where 列名 ANY(select 對應(yīng)列名 from ....);`
比子查詢的任意一個值大
2. from 型
- `select 展示列名 from 表名 inner join (select 列名 from ...) 臨時表名 on 條件;`
- 其中,select的子查詢所得的表 為臨時表,后跟臨時表名,可在條件判斷中指代
3. exist 型
- `select 展示列 from 表名 where exists (select 列名 from 表名 where 條件);`
- 將主查詢的結(jié)果帶入子查詢進行條件判斷和匹配,如果查詢出結(jié)果即保留。
## 去重 DISTINCT
SELECT 語句執(zhí)行簡單的數(shù)據(jù)查詢時,返回的是所有匹配的記錄。`distinct` 實現(xiàn)查詢不重復(fù)的數(shù)據(jù)
**DISTINCT 關(guān)鍵字的主要作用就是對數(shù)據(jù)表中一個或多個字段重復(fù)的數(shù)據(jù)進行過濾,只返回其中的一條數(shù)據(jù)給用戶。**
使用 `DISTINCT` 關(guān)鍵字時需要注意以下幾點:
- `DISTINCT` 關(guān)鍵字只能在 `SELECT` 語句中使用。
- 在對一個或多個字段去重時,`DISTINCT` 關(guān)鍵字必須在所有字段的最前面。
- 如果 `DISTINCT` 關(guān)鍵字后有多個字段,則會對多個字段進行組合去重,也就是說,只有多個字段組合起來完全是一樣的情況下才會被去重。
## 指定別名 AS
### 1. 為表指定別名
1. 當(dāng)表名很長的時候 或者 執(zhí)行了一些特殊的查詢的時候,為方便操作,可以為表指定一個別名,用以替代原來的名稱
2. 語法.
3. `表名 as 別名` - 含義: - `表名` : 數(shù)據(jù)庫中存儲的數(shù)據(jù)表名稱。
- `別名` : 查詢的時候指定的新的名稱。
- `as` : 此關(guān)鍵字 可以 省略,省略之后要將 `表名`與`別名`用 `空格` 分開
** *注意:表的別名不能與該數(shù)據(jù)庫的其它表同名。字段的別名不能與該表的其它字段同名。在條件表達式中不能使用字段的別名,否則會出現(xiàn)“ERROR 1054 (42S22): Unknown column”這樣的錯誤提示信息。* **
*** ex1:
***
### 2. 為字段指定別名
1. 在使用 SELECT 語句查詢數(shù)據(jù)時,MySQL 會顯示每個 SELECT 后面指定輸出的字段。有時為了顯示結(jié)果更加直觀,我們可以為字段指定一個別名。
2. 語法:
3. `字段名 [AS] 別名`
- 含義:
- `字段名`:為數(shù)據(jù)表中字段定義的名稱。
- `字段別名`:字段新的名稱。
- `AS` 關(guān)鍵字可以省略,省略后需要將字段名和別名用空格隔開
** *注意:表別名只在執(zhí)行查詢時使用,并不在返回結(jié)果中顯示。而字段定義別名之后,會返回給客戶端顯示,顯示的字段為字段的別名* ** ***
ex2:
***
## 限制查詢條數(shù) LIMIT
1. LIMIT 關(guān)鍵字有 3 種使用方式,即
- `指定初始位置`、
- `不指定初始位置`
- `OFFSET 組合`使用
(。。。。。 我之前一直不知道, 只會使用 `limit 200`。。。。。)
### 指定初始位置
1. 語法
- `LIMIT 初始位置,記錄數(shù)`
- 初始位置”表示從哪條記錄開始顯示;第一條記錄的位置是 0,第二條記錄的位置是 1。后面的記錄依次類推。
- “記錄數(shù)”表示顯示記錄的條數(shù)。
- *LIMIT 后的兩個參數(shù)必須都是正整數(shù)。
* ex:tb_students_info 表中,使用 LIMIT 子句返回從第 4 條記錄開始的行數(shù)為 5 的記錄,SQL 語句和運行結(jié)果如下。
### 不指定初始位置
記錄從第一條記錄開始顯示。顯示記錄的條數(shù)由 LIMIT 關(guān)鍵字指定。
1. 語法
- `LIMIT 5`
- `SELECT * FROM tb_students_info LIMIT 15;`
### LIMIT 和 OFFSET 組合使用
1. 語法
- `LIMIT 記錄數(shù) OFFSET 初始位置`
- 參數(shù)和 LIMIT 語法中參數(shù)含義相同,“初始位置”指定從哪條記錄開始顯示;“記錄數(shù)”表示顯示記錄的條數(shù)。
該語句返回的是從第 4 條記錄開始的之后的 5 條記錄。即“ LIMIT 5 OFFSET 3 ”意思是獲取從第 4 條記錄開始的后面的 5 條記錄,和“ LIMIT 3 , 5 ”返回的結(jié)果相同。
*** 2021-12-22 今天先學(xué)到這里 明天繼續(xù) MySql 的查詢 學(xué)習(xí)
新聞標(biāo)題:mysql數(shù)據(jù)怎么操作,mysql簡單操作
網(wǎng)頁網(wǎng)址:http://jinyejixie.com/article46/hsopeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、App開發(fā)、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)