人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

一文詳解MySQL表的CURD操作-焦點(diǎn)速讀

來(lái)源:php中文網(wǎng) | 2023-02-15 17:49:48 |

本篇文章帶大家詳細(xì)了解MySQL表的CURD操作,希望對(duì)大家有所幫助!

一、SQL語(yǔ)句

操作關(guān)系型數(shù)據(jù)庫(kù)的編程語(yǔ)言,定義了一套操作關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)一標(biāo)準(zhǔn),簡(jiǎn)稱(chēng)SQL。


【資料圖】

- SQL通用語(yǔ)法

1 . SQL語(yǔ)句可以單行或多行書(shū)寫(xiě),以分號(hào)結(jié)尾。

2 . SQL語(yǔ)句可以使用空格/縮進(jìn)來(lái)增強(qiáng)語(yǔ)句的可讀性。

3 . MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫(xiě),關(guān)鍵字建議使用大寫(xiě)。

- 注釋
單行注釋?zhuān)?– 注釋內(nèi)容 或者使用 # 注釋內(nèi)容 。多行注釋?zhuān)?* 注釋內(nèi)容 */
- SQL語(yǔ)句分類(lèi)
分類(lèi)說(shuō)明
DDL(deifnition)數(shù)據(jù)定義語(yǔ)言(用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象,數(shù)據(jù)庫(kù),表,字段)
DML(manipulation)數(shù)據(jù)操縱語(yǔ)言(對(duì)數(shù)據(jù)庫(kù) 表中的是數(shù)據(jù)進(jìn)行增刪改)
DQL(query)數(shù)據(jù)查詢(xún)語(yǔ)言,用來(lái)查詢(xún)數(shù)據(jù)庫(kù)中表的記錄
DCL(control)數(shù)據(jù)控制語(yǔ)言,用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)用戶(hù),控制數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)權(quán)限

二、 基礎(chǔ)表操作

- 創(chuàng)建表

同一個(gè)數(shù)據(jù)庫(kù)中,不能有兩個(gè)表的名字相同,表名和列名不能和SQL的關(guān)鍵詞重復(fù)。

語(yǔ)法:

create table 表名(定義列1, 定義列2, .......);列 -> 變量名 數(shù)據(jù)類(lèi)型
舉例:
mysql> create table if not exists book(    ->   book_name varchar(32) comment "圖書(shū)名稱(chēng)",    ->   book_author varchar(32)comment  "圖書(shū)作者" ,    ->   book_price decimal(12,2) comment "圖書(shū)價(jià)格",    ->   book_category varchar(12) comment "圖書(shū)分類(lèi)",    ->   publish_data timestamp    -> )character set utf8mb4;    Query OK, 0 rows affected (0.04 sec)
- 查看庫(kù)中的表

語(yǔ)法:

show tables;

舉例:

mysql> show tables;+--------------------+| Tables_in_mytestdb |+--------------------+| book               |+--------------------+1 row in set (0.00 sec)
- 查看表結(jié)構(gòu)

語(yǔ)法:

desc  表名;

舉例:

- 刪除表
語(yǔ)法:
drop table 表名
舉例 :
mysql> desc test1;+-------+-------------+------+-----+---------+-------+| Field | Type        | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| name  | varchar(10) | YES  |     | NULL    |       || age   | int(11)     | YES  |     | NULL    |       |+-------+-------------+------+-----+---------+-------+2 rows in set (0.02 sec)mysql> drop table test1;Query OK, 0 rows affected (0.04 sec)mysql> desc test1;ERROR 1146 (42S02): Table "mytestdb.test1" doesn"t exist
- 重命名表

語(yǔ)法:

rename table old_name to new_name;

舉例:

mysql> rename table book to eBook;Query OK, 0 rows affected (0.05 sec)mysql> show tables;+--------------------+| Tables_in_mytestdb |+--------------------+| ebook              |+--------------------+1 row in set (0.00 sec)

三、MySQL 中的增刪查改操作

CRUD 即增加(Create)、查詢(xún)(Retrieve)、更新(Update)、刪除(Delete)四個(gè)單詞的首字母縮寫(xiě)

案例:

-- 創(chuàng)建一張圖書(shū)表mysql> create table if not exists book(    ->   book_name varchar(32) comment "圖書(shū)名稱(chēng)",    ->   book_author varchar(32)comment  "圖書(shū)作者" ,    ->   book_price decimal(12,2) comment "圖書(shū)價(jià)格",    ->   book_category varchar(12) comment "圖書(shū)分類(lèi)",    ->   publish_data timestamp    -> )character set utf8mb4;
- 增加(insert語(yǔ)句)

單行插入(全列)

insert into 表名 values(對(duì)應(yīng)列的參數(shù)列表); -- 一次插入一行

多行插入(全列)

insert into 表名 values(對(duì)應(yīng)列的實(shí)參列表), (對(duì)應(yīng)列的參數(shù)列表), (對(duì)應(yīng)列的參數(shù)列表);              -- 一次插入多行            -- 一次插入多行

指定列插入

values 后面( )中的內(nèi)容, 個(gè)數(shù)和類(lèi)型要和表名后面( )中指定的結(jié)構(gòu)匹配.未被指定的列會(huì)以默認(rèn)值進(jìn)行填充.
insert into 表名 (需要插入的列) values(對(duì)應(yīng)列的參數(shù)列表); -- 一次插入一行insert into 表名 (需要插入的列) values(對(duì)應(yīng)列的參數(shù)列表), (), ().... -- 一次插入多行

案例

# 單行輸入mysql> insert into book values("計(jì)算機(jī)網(wǎng)絡(luò)","謝希仁",45,"計(jì)算機(jī)類(lèi)","2020-12-25 12:51:00");Query OK, 1 row affected (0.01 sec)#多行輸入mysql> insert into book values("計(jì)算機(jī)組成原理","王峰",45,"硬件類(lèi)","2020-12-12 12:00:00"),    -> ("微機(jī)原理","李華",97,"硬件類(lèi)","2000-12-19 20:00:00");    Query OK, 2 rows affected (0.04 sec)Records: 2  Duplicates: 0  Warnings: 0#指定列插入mysql>insert into book(book_name,book_author,publish_data) values ("軟件工程","張三","2020-05-06 12:00:00");Query OK, 1 row affected (0.02 sec)

插入數(shù)據(jù)后的表如圖所示:

在MySQL當(dāng)中 , 多條記錄逐次插入的效率是要低于一次把多條紀(jì)錄一起插入的 ,原因如下:

網(wǎng)絡(luò)請(qǐng)求和響應(yīng)時(shí)間開(kāi)銷(xiāo) , 每次插入都會(huì)有一定的時(shí)間開(kāi)銷(xiāo).數(shù)據(jù)庫(kù)服務(wù)器是把數(shù)據(jù)保存在硬盤(pán)上的 , IO操作時(shí),操作的次數(shù)帶來(lái)的影響大于數(shù)據(jù)量.每一次sql操作,內(nèi)部開(kāi)啟的事務(wù)也會(huì)占據(jù)一定的開(kāi)銷(xiāo).
- 查詢(xún)(select語(yǔ)句)
全列查詢(xún)

語(yǔ)法

select * from 表名--  * 表示通配符, 可以匹配表中的所有列.

企業(yè)級(jí)別的數(shù)據(jù)庫(kù)中慎用, 容易把I/O或者網(wǎng)絡(luò)帶寬吃滿(mǎn),如果有外邊的用戶(hù)客戶(hù)端要通過(guò)寬帶訪(fǎng)問(wèn)服務(wù)器時(shí),服務(wù)器就無(wú)法做出正確的響應(yīng).

示例

select * from book;
指定列查詢(xún)
select 列名...  from  表名
示例
mysql> select book_name from book;+----------------+| book_name      |+----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     || 計(jì)算機(jī)組成原理 || 微機(jī)原理       || 軟件工程       |+----------------+4 rows in set (0.01 sec)mysql> select book_author,book_price from book;+-------------+------------+| book_author | book_price |+-------------+------------+| 謝希仁      |      45.00 || 王峰        |      45.00 || 李華        |      97.00 || 張三        |       NULL |+-------------+------------+4 rows in set (0.00 sec)
查詢(xún)你字段為表達(dá)式
select 字段或表達(dá)式, 字段或表達(dá)式... from 表名;
示例
-- 查詢(xún)圖書(shū)漲價(jià)10元后所有圖書(shū)的名稱(chēng)作者和價(jià)格mysql> select book_name ,book_author,book_price + 10 from book;+----------------+-------------+-----------------+| book_name      | book_author | book_price + 10 |+----------------+-------------+-----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     | 謝希仁      |           55.00 || 計(jì)算機(jī)組成原理 | 王峰        |           55.00 || 微機(jī)原理       | 李華        |          107.00 || 軟件工程       | 張三        |            NULL |+----------------+-------------+-----------------+4 rows in set (0.00 sec)
將表達(dá)式或者字段指定別名查詢(xún)

mysql中支持給所查詢(xún)的表達(dá)式取一個(gè)別名 , 使用 as 可以使查詢(xún)結(jié)果更加直觀 , 代碼的可讀性也會(huì)更強(qiáng).

select 列名或表達(dá)式 as 別名, ... from 表名;
示例
-- 將漲價(jià)20元后的圖書(shū)價(jià)格取為別名newpricemysql> select book_name,book_author,book_price + 20 as newprice from book;+----------------+-------------+----------+| book_name      | book_author | newprice |+----------------+-------------+----------+| 計(jì)算機(jī)網(wǎng)絡(luò)     | 謝希仁      |    65.00 || 計(jì)算機(jī)組成原理 | 王峰        |    65.00 || 微機(jī)原理       | 李華        |   117.00 || 軟件工程       | 張三        |     NULL |+----------------+-------------+----------+4 rows in set (0.00 sec)
去重查詢(xún)
select distinct 列名 from 表名
示例
--book 表中插入一條重復(fù)的book_name數(shù)據(jù)mysql> insert into book values("計(jì)算機(jī)網(wǎng)絡(luò)","張華",89,"計(jì)算機(jī)類(lèi)","2020-11-23 11:00:00");Query OK, 1 row affected (0.00 sec)mysql> select book_name from book;+----------------+| book_name      |+----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     || 計(jì)算機(jī)組成原理 || 微機(jī)原理       || 軟件工程       || 計(jì)算機(jī)網(wǎng)絡(luò)     |+----------------+5 rows in set (0.00 sec)mysql> select distinct book_name from book;+----------------+| book_name      |+----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     || 計(jì)算機(jī)組成原理 || 微機(jī)原理       || 軟件工程       |+----------------+4 rows in set (0.00 sec)

查詢(xún)結(jié)果當(dāng)中,沒(méi)有了重復(fù)的book _ name 元素,達(dá)到了去重效果.

排序查詢(xún)
select 列名 from 表名 order by 列名 asc(升序)/desc(降序); #  想要排序的列
示例
# 按照書(shū)的價(jià)格升序進(jìn)行排列mysql> select book_name,book_price from book order by book_price asc;+----------------+------------+| book_name      | book_price |+----------------+------------+| 軟件工程       |       NULL || 計(jì)算機(jī)網(wǎng)絡(luò)     |      45.00 || 計(jì)算機(jī)組成原理 |      45.00 || 計(jì)算機(jī)網(wǎng)絡(luò)     |      89.00 || 微機(jī)原理       |      97.00 |+----------------+------------+5 rows in set (0.00 sec)#按照書(shū)的價(jià)格降序進(jìn)行排列mysql> select book_name,book_price from book order by book_price desc;+----------------+------------+| book_name      | book_price |+----------------+------------+| 微機(jī)原理       |      97.00 || 計(jì)算機(jī)網(wǎng)絡(luò)     |      89.00 || 計(jì)算機(jī)網(wǎng)絡(luò)     |      45.00 || 計(jì)算機(jī)組成原理 |      45.00 || 軟件工程       |       NULL |+----------------+------------+5 rows in set (0.00 sec)
使用排序查詢(xún)時(shí) , 升序查詢(xún) asc 可以省略, 即默認(rèn)為升序排列, null值一定為其中最小的.可以對(duì)多個(gè)字段進(jìn)行排序,優(yōu)先級(jí)按照書(shū)寫(xiě)的順序進(jìn)行.示例
# 查詢(xún)按照價(jià)格升序 ,年份降序select name,price,age from book order by price asc,age desc;#查詢(xún)按照總成績(jī)進(jìn)行降序select name,english+math+chinese as total from grade order by total desc;
條件查詢(xún)

當(dāng)我們使用查詢(xún)時(shí), 通常具有各種各樣的前提條件 , 此時(shí)就需要使用條件查詢(xún)來(lái)完成.

select 列名.. from 表名..where + 條件

比較運(yùn)算符

運(yùn)算符說(shuō)明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,null 不安全,例如 null = null 的結(jié)果是 null(false)
<=>等于,null 安全,例如 null <=> null 的結(jié)果是 true(1)
!=, <>不等于
between a0 and a1范圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 true(1)
in (option, …)如果是 option 中的任意一個(gè),返回 true(1)
is null是 null
is not null不是 null
like模糊匹配; % 表示任意多個(gè)(包括 0 個(gè))任意字符;_ 表示任意一個(gè)字符

邏輯運(yùn)算符

運(yùn)算符說(shuō)明
and多個(gè)條件必須為 true , 結(jié)果才為true
or任意一個(gè)條件為true 結(jié)果才為true
not條件為true , 結(jié)果為false

WHERE條件可以使用表達(dá)式,但不能使用別名。

AND的優(yōu)先級(jí)高于OR,在同時(shí)使用時(shí),需要使用小括號(hào)()包裹優(yōu)先執(zhí)行的部分

案例
-- 查詢(xún)圖書(shū)價(jià)格低于50的圖書(shū)作者和圖書(shū)名稱(chēng)mysql> select book_name,book_author from book where book_price < 50;+----------------+-------------+| book_name      | book_author |+----------------+-------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     | 謝希仁      || 計(jì)算機(jī)組成原理 | 王峰        |+----------------+-------------+2 rows in set (0.05 sec)  -- 查詢(xún)圖書(shū)價(jià)格等于97的圖書(shū)作者mysql> select book_name ,book_author from book where book_price = 97;+-----------+-------------+| book_name | book_author |+-----------+-------------+| 微機(jī)原理  | 李華        |+-----------+-------------+1 row in set (0.00 sec)-- 查詢(xún)圖書(shū)價(jià)格在50 - 100 之間的圖書(shū)名稱(chēng)mysql> select book_name from book where book_price between 50 and 100;+------------+| book_name  |+------------+| 微機(jī)原理   || 計(jì)算機(jī)網(wǎng)絡(luò) |+------------+2 rows in set (0.02 sec)\-- 查詢(xún)圖書(shū)價(jià)格在此范圍內(nèi)的圖書(shū)名稱(chēng)mysql> select book_name from book where book_price in (12,45);+----------------+| book_name      |+----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     || 計(jì)算機(jī)組成原理 |+----------------+2 rows in set (0.00 sec)

模糊查詢(xún)

% 匹配任意多個(gè)(包括 0 個(gè))字符_ 匹配嚴(yán)格的一個(gè)字符
#查詢(xún)姓張的作者的書(shū)本價(jià)格書(shū)名.mysql> select book_price,book_name,book_author from book where book_author like "張%";+------------+------------+-------------+| book_price | book_name  | book_author |+------------+------------+-------------+|       NULL | 軟件工程   | 張三        ||      89.00 | 計(jì)算機(jī)網(wǎng)絡(luò) | 張華        |+------------+------------+-------------+2 rows in set (0.00 sec)# 查詢(xún)前綴為"計(jì)算機(jī)"后綴為七個(gè)字的書(shū)籍名稱(chēng)mysql> select book_name from book where book_name like "計(jì)算機(jī)____";+----------------+| book_name      |+----------------+| 計(jì)算機(jī)組成原理 |+----------------+#查詢(xún)前綴為"計(jì)算機(jī)"的書(shū)籍名稱(chēng)并去重mysql> select distinct book_name from book where book_name like "計(jì)算機(jī)%";+----------------+| book_name      |+----------------+| 計(jì)算機(jī)網(wǎng)絡(luò)     || 計(jì)算機(jī)組成原理 |+----------------+2 rows in set (0.00 sec)
分頁(yè)查詢(xún)

分頁(yè)查詢(xún)即將查詢(xún)出的結(jié)果 , 按頁(yè)進(jìn)行呈現(xiàn),并不是一次性展現(xiàn)出來(lái),這種模式就是分頁(yè)查詢(xún), mysql當(dāng)中使用limit來(lái)實(shí)現(xiàn)分頁(yè)查詢(xún).

limit 子句當(dāng)中接受一個(gè)或者兩個(gè)參數(shù) , 這兩個(gè)參數(shù)的值為0 或者正整數(shù)

兩個(gè)參數(shù)的limit子句的用法

select 元素1,元素2  from 表名  limit offset,count;#offset參數(shù)指定要返回的第一行的偏移量。第一行的偏移量為0,而不是1。#count指定要返回的最大行數(shù)。

示例:

mysql> select book_author from book limit 2, 3;+-------------+| book_author |+-------------+| 李華        || 張三        || 張華        |+-------------+3 rows in set (0.02 sec)#表示獲取列表當(dāng)中偏移量為2(表示從第3行開(kāi)始), 最大行數(shù)為3的作者名稱(chēng)

帶有一個(gè)參數(shù)的limit子句的用法

select 列名1.列名2 from 表名 limit count;#  表示從結(jié)果集的開(kāi)頭返回的最大行數(shù)為count;#  獲取前count行的記錄

等同于

select 列名1 ,列名2 from 表名 limit 0 , count;# 第一行的偏移量為0

示例

mysql> select book_price from book limit 5;+------------+| book_price |+------------+|      45.00 ||      45.00 ||      97.00 ||       NULL ||      89.00 |+------------+5 rows in set (0.00 sec)# 獲取表中前五行的圖書(shū)價(jià)格 , 最大行數(shù)為5

limit 結(jié)合 order by 語(yǔ)句 和其他條件可以獲取n個(gè)最大或者最小值

select book_name,book_price from book order by book_price desc limit 3; #獲取價(jià)格前三高的圖書(shū)名稱(chēng)和圖書(shū)價(jià)格mysql> select book_price,book_name from book order by book_price desc limit 3;+------------+------------+| book_price | book_name  |+------------+------------+|      97.00 | 微機(jī)原理   ||      89.00 | 計(jì)算機(jī)網(wǎng)絡(luò) ||      45.00 | 計(jì)算機(jī)網(wǎng)絡(luò) |+------------+------------+3 rows in set (0.01 sec)

使用limit 獲取第n高個(gè)最大值

偏移量從0開(kāi)始,所以要指定從n - 1 開(kāi)始,然后取一行記錄

#示例:獲取價(jià)格第二高的圖書(shū)名稱(chēng) mysql> select book_name from book order by book_price desc limit 1,1;+------------+| book_name  |+------------+| 計(jì)算機(jī)網(wǎng)絡(luò) |+------------+1 row in set (0.00 sec)
- 修改(update)

MySQL當(dāng)中使用update關(guān)鍵字來(lái)對(duì)數(shù)據(jù)進(jìn)行修改 , 既可以修改單列又可以修改多列.

update 表名 set 列名1 = 值 , 列名2 = 值 ... where 限制條件下修改
SET子句指定要修改的列和新值。要更新多個(gè)列,請(qǐng)使用以逗號(hào)分隔的列表。以字面值,表達(dá)式或子查詢(xún)的形式在每列的賦值中來(lái)提供要設(shè)置的值。第三,使用WHERE子句中的條件指定要更新的行。WHERE子句是可選的。 如果省略WHERE子句,則UPDATE語(yǔ)句將更新表中的所有行。

示例:

#將書(shū)名為"軟件工程"的圖書(shū)價(jià)格修改為66元mysql> update book set book_price = 66 where book_name = "軟件工程";Query OK, 1 row affected (0.05 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> select book_price from book where book_name = "軟件工程";+------------| book_price |+------------+|      66.00 |+------------+1 row in set (0.00 sec)#將所有的圖書(shū)價(jià)格修改為原來(lái)的二倍mysql> update book set book_price = 2 * book_price;Query OK, 5 rows affected (0.02 sec)Rows matched: 5  Changed: 5  Warnings: 0#更新成功mysql> select book_price from book;+------------+| book_price |+------------+|      90.00 ||      90.00 ||     194.00 ||     132.00 ||     178.00 |+------------+5 rows in set (0.00 sec)
- 刪除(delete)

要從表中刪除數(shù)據(jù),需要使用delete 語(yǔ)句, delete 語(yǔ)句的 用法如下

delete from 表名 where + 條件

首先指定需要?jiǎng)h除數(shù)據(jù)的表,其次使用條件指定where子句中刪除的行記錄, 如果行匹配條件,這些行記錄將會(huì)刪除.

WHERE子句是可選的。如果省略WHERE子句,DELETE語(yǔ)句將刪除表中的所有行 , 請(qǐng)注意,一旦刪除數(shù)據(jù),它就會(huì)永遠(yuǎn)消失。因此,在執(zhí)行DELETE語(yǔ)句之前,應(yīng)該先備份數(shù)據(jù)庫(kù),以防萬(wàn)一要找回刪除過(guò)的數(shù)據(jù)。

示例

#刪除圖書(shū)表中圖書(shū)單價(jià)大于150的圖書(shū)記錄mysql> delete from book where book_price > 150;Query OK, 2 rows affected (0.01 sec)mysql> select book_price from book;+------------+| book_price |+------------+|      90.00 ||      90.00 ||     132.00 |+------------+3 rows in set (0.00 sec)

MySQL中delete 語(yǔ)句也可以結(jié)合limit語(yǔ)句 和 order by 語(yǔ)句來(lái)控制刪除的數(shù)量和條件

以上就是一文詳解MySQL表的CURD操作的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: mysql