日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

05-表的操作

發(fā)布時(shí)間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05-表的操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)掌握

  • 存儲(chǔ)引擎介紹(了解)
  • 表的增刪改查

一、存儲(chǔ)引擎(了解)

前幾節(jié)我們知道m(xù)ysql中建立的庫(kù)===》文件夾,庫(kù)中的表====》文件

現(xiàn)實(shí)生活中我們用來(lái)存儲(chǔ)數(shù)據(jù)的文件有不同的類型,每種文件類型對(duì)應(yīng)各自不同的處理機(jī)制:比如處理文本用txt類型,處理表格用excel,處理圖片用png等

數(shù)據(jù)庫(kù)中的表也應(yīng)該有不同的類型,表的類型不同,會(huì)對(duì)應(yīng)mysql不同的存取機(jī)制,表類型又稱為存儲(chǔ)引擎。

ps: 存儲(chǔ)引擎說(shuō)白了就是如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。因?yàn)樵陉P(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)是以表的形式存儲(chǔ)的,所以存儲(chǔ)引擎也可以稱為表類型(即存儲(chǔ)和操作此表的類型)

在Oracle 和SQL Server等數(shù)據(jù)庫(kù)中只有一種存儲(chǔ)引擎,所有數(shù)據(jù)存儲(chǔ)管理機(jī)制都是一樣的。而MySql
數(shù)據(jù)庫(kù)提供了多種存儲(chǔ)引擎。用戶可以根據(jù)不同的需求為數(shù)據(jù)表選擇不同的存儲(chǔ)引擎,用戶也可以根據(jù)
自己的需要編寫(xiě)自己的存儲(chǔ)引擎

SQL 解析器、SQL 優(yōu)化器、緩沖池、存儲(chǔ)引擎等組件在每個(gè)數(shù)據(jù)庫(kù)中都存在,但不是每 個(gè)數(shù)據(jù)庫(kù)都有這么多存儲(chǔ)引擎。MySQL 的插件式存儲(chǔ)引擎可以讓存儲(chǔ)引擎層的開(kāi)發(fā)人員設(shè) 計(jì)他們希望的存儲(chǔ)層,例如,有的應(yīng)用需要滿足事務(wù)的要求,有的應(yīng)用則不需要對(duì)事務(wù)有這 么強(qiáng)的要求 ;有的希望數(shù)據(jù)能持久存儲(chǔ),有的只希望放在內(nèi)存中,臨時(shí)并快速地提供對(duì)數(shù)據(jù) 的查詢。

?

二、mysql支持的存儲(chǔ)引擎

mysql> show engines\G;# 查看所有支持的引擎 mysql> show variables like 'storage_engine%'; # 查看正在使用的存儲(chǔ)引擎

?

1、InnoDB 存儲(chǔ)引擎

支持事務(wù),其設(shè)計(jì)目標(biāo)主要面向聯(lián)機(jī)事務(wù)處理(OLTP)的應(yīng)用。其

特點(diǎn)是行鎖設(shè)計(jì)、支持外鍵,并支持類似 Oracle 的非鎖定讀,即默認(rèn)讀取操作不會(huì)產(chǎn)生鎖。 從 MySQL 5.5.8 版本開(kāi)始是默認(rèn)的存儲(chǔ)引擎。

InnoDB 存儲(chǔ)引擎將數(shù)據(jù)放在一個(gè)邏輯的表空間中,這個(gè)表空間就像黑盒一樣由 InnoDB 存儲(chǔ)引擎自身來(lái)管理。從 MySQL 4.1(包括 4.1)版本開(kāi)始,可以將每個(gè) InnoDB 存儲(chǔ)引擎的 表單獨(dú)存放到一個(gè)獨(dú)立的 ibd 文件中。此外,InnoDB 存儲(chǔ)引擎支持將裸設(shè)備(row disk)用 于建立其表空間。

InnoDB 通過(guò)使用多版本并發(fā)控制(MVCC)來(lái)獲得高并發(fā)性,并且實(shí)現(xiàn)了 SQL 標(biāo)準(zhǔn) 的 4 種隔離級(jí)別,默認(rèn)為 REPEATABLE 級(jí)別,同時(shí)使用一種稱為 netx-key locking 的策略來(lái) 避免幻讀(phantom)現(xiàn)象的產(chǎn)生。除此之外,InnoDB 存儲(chǔ)引擎還提供了插入緩沖(insert buffer)、二次寫(xiě)(double write)、自適應(yīng)哈希索引(adaptive hash index)、預(yù)讀(read ahead) 等高性能和高可用的功能。

對(duì)于表中數(shù)據(jù)的存儲(chǔ),InnoDB 存儲(chǔ)引擎采用了聚集(clustered)的方式,每張表都是按 主鍵的順序進(jìn)行存儲(chǔ)的,如果沒(méi)有顯式地在表定義時(shí)指定主鍵,InnoDB 存儲(chǔ)引擎會(huì)為每一 行生成一個(gè) 6 字節(jié)的 ROWID,并以此作為主鍵。

InnoDB 存儲(chǔ)引擎是 MySQL 數(shù)據(jù)庫(kù)最為常用的一種引擎,Facebook、Google、Yahoo 等 公司的成功應(yīng)用已經(jīng)證明了 InnoDB 存儲(chǔ)引擎具備高可用性、高性能以及高可擴(kuò)展性。對(duì)其 底層實(shí)現(xiàn)的掌握和理解也需要時(shí)間和技術(shù)的積累。如果想深入了解 InnoDB 存儲(chǔ)引擎的工作 原理、實(shí)現(xiàn)和應(yīng)用,可以參考《MySQL 技術(shù)內(nèi)幕:InnoDB 存儲(chǔ)引擎》一書(shū)。

2、MyISAM 存儲(chǔ)引擎

不支持事務(wù)、表鎖設(shè)計(jì)、支持全文索引,主要面向一些 OLAP 數(shù) 據(jù)庫(kù)應(yīng)用,在 MySQL 5.5.8 版本之前是默認(rèn)的存儲(chǔ)引擎(除 Windows 版本外)。數(shù)據(jù)庫(kù)系統(tǒng) 與文件系統(tǒng)一個(gè)很大的不同在于對(duì)事務(wù)的支持,MyISAM 存儲(chǔ)引擎是不支持事務(wù)的。究其根 本,這也并不難理解。用戶在所有的應(yīng)用中是否都需要事務(wù)呢?在數(shù)據(jù)倉(cāng)庫(kù)中,如果沒(méi)有 ETL 這些操作,只是簡(jiǎn)單地通過(guò)報(bào)表查詢還需要事務(wù)的支持嗎?此外,MyISAM 存儲(chǔ)引擎的 另一個(gè)與眾不同的地方是,它的緩沖池只緩存(cache)索引文件,而不緩存數(shù)據(jù)文件,這與 大多數(shù)的數(shù)據(jù)庫(kù)都不相同。

3、NDB 存儲(chǔ)引擎

年,MySQL AB 公司從 Sony Ericsson 公司收購(gòu)了 NDB 存儲(chǔ)引擎。 NDB 存儲(chǔ)引擎是一個(gè)集群存儲(chǔ)引擎,類似于 Oracle 的 RAC 集群,不過(guò)與 Oracle RAC 的 share everything 結(jié)構(gòu)不同的是,其結(jié)構(gòu)是 share nothing 的集群架構(gòu),因此能提供更高級(jí)別的 高可用性。NDB 存儲(chǔ)引擎的特點(diǎn)是數(shù)據(jù)全部放在內(nèi)存中(從 5.1 版本開(kāi)始,可以將非索引數(shù) 據(jù)放在磁盤上),因此主鍵查找(primary key lookups)的速度極快,并且能夠在線添加 NDB 數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)(data node)以便線性地提高數(shù)據(jù)庫(kù)性能。由此可見(jiàn),NDB 存儲(chǔ)引擎是高可用、 高性能、高可擴(kuò)展性的數(shù)據(jù)庫(kù)集群系統(tǒng),其面向的也是 OLTP 的數(shù)據(jù)庫(kù)應(yīng)用類型。

4、Memory 存儲(chǔ)引擎

正如其名,Memory 存儲(chǔ)引擎中的數(shù)據(jù)都存放在內(nèi)存中,數(shù)據(jù)庫(kù)重 啟或發(fā)生崩潰,表中的數(shù)據(jù)都將消失。它非常適合于存儲(chǔ) OLTP 數(shù)據(jù)庫(kù)應(yīng)用中臨時(shí)數(shù)據(jù)的臨時(shí)表,也可以作為 OLAP 數(shù)據(jù)庫(kù)應(yīng)用中數(shù)據(jù)倉(cāng)庫(kù)的維度表。Memory 存儲(chǔ)引擎默認(rèn)使用哈希 索引,而不是通常熟悉的 B+ 樹(shù)索引。

5、Infobright 存儲(chǔ)引擎

第三方的存儲(chǔ)引擎。其特點(diǎn)是存儲(chǔ)是按照列而非行的,因此非常 適合 OLAP 的數(shù)據(jù)庫(kù)應(yīng)用。其官方網(wǎng)站是?http://www.infobright.org/,上面有不少成功的數(shù)據(jù)?倉(cāng)庫(kù)案例可供分析。

6、NTSE 存儲(chǔ)引擎

網(wǎng)易公司開(kāi)發(fā)的面向其內(nèi)部使用的存儲(chǔ)引擎。目前的版本不支持事務(wù), 但提供壓縮、行級(jí)緩存等特性,不久的將來(lái)會(huì)實(shí)現(xiàn)面向內(nèi)存的事務(wù)支持。

7、BLACKHOLE

黑洞存儲(chǔ)引擎,可以應(yīng)用于主備復(fù)制中的分發(fā)主庫(kù)。

MySQL 數(shù)據(jù)庫(kù)還有很多其他存儲(chǔ)引擎,上述只是列舉了最為常用的一些引擎。如果 你喜歡,完全可以編寫(xiě)專屬于自己的引擎,這就是開(kāi)源賦予我們的能力,也是開(kāi)源的魅 力所在。

?

指定表類型/存儲(chǔ)引擎

create table t1(id int)engine=innodb;# 默認(rèn)不寫(xiě)就是innodb

?

小練習(xí):

創(chuàng)建四張表,分別使用innodb,myisam,memory,blackhole存儲(chǔ)引擎,進(jìn)行插入數(shù)據(jù)測(cè)試?

create table t1(id int)engine=innodb; create table t2(id int)engine=myisam; create table t3(id int)engine=memory; create table t4(id int)engine=blackhole;

查看data文件下db1數(shù)據(jù)庫(kù)中的文件:

#.frm是存儲(chǔ)數(shù)據(jù)表的框架結(jié)構(gòu)# .ibd是mysql數(shù)據(jù)文件 #.MYD是MyISAM表的數(shù)據(jù)文件的擴(kuò)展名#.MYI是MyISAM表的索引的擴(kuò)展名#發(fā)現(xiàn)后兩種存儲(chǔ)引擎只有表結(jié)構(gòu),無(wú)數(shù)據(jù)#memory,在重啟mysql或者重啟機(jī)器后,表內(nèi)數(shù)據(jù)清空 #blackhole,往表內(nèi)插入任何數(shù)據(jù),都相當(dāng)于丟入黑洞,表內(nèi)永遠(yuǎn)不存記錄

?

三、表介紹

表相當(dāng)于文件,表中的一條記錄就相當(dāng)于文件的一行內(nèi)容,不同的是,表中的一條記錄有對(duì)應(yīng)的標(biāo)題,稱為表的字段

id,name,sex,age,birth稱為字段,其余的,一行內(nèi)容稱為一條記錄

?

四、創(chuàng)建表

語(yǔ)法:

create table 表名( 字段名1 類型[(寬度) 約束條件], 字段名2 類型[(寬度) 約束條件], 字段名3 類型[(寬度) 約束條件] );#注意: 1. 在同一張表中,字段名是不能相同 2. 寬度和約束條件可選 3. 字段名和類型是必須的


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

create database db2 charset utf8;


2.使用數(shù)據(jù)庫(kù)

use db2;


3.創(chuàng)建a1表

create table a1(id int,name varchar(50),age int(3) );

4.插入表的記錄

insert into a1 values (1,'mjj',18), (2,'wusir',28);

ps:以;作為mysql的結(jié)束語(yǔ)

5.查詢表的數(shù)據(jù)和結(jié)構(gòu)

(1)查詢a1表中的存儲(chǔ)數(shù)據(jù)

mysql>?select * from a1;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | mjj? ?| 18? |
| 2 | wusir | 28? |
+------+-------+------+
2 rows in set (0.02 sec)

mysql>

?

(2)查看a1表的結(jié)構(gòu)

mysql> desc a1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.16 sec)

(3)查看表的詳細(xì)結(jié)構(gòu)

mysql> show create table a1\G; *************************** 1. row ***************************Table: a1 Create Table: CREATE TABLE `a1` (`id` int(11) DEFAULT NULL,`name` varchar(50) DEFAULT NULL,`age` int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)

6.復(fù)制表

(1)新創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)db3

mysql> create database db3 charset utf8; Query OK, 1 row affected (0.00 sec)

(2)使用db3

mysql> use db3; Database changed #這是上個(gè)創(chuàng)建的db2數(shù)據(jù)庫(kù)中的a1表 mysql> select * from db2.a1; +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | mjj | 18 | | 2 | wusir | 28 | +------+-------+------+

(3)復(fù)制db2.a1的表結(jié)構(gòu)和記錄

# 這就是復(fù)制表的操作(既復(fù)制了表結(jié)構(gòu),又復(fù)制了記錄) mysql> create table b1 select * from db2.a1; Query OK, 2 rows affected (0.03 sec)

(4)查看db3.b1中的數(shù)據(jù)和表結(jié)構(gòu)

#再去查看db3文件夾下的b1表發(fā)現(xiàn) 跟db2文件下的a1表數(shù)據(jù)一樣 mysql> select * from db3.b1; +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | mjj | 18 | | 2 | wusir | 28 | +------+-------+------+ 2 rows in set (0.00 sec)

?

ps1:如果只要表結(jié)構(gòu),不要記錄

#在db2數(shù)據(jù)庫(kù)下新創(chuàng)建一個(gè)b2表,給一個(gè)where條件,條件要求不成立,條件為false,只拷貝表結(jié)構(gòu) mysql> create table b2 select * from db2.a1 where 1>5; Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0

查看表結(jié)構(gòu):

# 查看表結(jié)構(gòu) mysql> desc b2; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.02 sec)#查看表結(jié)構(gòu)中的數(shù)據(jù),發(fā)現(xiàn)是空數(shù)據(jù) mysql> select * from b2; Empty set (0.00 sec)

?

ps2:還有一種做法,使用like(只拷貝表結(jié)構(gòu),不拷貝記錄)

mysql> create table b3 like db2.a1; Query OK, 0 rows affected (0.01 sec)mysql> desc b3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.02 sec)mysql> select * from db3.b3; Empty set (0.00 sec)

?

7.刪除表:

drop table 表名;

?

轉(zhuǎn)載于:https://www.cnblogs.com/yanyufeng/p/9567158.html

總結(jié)

以上是生活随笔為你收集整理的05-表的操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。