溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mysql數(shù)據(jù)庫中常用操作總結(jié)

發(fā)布時(shí)間:2020-06-08 11:32:31 來源:網(wǎng)絡(luò) 閱讀:262 作者:三月 欄目:編程語言

下面一起來了解下Mysql數(shù)據(jù)庫中常用操作,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望Mysql數(shù)據(jù)庫中常用操作這篇短內(nèi)容是你想要的。

一、Mysql中關(guān)于數(shù)據(jù)庫的基本操作

1、用 SHOW 顯示已有的數(shù)據(jù)庫

句法: SHOW DATABASES [LIKE wild]

如果使用 LIKE wild 部分, wild 字符串可以是一個(gè)使用 SQL 的“ %”和“ _”通配符的字符串。

功能: SHOW DATABASES 列出在 MySQL云服務(wù)器主機(jī)上的數(shù)據(jù)庫。


2、用 Create Dabase 創(chuàng)建數(shù)據(jù)庫

句法: CREATE DATABASE db_name

功能: CREATE DATABASE 用給定的名字創(chuàng)建一個(gè)數(shù)據(jù)庫。

如果數(shù)據(jù)庫已經(jīng)存在, 發(fā)生一個(gè)錯(cuò)誤。在 MySQL 中的數(shù)據(jù)庫實(shí)現(xiàn)成包含對(duì)應(yīng)數(shù)據(jù)庫中表的文件的目錄。因?yàn)閿?shù)據(jù)庫在初始創(chuàng)建時(shí)沒有任何表,CREATE DATABASE語句只是在 MySQL數(shù)據(jù)目錄下面創(chuàng)建一個(gè)目錄。

例如:

mysql>create database myfirst;

然后利用 show databases 觀察效果。


3、用 DROP DATABASE 刪除數(shù)據(jù)庫

句法: DROP DATABASE [IF EXISTS] db_name

功能: DROP DATABASE 刪除數(shù)據(jù)庫中的所有表和數(shù)據(jù)庫。要小心地使用這個(gè)命令!

DROP DATABASE返回從數(shù)據(jù)庫目錄被刪除的文件的數(shù)目。通常,這3倍于表的數(shù)量,因?yàn)槊繌埍韺?duì)應(yīng)于一個(gè)“ .MYD”文件、一個(gè)“ .MYI”文件和一個(gè)“ .frm”文件。

在 MySQL 3.22 或以后版本中,你可以使用關(guān)鍵詞 IF EXISTS 避免“數(shù)據(jù)庫不存在”這個(gè)錯(cuò)誤。


4、用 USE 選用數(shù)據(jù)庫

句法: USE db_name

USE db_name 語句告訴 MySQL 使用 db_name 數(shù)據(jù)庫作為隨后的查詢的缺省數(shù)據(jù)庫。

數(shù)據(jù)庫保持到會(huì)話結(jié)束,或發(fā)出另外一個(gè) USE 語句:

mysql> USE db1;

mysql> SELECT count(*) FROM mytable; # selects from db1.mytable

mysql> USE db2;

mysql> SELECT count(*) FROM mytable; # selects from db2.mytable

如果你不是用 USE 語句,那么上面的例子應(yīng)該寫成:

mysql> SELECT count(*) FROM db1.mytable;

mysql> SELECT count(*) FROM db2.mytable;

由于 use 也是一個(gè) mysql客戶程序的命令,所以你可以在命令行最后不加分號(hào),客戶程序可以得到結(jié)果。


二、Mysql中關(guān)于數(shù)據(jù)表的操作

1、用 SHOW/ DESCRIBE 語句顯示數(shù)據(jù)表的信息

句法:

SHOW TABLES [FROM db_name] [LIKE wild]

or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]

or SHOW INDEX FROM tbl_name [FROM db_name]

or SHOW TABLE STATUS [FROM db_name] [LIKE wild]

{DESCRIBE | DESC} tbl_name {col_name | wild}

你能使用 db_name.tbl_name 作為 tbl_name FROM db_name 句法的另一種選擇。

SHOW TABLES 列出在一個(gè)給定的數(shù)據(jù)庫中的表。你也可以用 mysqlshow db_name命令得到這張表。

SHOW COLUMNS 列出在一個(gè)給定表中的列。如果列類型不同于你期望的是基于CREATE TABLE 語句的那樣,注意, MySQL 有時(shí)改變列類型。

DESCRIBE 語句提供了類似 SHOW COLUMNS 的信息。 DESCRIBE 提供關(guān)于一張表的列的信息。col_name 可以是一個(gè)列名字或包含 SQL 的“ %”和“ _”通配符的一個(gè)字符串。這個(gè)語句為了與 Oracle 兼容而提供的。


2、用 CREATE TABLE 語句創(chuàng)建數(shù)據(jù)表

CREATE TABLE 語句的基本語法

CREATE TABLE tbl_name(create_definition,...) [TYPE =table_type]

create_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value]

[AUTO_INCREMENT][PRIMARY KEY]

在 MySQL3.22 或以后版本中,表名可以被指定為 db_name.tbl_name,不管有沒有當(dāng)前的數(shù)據(jù)庫都可以。

在某些情況下, MySQL 隱含地改變?cè)谝粋€(gè) CREATE TABLE 語句給出的一個(gè)列說明。

--長度小于 4 的 VARCHAR 被改變?yōu)?CHAR。

--如果在一個(gè)表中的任何列有可變長度,結(jié)果是整個(gè)行是變長的。因此, 如果一張表包含任何變長的列(VARCHAR、 TEXT 或 BLOB),所有大于 3 個(gè)字符的 CHAR列被改變?yōu)?VARCHAR 列。這在任何方面都不影響你如何使用列;在 MySQL 中,VARCHAR 只是存儲(chǔ)字符的一個(gè)不同方法。 MySQL 實(shí)施這種改變,是因?yàn)樗?jié)省空間并且使表操作更快捷。

--TIMESTAMP 的顯示尺寸必須是偶數(shù)且在 2 ~ 14 的范圍內(nèi)。如果你指定 0 顯示尺寸或比 14 大,尺寸被強(qiáng)制為 14。從 1~13 范圍內(nèi)的奇數(shù)值尺寸被強(qiáng)制為下一個(gè)更大的偶數(shù)。

--你不能在一個(gè) TIMESTAMP 列里面存儲(chǔ)一個(gè)文字 NULL;將它設(shè)為 NULL 將設(shè)置為當(dāng)前的日期和時(shí)間。因?yàn)?TIMESTAMP 列表現(xiàn)就是這樣, NULL 和 NOT NULL屬性不以一般的方式運(yùn)用并且如果你指定他們,將被忽略。 DESCRIBE tbl_name總是報(bào)告該 TIMESTAMP 列可能賦予了 NULL 值。

如果你想要知道 MySQL 是否使用了除你指定的以外的一種列類型,在創(chuàng)建或改變你的表之后,發(fā)出一個(gè) DESCRIBE tbl_name 語句即可。


3、利用 SELECT 的結(jié)果創(chuàng)建表

CREATE TABLE ... SELECT 語句使得能利用 SELECT 查詢的結(jié)果直接得出一個(gè)新表。只需一步就可以完成任務(wù),不必知道或指定所檢索的列的數(shù)據(jù)類型。這使得很容易創(chuàng)建一個(gè)完全用所喜歡的數(shù)據(jù)填充的表,并且為進(jìn)一步查詢作了準(zhǔn)備。

如果你在 CREATE 語句后指定一個(gè) SELECT, MySQL 將為在 SELECT 中所有的單元?jiǎng)?chuàng)鍵新字段。

可以通過選擇一個(gè)表的全部內(nèi)容(無 WHERE 子句)來拷貝一個(gè)表,或利用一個(gè)總是失敗的 WHERE 子句來創(chuàng)建一個(gè)空表。

CREATE TABLE test SELECT * from test2;

CREATE TABLE test SELECT * from test2 where 0;


4、用 ALTER TABLE 語句修改表的結(jié)構(gòu)

有時(shí)你可能需要改變一下現(xiàn)有表的結(jié)構(gòu),那么 Alter Table 語句將是你的合適選擇。

增加列

alter table tbl_name add col_name type

例如,給表增加一列 weight

alter table pet add weight int;

刪除列

alter table tbl_name drop col_name

例如,刪除列 weight:

alter table pet drop weight;

改變列

alter table tbl_name modify col_name type

例如,改變 weight 的類型:

alter table pet modify weight samllint;

另一種方法是:

alter table tbl_name change old_col_name col_name type

例如:

alter table pet change weight weight samllint;

給列更名

alter table pet change weight wei;

給表更名

alter table tbl_name rename new_tbl

例如,把 pet 表更名為 animal

alter table pet rename animal;


5、用 DROP TABLE 語句刪除數(shù)據(jù)表

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

DROP TABLE 刪除一個(gè)或多個(gè)數(shù)據(jù)庫表。所有表中的數(shù)據(jù)和表定義均被刪除,故小心使用這個(gè)命令!

在 MySQL 3.22 或以后版本,你可以使用關(guān)鍵詞 IF EXISTS 類避免不存在表的一個(gè)錯(cuò)

誤發(fā)生。

可以同時(shí)指定數(shù)據(jù)庫和表:

DROP TABLE mytest.guestbook;


三、向數(shù)據(jù)表插入行記錄

1、使用 INSERT 語句插入新數(shù)據(jù)

語法: INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…

INSERT [INTO] tbl_name SET col_name=expression, ...

讓我們開始利用 INSERT 語句來增加記錄,這是一個(gè) SQL 語句,需要為它指定希望插入數(shù)據(jù)行的表或?qū)⒅蛋葱蟹湃氲谋怼?INSERT 語句具有幾種形式:

---可指定所有列的值:

例如:

insert into worker values("tom","tom@yahoo.com");

“ INTO”一詞自 MySQL 3.22.5 以來是可選的。(這一點(diǎn)對(duì)其他形式的 INSERT 語句也成立。) VALUES 表必須包含表中每列的值,并且按表中列的存放次序給出。(一般,這就是創(chuàng)建表時(shí)列的定義次序。如果不能肯定的話,可使用 DESCRIBE tbl_name 來查看這個(gè)次序。)

---使用多個(gè)值表,可以一次提供多行數(shù)據(jù)。

insert into worker values("tom","tom@yahoo.com"),("jack","jack@yahoo.com");

有多個(gè)值表的 INSERT ... VALUES 的形式在 MySQL 3.22.5 或以后版本中支持。

---可以給出要賦值的那個(gè)列,然后再列出值。這對(duì)于希望建立只有幾個(gè)列需要初始設(shè)置的記錄是很有用的。

insert into worker (name) values ("tom");

這種形式的 INSERT 也允許多個(gè)值表:

insert into worker (name) values ("tom"), ("paul");

在列的列表中未給出名稱的列都將賦予缺省值。

---可以 col_name = value 的形式給出列和值。

insert into worker set name=‘tom‘;

在 SET 子句中未命名的行都賦予一個(gè)缺省值。使用這種形式的 INSERT 語句不能插入多行。

---一個(gè) expression 可以引用在一個(gè)值表先前設(shè)置的任何列。例如,你能這樣:

INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

但不能這樣:

INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);


2、使用 INSERT…SELECT 語句插入從其他表選擇的行

使用 select 從其它表來直接創(chuàng)建表,甚至可以同時(shí)復(fù)制數(shù)據(jù)記錄。如果你已經(jīng)擁有了一個(gè)表,你同樣可以從 select 語句的配合中獲益。從其它表中錄入數(shù)據(jù),例如:

insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;

你也可以略去目的表的列列表,如果你每一列都有數(shù)據(jù)錄入。

insert into tbl_name1 select col3,col4 from tbl_name2;

INSERT INTO ... SELECT 語句滿足下列條件:

--查詢不能包含一個(gè) ORDER BY子句。

--INSERT 語句的目的表不能出現(xiàn)在 SELECT 查詢部分的 FROM 子句。


3、使用 replace、 replace…select 語句插入

REPLACE 功能與 INSERT 完全一樣,除了如果在表中的一個(gè)老記錄具有在一個(gè)唯一索引上的新記錄有相同的值,在新記錄被插入之前,老記錄被刪除。對(duì)于這種情況, insert語句的表現(xiàn)是產(chǎn)生一個(gè)錯(cuò)誤。REPLACE語句也可以和 SELECT 相配合,所以上面select的內(nèi)容完全適合 REPALCE。

由于 REPLACE 語句可能改變?cè)械挠涗洠虼耸褂脮r(shí)要小心。


4、使用 LOAD 語句批量錄入數(shù)據(jù)

進(jìn)入MySQL后,使用命令:load data local infile 'C:/tab_user.txt' into table tab_user lines terminated by '\r\n' ignore 1 lines;

該語句的語法如下:

基本語法:

load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]

into table tbl_name

[fields

[terminated by't']

[OPTIONALLY] enclosed by '']

[escaped by'\' ]]

[lines terminated by'n']

[ignore number lines]

[(col_name,   )]

語法部分說明:load data infile語句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。使用這個(gè)命令之前,mysqld進(jìn)程(服務(wù))必須已經(jīng)在運(yùn)行。為了安全原因,當(dāng)讀取位于云服務(wù)器上的文本文件時(shí),文件必須處于數(shù)據(jù)庫目錄或可被所有人讀取。另外,為了對(duì)云服務(wù)器上文件使用load data infile,在云服務(wù)器主機(jī)上你必須有file的權(quán)限。

(1)、如果你指定關(guān)鍵詞low_priority,那么MySQL將會(huì)等到?jīng)]有其他人讀這個(gè)表的時(shí)候,才把插入數(shù)據(jù)。可以使用如下的命令: 

load data  low_priority infile "C:/tab_user.txt" into table tab_user;  

(2)、如果指定local關(guān)鍵詞,則表明從客戶主機(jī)讀文件。如果local沒指定,文件必須位于云服務(wù)器上。

(3)、replace和ignore關(guān)鍵詞控制對(duì)現(xiàn)有的唯一鍵記錄的重復(fù)的處理。如果你指定replace,新行將代替有相同的唯一鍵值的現(xiàn)有行。如果你指定ignore,跳過有唯一鍵的現(xiàn)有行的重復(fù)行的輸入。如果你不指定任何一個(gè)選項(xiàng),當(dāng)找到重復(fù)鍵時(shí),出現(xiàn)一個(gè)錯(cuò)誤,并且文本文件的余下部分被忽略。例如:

load data  low_priority infile "C:/tab_user.txt" replace into table tab_user;

(4)、分隔符

(a) fields關(guān)鍵字指定了文件記段的分割格式,如果用到這個(gè)關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個(gè)選項(xiàng): 

terminated by分隔符:意思是以什么字符作為分隔符

enclosed by字段括起字符

escaped by轉(zhuǎn)義字符

terminated by描述字段的分隔符,默認(rèn)情況下是tab字符(\t) 

enclosed by描述的是字段的括起字符。

escaped by描述的轉(zhuǎn)義字符。默認(rèn)的是反斜杠(backslash:\ )  

例如:load data infile "C:/tab_user.txt" replace into table tab_user (id,name) terminated by','  ignore 1 lines;(,作為分隔符)

(b)lines 關(guān)鍵字指定了每條記錄的分隔符默認(rèn)為'\n'即為換行符

如果兩個(gè)字段都指定了那fields必須在lines之前。如果不指定fields關(guān)鍵字缺省值與如果你這樣寫的相同: fields terminated by'\t' enclosed by ’ '' ‘ escaped by'\\'

如果你不指定一個(gè)lines子句,缺省值與如果你這樣寫的相同: lines terminated by'\n'

例如:load data infile "C:/tab_user.txt" replace into table test fields terminated by ',' lines terminated by '/n';

(5)、load data infile 可以按指定的列把文件導(dǎo)入到數(shù)據(jù)庫中。當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時(shí)候,需要加入一些欄目(列/字段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。比方說,我們要從Access數(shù)據(jù)庫升級(jí)到MySQL數(shù)據(jù)庫的時(shí)候

下面的例子顯示了如何向指定的欄目(field)中導(dǎo)入數(shù)據(jù): 

load data infile "C:/tab_user.txt" into table tab_user(id, name);

(6)、當(dāng)在云服務(wù)器主機(jī)上尋找文件時(shí),云服務(wù)器使用下列規(guī)則: 

(a)如果給出一個(gè)絕對(duì)路徑名,云服務(wù)器使用該路徑名。 

(b)如果給出一個(gè)有一個(gè)或多個(gè)前置部件的相對(duì)路徑名,云服務(wù)器相對(duì)云服務(wù)器的數(shù)據(jù)目錄搜索文件。  

(c)如果給出一個(gè)沒有前置部件的一個(gè)文件名,云服務(wù)器在當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄尋找文件。 

例如: /myfile.txt”給出的文件是從云服務(wù)器的數(shù)據(jù)目錄讀取,而作為“myfile txt”給出的一個(gè)文件是從當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫目錄下讀取。

注意:在數(shù)據(jù)文件***.txt中,如果某個(gè)字段中值為空值,則用\N表示。

歡迎加入Java技術(shù)交流群:659270626

看完Mysql數(shù)據(jù)庫中常用操作這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI