文章目錄
表的數據操作
MySQL數據表分爲表結構(Structure)和數據記錄(Record)2部分。前面創建表的操作,僅僅是創建了表結構,表結構即決定表擁有哪些字段以及這些字段的名稱、數據類型、長度、精度、小數位數、是否允許空值(null)、設置默認值和主鍵等。
MySQL語言一般通過insert
、update
和delete
等3種DML語句對錶進行數據的添加、更新和刪除數據操作,並以此維護和修改表的數據。
一、 表記錄的插入
爲數據表輸入數據的方式有多種,常見的有通過命令方式添加行數據的,也可以通過程序實現表數據的添加。可以通過insert into
、replace into
語句插入,也可以使用load data infile
方式將保存在文本文件中的數據插入到指定的表。
1.使用insert into| replace
語句添加數據
insert into| replace
語句語法格式:
insert|replace[into]table_name[(col_name,...)]
values({expr|default},...),(...),...
|set col_name ={expr|default}, ...
(1)利用insert表student中插入1行數據。
mysql>insert into student
->(studentno,sname,sex,birthdate,entrance,phone,Email)
-> values ('18122210009','許東山','男','1999/11/5',789,
-> '13623456778','[email protected]');
(2)利用insert into
命令向表student中插入多行數據。
mysql> insert into student values
-> ('18122221324','何白露',
-> '女','2000/12/4','879','13178978999','[email protected] '),
-> ('18125111109','敬橫江',
-> '男','2000/3/1','789',' 15678945623','[email protected] '),
-> ('18125121107','樑一葦',
-> '女','1999/9/3','777',' 13145678921','[email protected] '),
-> ('18135222201','凌浩風',
-> '女','2001/10/6','867','15978945645','[email protected] '),
-> ('18137221508','趙臨江',
-> '男','2000/2/13','789','12367823453','[email protected] '),
-> ('19111133071','崔依歌',
-> '女','2001/6/6','787',' 15556845645','[email protected] '),
-> ('19112100072','宿滄海',
-> '男','2002/2/4','658',' 12545678998','[email protected]'),
-> ('19112111208','韓山川',
-> '男','2001/2/14','666','15878945612','[email protected] '),
-> ('19122203567','封月明',
-> '女','2002/9/9','898',' 13245674564','[email protected]'),
-> ('19123567897','趙既白',
-> '女','2002/8/4','999',' 13175689345','[email protected]'),
-> ('19126113307','梅惟江',
-> '女','2003/9/7','787',' 13245678543','[email protected]');
Query OK, 11 rows affected (0.05 sec)
插入後表內數據:
(3)利用replace into
代碼向表course中插入多行數據。
mysql> replace into course values
-> ('c05103','電子技術','必修','64','16','2'),
-> ('c05109','C語言','必修','48','16','2'),
-> ('c05127','數據結構','必修','64','16','2'),
-> ('c05138','軟件工程','選修','48','8','5'),
-> ('c06108','機械製圖','必修','60','8','2'),
-> ('c06127','機械設計','必修','64','8','3'),
-> ('c06172','鑄造工藝','選修','42', '16','6'),
-> ('c08106','經濟法','必修','48','0','7'),
-> ('c08123','金融學','必修','40','0','5'),
-> ('c08171','會計軟件','選修','32','8','8');
插入後表內數據:
說明:
- 使用insert語句可以向表中插入一行數據,也可以插入多行數據,最好一次插入多行數據,各行數據之間用“,”分隔。
- values子句:包含各列需要插入的數據清單,數據的順序要與列的順序相對應。若表名後不給出列名,則在values子句中要給出每一列(除identity和
timestamp類型的列)的值,如果列值爲空,則值必須置爲null,否則會出錯。- 如果向表中添加已經存在的學號(已經設爲主鍵主鍵)的記錄,因此將出現主鍵衝突錯誤。例如,插入已經存在的學號19112111208記錄,結果如下。
-> '女','2001/2/14','666','15878945612','[email protected] '); ERROR 1062 (23000): Duplicate entry '19112111208' for key 'primary' ``` - replace into向表中插入數據時,首先嚐試插入數據到表中,如果發現表中已經有此行數據(根據主鍵或者唯一索引判斷),則先刪除此行數據,然後插入新的數據,否則,直接插入新數據。 - 還可以向表中插入其他表的數據,這也是成批插入數據的一種方式。但要求兩個表要有相同的結構。具體操作將在以後介紹。其語法格式如下,: ```sql insert into table name1 select * from table name2; ```
2.利用load data
語句將TXT文本數據裝入數據庫表中
(1)假設teacher表的數據已放在“d:\teacher.txt”中,現將teaching.txt的數據插入到teacher表中。
mysql>load data local infile "d:\\teacher.txt" into table teacher;
Query OK, 9 rows affected, 8 warnings (0.03 sec)
Records: 9 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from teacher; //輸出表的記錄
說明:
- teacher.txt各行文本之間要用製表符
<Tab>
分隔,每行最後也加<Tab>
分隔符。- “d:\teacher.txt”:要用“\”,表示斜線。
TXT文件中的內容如下圖所示:
運行結果:
輸出表的記錄:
(2)利用load data
語句輸入score表數據。
mysql>load data local infile “d:\\score.txt” into table score;
mysql>select * from score;
TXT文件中的內容如下圖所示:
添加後:
(3)利用load data
語句輸入teach_course表數據。
mysql> load data local infile "d:\\teach_course.txt"
-> into table teach_course;
mysql> select * from teach_course;
添加後:
3.使用set子句插入數據
用set子句直接賦值時可以不按列順序插入數據,對允許空值的列可以不插入。
(1)利用set子句向se_course表插入數據。
mysql> insert into se_course
-> set studentno=‘19120000111’,courseno=‘c01236’,
-> teacherno=‘t01237’;
mysql> select * from se_course;
4.向表中插入圖片數據。
MySQL還支持圖片的存儲,圖片一般可以以路徑的形式來存儲,即插入圖片採用直接插入圖片的存儲路徑。當然,也可以直接插入圖片本身,只要用load_file( )函數即可。
(1)參照student表結構創建student01表,添加一個能夠存儲圖片字段,然後插入一行數據。照片路徑爲“d: \image\ picture.jpg”。
mysql> create table student01 as select * from student;
mysql> select * from student01;
mysql> alter table student01 add fields mediumblob comment‘照片’;
mysql> insert into student01 values
-> ('18122221329','何影映','女','2001/12/9','877',
-> '13178978997', '[email protected] ', 'd:\\image\\picture.jpg');
①參照student表結構創建student01表:
創建後的student01表數據如下:
②添加一個能夠存儲圖片字段:
③插入一行數據:
④輸出表記錄:
說明:
- 存放圖片的字段要使用blob類型。blob是專門存儲二進制文件的類型,有大小之分,例如mediumblob、longblob等,以存儲大小不同的二進制文件,一般的圖形文件使用mediumblob就足夠了。
- 插入圖片文件路徑的辦法要比插入圖片本身好。圖片如果很小的話,可以存入數據庫,但是如果圖片大的話,保存或讀取操作會很慢,倒不如將圖片存入指定的文件夾,然後把文件路徑和文件名存入數據庫。
二、表記錄的修改update...set...
用update...set...
命令可以修改一個表的數據。一般表記錄修改的語法格式如下:
update table_name
set col_name1= [,col_name2=expr2 ...] [where子句]
說明:
- set子句:根據where子句中指定的條件,對符合條件的數據行進行修改。若語句中不設定where子句,則更新所有行
- expr1、expr2……可以是常量、變量或表達式。可以同時修改所在數據行的多個列值,中間用逗號隔開。
(1)將學號爲18137221508學生的課程號爲 c08106的平時成績daily修改爲80分。
mysql> update score set daily=80
-> where studentno=‘18137221508’ && courseno=‘c08106’;
mysql> select * from score
-> where studentno=‘18137221508’ && courseno=‘c08106’;
修改後:
(2) 將課程student01表中低於700分的入學成績增加8%。
mysql> update student01 set entrance=entrance*1.08
-> where entrance<700;
修改前:
修改:
修改後:
三、表記錄的刪除delete… from…
利用delete… from…
語句可以從單個表中刪除指定表數據,一般表記錄刪除的語法格式如下:
delete[low_priority] [quick] [ignore] from tbl_name
[where子句]
[order by子句]
[limit row_count]
說明:
- quick修飾符:可以加快部分種類的刪除操作的速度。
- from子句:用於指定從何處刪除數據。
- where子句指定的刪除條件。如果省略where子句則刪除該表的所有行。
- order by子句:各行按照子句中指定的順序進行刪除,此子句只在與limit聯用時才起作用。
- limit子句:用於告知服務器在控制命令被返回到客戶端前被刪除的行的最大值。
- 數據刪除後將不能恢復,因此,在執行刪除之前一定要對數據做好備份。
(1)刪除student01表中入學成績低於750分記錄。
命令和運行結果如下:
mysql> delete from student01 where entrance <750;
Query OK, 2 rows affected (0.04 sec)
(2)刪除student01表中入學成績最低的2行記錄。
命令和運行結果如下:
mysql> delete from student01 order by entrance limit 2;
Query OK, 2 rows affected (0.01 sec)