Datawhale-MySQL-任務三

TNTZS666發表於2019-03-01

1.MySQL表資料型別:

  • MySQL中定義資料欄位的型別對你資料庫的優化是非常重要的。
  • MySQL支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別。
  • 具體型別介紹見菜鳥教程 | MySQL資料型別

2.用SQL語句建立表

建立方式:

一般有兩種建立表的方法:
 多數 DBMS都具有互動式建立和管理資料庫表的工具;
 表也可以直接用 SQL語句操縱。
需要注意的是,使用互動式工具時實際上就是使用 SQL語句。這些語句不是使用者編寫的,介面工具會自動生成並執行相應的 SQL語句(更改已有的表時也是這樣)。

設定列型別,大小,約束

利用CREATE TABLE建立表,必須給出下列資訊:

  • 新表的名字,在關鍵字CREATE TABLE之後給出;
  • 表列的名字和定義,用逗號分隔;
  • 有的 DBMS還要求指定表的位置。

設定主鍵

一張表只能有一個欄位可以使用對應的鍵,用來唯一的約束該欄位裡面的資料,不能重複。主鍵本身一定不為空,且不允許重複
設定主鍵的三種方式:
① 建立表的時候在欄位後面使用 primary key關鍵字;

create table my_default(
id int PRIMARY KEY,--使用關鍵字
name VARCHAR(20) not null unique key ,
gender varchar(4) DEFAULT '男'
)charset utf8;

② 在建立表的時候,在所有的欄位之後使用 primary key(主鍵的欄位 列表)來建立主鍵(如果有多個欄位作為主鍵,稱之為複合主鍵);

create table my_pri(
number char(10),
course char(10),
score TINYINT,
PRIMARY KEY(number,course)--複合主鍵
)charset utf8;

③ 建立表之後,為表追加主鍵。有兩種方式,第一為修改表欄位屬性;第二直接追加。
方式一:

alter TABLE my_pri MODIFY number char(11) PRIMARY KEY;

方式二:

alter table table_name add primary key(column) ;

alter TABLE my_pri add PRIMARY KEY(number,course);--增加複合主鍵

alter table my_pri add CONSTRAINT pk_score PRIMARY KEY(score)--使用關鍵字CONSTRAINT 且指定主鍵名字pk_score 

alter table my_pri add CONSTRAINT  PRIMARY KEY(score)--使用關鍵字CONSTRAINT 且使用預設名字 

刪除主鍵:

alter table my_default drop PRIMARY KEY; -- 刪除主鍵使不需要根據主鍵名字刪除,因為只有一個主鍵

3.用SQL語句向表中新增資料

語句解釋

MySQL 表中使用 INSERT INTO SQL語句來插入資料。

多種新增方式(指定列名;不指定列名)

插入資料有三種方式:

  • 插入完整的行;
  • 插入行的一部分(指定列名);
  • 插入某些查詢的結果(INSERT SELECT)。
    注:不指定列名插入高度依賴於表中列的定義次序,還依賴於其容易獲得的次序資訊。即使可以得到這種次序資訊,也不能保證各列在下一次表結構變動後保持完全相同的次序。因此,編寫依賴於特定列次序的 SQL語句是很不安全的,這樣做遲早會出問題。因此指定列名插入,VALUES必須以其指定的次序匹配指定的列名,不一定按各列出現在表中的實際次序。其優點是,即使表的結構改變,這條INSERT語句仍然能正確工作。

4.用SQL語句刪除表

DELETE

DELETE FROM table_name [WHERE Clause]

  • 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
  • 你可以在 WHERE 子句中指定任何條件
  • 你可以在單個表中一次性刪除記錄。

DROP

DROP TABLE table_name

TRUNCATE

TRUNCATE table_name

不同方式的區別

1.drop和delete只是刪除表的資料(定義),drop語句將刪除表的結構、被依賴的約束(constrain)、觸發器 (trigger)、索引(index);依賴於該表的儲存過程/函式將保留,但是變為invalid狀態。

2.delete語句是DML語言,這個操作會放在rollback segement中,事物提交後才生效;如果有相應的觸發器(trigger),執行的時候將被觸發。truncate、drop是DDL語言,操作後即 生效,原資料不會放到rollback中,不能回滾,操作不會觸發trigger。

3.delete語句不影響表所佔用的extent、高水線(high watermark)保持原位置不動。drop語句將表所佔用的空間全部釋放。truncate語句預設情況下將空間釋放到minextents的 extent,除非使用reuse storage。truncate會將高水線復位(回到最初)。

4.效率方面:drop > truncate > delete。

5.安全性:小心使用drop與truncate,尤其是在 沒有備份的時候,想刪除部分資料可使用delete需要帶上where子句,回滾段要足夠大,想刪除表可以用drop,想保留表只是想刪除表的所有資料、 如果跟事物無關可以使用truncate,如果和事物有關、又或者想觸發 trigger,還是用delete,如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新匯入、插入資料。

6.delete是DML語句,不會自動提交。drop/truncate都是DDL語句,執行後會自動提交。

7、drop一般用於刪除整體性資料 如表,模式,索引,檢視,完整性限制等;delete用於刪除區域性性資料 如表中的某一元組。

8、DROP把表結構都刪了;DELETE只是把資料清掉

9.當你不再需要該表時, 用 drop;當你仍要保留該表,但要刪除所有記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.

5.用SQL語句修改表

修改列名

ALTER TABLE 表名 CHANGE 列名 新列名 列型別。

修改表中資料

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

刪除行

從一個表中刪除(去掉)資料,使用DELETE語句。有兩種使用DELETE的方式:

  • 從表中刪除特定的行;
  • 從表中刪除所有行。
    注:不要省略 WHERE 子句:在使用 DELETE時一定要細心。因為稍不注意,就會錯誤地刪除表中所有行。如果想從表中刪除所有行,不要使用DELETE。可使用TRUNCATE TABLE語句,它完成相同的工作,而速度更快(因為不記錄資料的變動)。

新建列

alter table 表名 add column 列名 列型別;

新建行

參考第三部分新增資料

6.作業

專案三

超過5名學生的課(難度:簡單)
建立如下所示的courses 表 ,有: student (學生) 和 class (課程)。
例如,表:

student class
A Math
B English
C Math
D Biology
E Math
F Computer
G Math
H Math
I Math
A Math

編寫一個 SQL 查詢,列出所有超過或等於5名學生的課。
應該輸出:

class
Math

Note:
學生在每個課中不應被重複計算。


作業程式碼:
在這裡插入圖片描述

專案四

交換工資(難度:簡單)
建立一個 salary表,如下所示,有m=男性 和 f=女性的值 。
例如:

id name sex salary
1 A m 2500
2 B f 1500
3 C m 5500
4 D f 500

交換所有的 f 和 m 值(例如,將所有 f 值更改為 m,反之亦然)。要求使用一個更新查詢,並且沒有中間臨時表。
執行你所編寫的查詢語句之後,將會得到以下表:

id name sex salary
1 A f 2500
2 B m 1500
3 C f 5500
4 D m 500

作業程式碼:
在這裡插入圖片描述

相關文章