您好,登錄后才能下訂單哦!
在建立一個(gè)空的數(shù)據(jù)庫(kù)和數(shù)據(jù)表時(shí),首先需要考慮的是如何向數(shù)據(jù)表中添加數(shù)據(jù),該操作可以使用INSERT語(yǔ)句來(lái)完成。使用INSERT語(yǔ)句可以向一個(gè)已有數(shù)據(jù)表插一個(gè)新行,也就插入一行新記錄。
在MySQL中,INSERT語(yǔ)句有3種語(yǔ)法格式,分別是INSERT... VALUES語(yǔ)句、INSERT... SET語(yǔ)句和INSERT... SELECT語(yǔ)句。
使用INSERT... VALUES語(yǔ)句插入數(shù)據(jù),是INSERT語(yǔ)句的最常用的語(yǔ)法格式。
語(yǔ)法格式如下:?
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 數(shù)據(jù)表名 [(字段名,...)]
VALUES ({值 | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE 字段名=表達(dá)式, ... ]
create database test; #創(chuàng)建庫(kù)
use test; #進(jìn)入庫(kù)
create table info (id int not null,name char(16),score decimal(5,2),age int(8)); #創(chuàng)建表
插入測(cè)試數(shù)據(jù)
insert into info (id,name,score,age)values(1,'san',88,33);
insert into info (id,name,score,age)values(2,'lisi',48,31);
insert into info (id,name,score,age)values(3,'wwu',68,27);
insert into info (id,name,score,age)values(4,'pw',98,25);
insert into info (id,name,score,age)values(5,'wlk',19,37);
insert into info (id,name,score,age)values(3,'lihua',58,23);
SELECT * FROM info;
在MySQL中,除了使用INSERT... VALUES語(yǔ)句可以插入數(shù)據(jù)外,還可以使用INSERT... SET語(yǔ)句插入數(shù)據(jù)。這種語(yǔ)法格式用于通過(guò)直接給表中的某些字段指定對(duì)應(yīng)的值來(lái)實(shí)現(xiàn)插入指定數(shù)據(jù),對(duì)于未指定值的字段將采用默認(rèn)值進(jìn)行添加。
INSERT... SET語(yǔ)句的語(yǔ)法格式如下:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 數(shù)據(jù)表名
SET 字段名={值 | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE 字段名=表達(dá)式, ... ]
insert into info SET id =8, name='xiaohong',score=88,age=56;
SELECT * FROM info;
在MySQL中,支持將查詢(xún)結(jié)果插入到指定的數(shù)據(jù)表中,這可以通過(guò)>INSERT...SELECT語(yǔ)句來(lái)實(shí)現(xiàn)。
?
語(yǔ)法如下:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] 數(shù)據(jù)表名 [(字段名,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE 字段名=表達(dá)式, ... ]
insert into info(id,name,score,age)SELECT * from info where id=4;
SELECT * FROM info;
要執(zhí)行修改的操作可以使用UPDATE語(yǔ)句,
語(yǔ)法如下:
UPDATE [LOW_PRIORITY] [IGNORE] 數(shù)據(jù)表名
SET 字段1=值1 [, 字段2=值2 ...]
[WHERE 條件表達(dá)式]
[ORDER BY ...]
[LIMIT 行數(shù)]
UPDATE info set score=77 where age <=30;
SELECT * FROM info;
在數(shù)據(jù)庫(kù)中,有些數(shù)據(jù)已經(jīng)失去意義或者錯(cuò)誤時(shí)就需要將它們刪除,在MySQL中,可以使用DELETE語(yǔ)句或者TRUNCATE TABLE語(yǔ)句刪除表中的一行或多行數(shù)據(jù).
通過(guò)DELETE語(yǔ)句刪除數(shù)據(jù)的基本語(yǔ)法格式如下:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM 數(shù)據(jù)表名
[WHERE 條件表達(dá)式]
[ORDER BY ...]
[LIMIT 行數(shù)]
DELETE FROM info;
DELETE from info WHERE id=4;
SELECT * FROM info;
在刪除數(shù)據(jù)時(shí),如果要從表中刪除所有的行,那么不必使用通過(guò)TRUNCATE
TABLE語(yǔ)句刪除數(shù)據(jù)的基本語(yǔ)法格式如下:
TRUNCATE [TABLE] 數(shù)據(jù)表名
TRUNCATE table info;
1.drop (刪除表):刪除內(nèi)容和定義,釋放空間。簡(jiǎn)單來(lái)說(shuō)就是把整個(gè)表去掉.以后要新增數(shù)據(jù)是不可能的,除非新增一個(gè)表。
drop語(yǔ)句將刪除表的結(jié)構(gòu)被依賴(lài)的約束(constrain),觸發(fā)器(trigger)索引(index);依賴(lài)于該表的存儲(chǔ)過(guò)程/函數(shù)將被保留,但其狀態(tài)會(huì)變?yōu)椋篿nvalid。
2.truncate (清空表中的數(shù)據(jù)):刪除內(nèi)容、釋放空間但不刪除定義(保留表的數(shù)據(jù)結(jié)構(gòu))。與drop不同的是,只是清空表數(shù)據(jù)而已。
注意:truncate 不能刪除行數(shù)據(jù),要?jiǎng)h就要把表清空。
3.delete (刪除表中的數(shù)據(jù)):delete 語(yǔ)句用于刪除表中的行。delete語(yǔ)句執(zhí)行刪除的過(guò)程是每次從表中刪除一行,并且同時(shí)將該行的刪除操作作為事務(wù)記錄在日志中保存。以便進(jìn)行進(jìn)行回滾操作。truncate與不帶where的delete :只刪除數(shù)據(jù),而不刪除表的結(jié)構(gòu)(定義)
4.truncate table 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識(shí)所用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用delete如果要?jiǎng)h除表定義及其數(shù)據(jù),請(qǐng)使用 drop table 語(yǔ)句。
5.對(duì)于由foreign key約束引用的表,不能使用truncate table ,而應(yīng)使用不帶where子句的delete語(yǔ)句。由于truncate table 記錄在日志中,所以它不能激活觸發(fā)器。
6.執(zhí)行速度,一般來(lái)說(shuō): drop> truncate > delete。
7.delete語(yǔ)句是數(shù)據(jù)庫(kù)操作語(yǔ)言(dml),這個(gè)操作會(huì)放到 rollback segement 中,事務(wù)提交之后才生效;如果有相應(yīng)的 trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。
8.truncate、drop 是數(shù)據(jù)庫(kù)定義語(yǔ)言(ddl),操作立即生效,原數(shù)據(jù)不放到 rollback segment 中,不能回滾,操作不觸發(fā) trigger
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。