DML DML的全稱是Database management Language,資料庫管理語言。主要包括以下操作: insert、delete、update、optimize。 本篇對其逐一介紹 INSERT 資料庫表插入數據的方式: 1、insert的完整語法:(做項目的過程中將欄位名全寫上,這樣 ...
DML
DML的全稱是Database management Language,資料庫管理語言。主要包括以下操作:
insert、delete、update、optimize。
本篇對其逐一介紹
INSERT
資料庫表插入數據的方式:
1、insert的完整語法:(做項目的過程中將欄位名全寫上,這樣比較容易看懂)
單條記錄插入語法:insert into table_name (column_name1,......) values (column_value1,......);
多條記錄插入語法:insert into table_name (column_name1,......) values (column_value1,......), (column_value1,......), (column_value1,......);
create table stu( id int primary key auto_increment, age int unsigned, name varchar(20), gender enum('0','1') default '0' ); insert into stu(name,age) values('ls',17); insert into stu(id,age,name,gender) values(1,18,'zs','1'); insert into stu(age,gender,name) values(15,'1','ww'),(17,'0','zl'),(20,'0','tq');
將結果集插入到表格中:插入的過程中結果集的欄位名和新的表格的欄位名需要嚴格匹配。
1、簡單的把數據插入到新表格中,兩個表結構不相同:
create table new_table_name as (select * from table_name);
2、複製表格需要兩步:①先複製表結構②將數據插入新表格中
# 複製表結構 create table new_table_name like table_name; # 將查到的結果集插入新表格中 這是一條語句,前後的欄位名需要保持一致 insert into new_table_name (column_name1,column_name2,...) select column_name1, column_name2,... from table_name;
2、windows終端命令行cmd導入:
先切換到sql文件夾目錄下:source xxxx.sql
3、在windows終端命令行命令行模式中導出資料庫、資料庫表格
導出資料庫全部表格:mysqldump -h localhost -u root -p [-d] database_name > database_name.sql
[-d] 表示不導出數據,建議不寫,若不導出數據,沒什麼意義
導出資料庫的摸一個表格:mysqldump -h localhost -u root -p [-d] [--skip-lock-tables] database_name table_name > table_name.sql
[--skip-lock-tables] 表示如果導出的表格與其他表格有關聯,使用這個選項,就會排除這種顧慮
DELETE
drop、truncate、delete三者的區別:
drop一般用法是drop table table_name;它是刪除表中的數據和結構,立刻釋放磁碟空間 , 可以刪除有索引視圖的表,但是不能刪除被外鍵關聯的表
truncate一般用法是truncate table table_name; 他是清空表中所有的數據,立刻釋放磁碟空間,不能用於參與了索引視圖的表、有外鍵約束的表
delete一般用法是delete from table_name where conditions; 它是按照where之後的條件進行刪除,不會釋放磁碟空間;如果沒有條件,就清空表中數據。
對於數據而言:前兩者,一旦刪除就找不回來,而delete刪除的時候沒有提交事務,可以通過回滾事務複原刪除的數據,如果提交了,也是一樣找不回來的
三者的執行速度:drop>truncate>delete
delete的完整語法:
delete [low_priority] from table_name [where conditions] [limit N]
[low_priority] 表示如果沒有客戶讀取當前表格,才執行delete語句
[limit N] 表示刪除的記錄數量
[conditions]不能是select語句,既不能通過select語句返回一個結果集
謹慎操作:刪除數據之前先進行select: select * from stu where id>7 and gender='0'; delete from stu where id>7 and gender='0'; seelct * from stu where name is null; delete from stu where name is null limit 2;
UPDATE
delete的完整語法:
update [low_priority] table_name set column_name=column_value,.... [where conditions] [limit N]
[low_priority] 表示如果沒有客戶讀取當前表格,才執行delete語句
[limit N] 表示刪除的記錄數量
[conditions]不能是select語句,既不能通過select語句返回一個結果集
謹慎操作:修改數據之前先select: select * from stu where id=12; update stu set name='zs',gender='1' where id=12;
optimize
語法:OPTIMIZE TABLE tbl_name
你可以使用OPTIMIZE TABLE回收閑置的空間。
OPTIMIZE TABLE通過製作原來的表的一個臨時副本來工作。老的表被拷貝到 新表中(沒有閑置的行),然後原來的表被刪除並且重命名一個新的。這樣做使得 所有更新自動轉向新的表,沒有任何失敗的更新。當時OPTIMIZE TABLE正在 執行時,原來的表可被另外的客戶讀取。對錶的更新和寫入延遲到新表是準備好為止。