mysql資料庫中的增刪改操作
1、插入資料
語法格式: INSERT INTO table_name (column_list) VALUES (value_list);
INSERT INTO table_name (column_list) VALUES (value_list1),(value_list2),……;
INSERT INTO table_name (column_list) SELECT (column_list2) FROM query_table WHERE (condition);
(1)插入資料
# 插入資料 mysql> insert into student(sid,sname) value(3,'dayi'); mysql> insert into student(sid) value(2); mysql> insert into student(sname) value('dayi123'); # 插入資料時也支援算術運算子 mysql> insert into student(sid,sname) value(3*3,'dy'); # 檢視插入的所有資料,由於sid設定了auto_increment,沒有設定sid時會自動新增 mysql> select * from student; +-----+---------+--------+---------+ | sid | sname | gender | dept_id | +-----+---------+--------+---------+ | 2 | NULL | NULL | NULL | | 3 | dayi | NULL | NULL | | 4 | dayi123 | NULL | NULL | | 9 | dy | NULL | NULL | +-----+---------+--------+---------+
(2)同時插入多條資料
插入時選項資訊說明:
low_priority:如果有其他連線正在讀取資料庫,則需要等待讀取完成再插入
ignore:如果違反主鍵和唯一鍵的約束條件,則不報錯而只產生警告資訊,違反的行被丟棄
# 同時向student表中插入兩條資料 mysql> insert into student(sid,sname) value(10,'liuer'),(1,'liyi'); # 在插入時也可不寫插入列表 mysql> insert into dept value(1,'aaa'),(2,'bbb'),(3,'ccc'); # 使用ignore引數插入時違反主鍵唯一約束條件,插入資料數只有警告並不退出 mysql> insert ignore into dept value(3,'ccc'),(4,'ddd'); Query OK, 1 row affected, 1 warning (0.00 sec) Records: 2 Duplicates: 1 Warnings: 1
插入資料時提示資訊說明
Records:插入的記錄條數
Duplicates:插入時被忽略的記錄
Warings:表明有問題的資料值
(3)將查詢結果插入到表中
# 將mysql.user表中的user查詢出來插入到dept表中的dept_name欄位
mysql> insert into dept(dept_name) select user from mysql.user;
Query OK, 8 rows affected (2.28 sec)
Records: 8 Duplicates: 0 Warnings: 0
(4)插入資料時的其他選項
on duplicate key update語句:當使用insert插入資料時碰到當前插入的資料違反主鍵或唯一鍵的唯一性約束時,使用” on duplicate key update”語句時則Insert會轉變成update語句修改對應的已經存在表中的這條資料;”on duplicate key update”子句後面可以跟多個修改,用逗號隔開。
# 插入資料,當id存在時對id等於100加1
mysql> insert into dept(id,dept_name) value(1,'aaa') ON DUPLICATE KEY UPDATE id=100+1;
Query OK, 2 rows affected (2.29 sec)
# 插入資料當id為2存在時修改id為2的dept_name的值為’bbb-test’
mysql> insert into dept value(2,'bbb') ON DUPLICATE KEY UPDATE dept_name='bbb-test';
# 檢視修改後的值
mysql> select * from dept where id=2 or id=101;
+-----+-----------+
| id | dept_name |
+-----+-----------+
| 2 | bbb-test |
| 101 | aaa |
2、修改資料
Mysql資料庫表中插入的資料不是一成不變,可以對其進行修改,修改語法如下
單表修改語句:UPDATE [LOW_PRIORITY] [IGNORE] table_name SET col_name1 = {expr1|DEFAULT}, col_name2 = {expr2|DEFAULT},……, [WHERE (condition)] [ORDER BY……] [LIMIT row_count];
多表修改語句:UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1 = {expr1|DEFAULT}, col_name2 = {expr2|DEFAULT},……, [WHERE (condition)]
(1)修改選項說明
單表修改:修改指定單個表中的已經存在的資料的一個或多個列的數值;set短語後面要跟修改的列和值。
Order by:表示update資料按照指定的順序進行
Limit:限定修改資料的行數
多表修改:修改table_references指定的多個表中滿足條件的行資料,多表修改不允許使用order by 和limit語句
Low_prority:修改語句需要等待其他連線的讀操作結束後再執行。
Ignore:當修改語句碰到違反唯一約束性條件情況時,語句不報錯,只會有警告。
(2)修改操作
# 修改student表中sid為2 的sname和gender
mysql> update student set sname="name_test",gender='2' where sid=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#修改student表中最先找到的兩行資料的gender欄位為666
mysql> update student set gender='666' limit 2;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
當為一個表中唯一約束遞增的一列數值同時加指定的值時,由於違反唯一約束會報錯,此時可以遞減排序,在對值進行增加。
# 為student表中的sid欄位加1時由於違反唯一約束會報錯。
mysql> update student set sid=sid+1;
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
# 反向排序再增加時不會報錯
mysql> update student set sid=sid+1 order by sid desc;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6 Changed: 6 Warnings: 0
# 多條件修改
mysql> update teacher set name='carey' where name='ruth' and id>100 and id<200;
Query OK, 1 row affected (2.33 sec)
Rows matched: 1 Changed: 1 Warnings: 0
(3)多表修改
# 將滿足條件的teacher表中name欄位修改weiteacher_backup表中的name欄位
mysql> update teacher,teacher_backup set teacher.name=teacher_backup.name where teacher.id=teacher_backup.id;
Query OK, 1 row affected (0.00 sec)
Rows matched: 2 Changed: 1 Warnings: 0
3、刪除資料
刪除語法:
單表刪除:DELETE [LOW_RPIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name,……)] [WHERE condition] [ORDER BY……] [LIMIT row_count];
多表刪除:DELETE [LOW_RPIORITY] [QUICK] [IGNORE] tbl_name1[.*],tbl_name2[.*] …… FROM|USING table_references [WHERE condition];
選項說明:
多表刪除:從一個或多個表中刪除滿足條件的資料
table_references:代表了多個表的join操作
Low_prority:修改語句需要等待其他連線的讀操作結束後再執行,只作用在MyISAM, MEMORY及 MERGE儲存引擎
Order by:刪除資料的順序
Limit:刪除資料的行數
Quick:關鍵詞是在使用myisam儲存引擎時,刪除操作不會合並刪除表的索引葉節點
(1)單表刪除
# 刪除表teacher_backup01中的所有資料
mysql> delete from teacher_backup01;
Query OK, 2 rows affected (2.34 sec)
# 刪除表teacher_backup中name為’vivian’的資料
mysql> delete from teacher_backup where name='vivian';
Query OK, 1 row affected (0.06 sec)
# 刪除student表中id最大的資料
mysql> delete from student order by sid desc limit 1;
Query OK, 1 row affected (2.30 sec)
(2)多表刪除
# 刪除表teacher和表teacher_backup中name相同的資料
mysql> DELETE teacher,teacher_backup FROM teacher INNER JOIN teacher_backup WHERE teacher.name=teacher_backup.name;
Query OK, 2 rows affected (2.36 sec)
# 定義表別名刪除表teacher和表teacher_backup中id欄位相同的資料
mysql> DELETE t1,t2 FROM teacher AS t1 INNER JOIN teacher_backup AS t2 WHERE t1.id=t2.id;
Query OK, 2 rows affected (2.40 sec)
(3)使用”Truncate table”來刪除或截斷表裡的所有資料
Truncate table語句用來刪除/截斷表裡的所有資料,和delete刪除所有表資料在邏輯上含義相同,但效能更快;類似執行了drop table和create table兩個語句。
# 刪除teacher_backup01表裡的所有資料
mysql> truncate table teacher_backup01;
Query OK, 0 rows affected (0.01 sec)