MySQL入門(三)

一.MySQL表數據類型

http://www.runoob.com/mysql/mysql-data-types.html 詳見

變長字符可以存儲任意長度的文本.相比定長字符靈活許多,但是性能上有差距,也就是系統處理定長列遠快於變長.此外許多DBMS不允許對變長列進行索引!

注意:如果再數值類型內輸入01234,將會顯示1234,也就是丟失了0這個數字,所以這個是用應該用字符串數據類型.常常訂單號什麼的會出現這個情況

二.用SQL語句創建表

1. 語句解釋

Create Table Products
( prod_id char(10) not null,
  vend_id text     not null);

這裏解釋一下’Create Table’這是個命令代表創建表,後面跟表名.然後表裏所有的列都寫在後面的括號裏,這次我們在這個表裏定義了prod_id和vend_id兩列,注意括號裏開頭必須是列名,再是數據類型,然後是是否包括空值,之後用逗號分隔.

注意:在創建新的表時,指定的表名必須不存在,否則會出錯。防止意外覆蓋已有的表,SQL 要求首先手工刪除該表(請參閱後面的內容),然後再重建它,而不是簡單地用創建表語句覆蓋它。

2.設定列類型,大小,約束

可以看到我們在上面的每行代碼最後我們都寫了not null,意思也就是指定這個列爲not null 列.這就會阻止插入沒有值的數據,如果插入沒有值的數據,將返回錯誤.

注意:如果我們在上面的代碼行裏不輸入not null 直接在數據類型後跟上逗號,那麼我們就指定這個列爲null列,也就是這列裏面的數據可以允許空值存在.當然我們也可以輸入null指定null列

主鍵是其值唯一標識表中每一行的列。只有不允許NULL
值的列可作爲主鍵,允許NULL 值的列不能作爲唯一標識。

不要把NULL 值與空字符串相混淆。NULL 值是沒有值,不是空字符串。如果指定’’(兩個單引號,其間沒有字符),這在NOT NULL 列中是允許的。空字符串是一個有效的值,它不是無值。NULL 值用關鍵字NULL而不是空字符串指定。

3.設定主鍵

Create Table Products
(prod_id   int  not null  Primary Key);

注意上面說到的,設定主鍵的列必須爲not null列,這時候我們在not null 後面跟上’Primary Key’ 命令 就是設定這一列爲主鍵.

三.用SQL語句向表中添加數據

下面我們來介紹’Insert’ 命令,也就是對錶中添加數據.

Insert into Customers
Values ('1006',
	'Toy Land',
	'New York',
	Null);

上面是第一種插入方法,表示將下面的數據插入到Customers 這張表裏.這裏需要注意的是,我們添加的這一行新數據必須對於Customers表裏每一列的數值按照其順序都進行填充,如果某列值不需要填充,則使用Null.這個方法不太安全,也不推薦使用,因爲每次都要把所有列名數據填充一邊,而且還必須按照順序.

下面介紹一個更爲安全的方法:

Insert into Customers(cust_id,
								cust_name,
								cust_address
								)
Values ('1006',
	'Toy Land',
	'New York',
	);

這個相比於上面那個方法,我們在表名後面增加了一個括號內容,括號裏填充的就是我們要添加的數據對應的列名,比如cust_email這列我們在上面用的是Null,就是我們不需要添加,所以我們在這個方法裏,根本不需要加入這個列名,只需要添加我們需要的列名就行了,然後values括號後面的內容,根據我們輸入的列名順序,進行添加值.

當然我們也可以根據在另一張表裏檢索到的內容來添加到我們正在使用的表中,

INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,

FROM CustNew;

說明:新例子的說明
這個例子從一個名爲CustNew 的表中讀出數據並插入到Customers
表。爲了試驗這個例子,應該首先創建和填充CustNew 表。CustNew
表的結構與附錄A 中描述的Customers 表相同。在填充CustNew 時,
不應該使用已經在Customers 中用過的cust_id 值(如果主鍵值重
復,後續的INSERT 操作將會失敗)。

上面說的都是插入數據,我們這裏提一下複製表的操作如下:

Insert * into CustCopy
From Customers;

就是把Customers表裏所有的數據都添加到CustCopy表裏(也就是新建一張Custcopy表,作爲他的複製).

四.用SQL語句刪除表

1.DELETE

Delete From Customers

DELETE語句執行刪除操作的過程是每次從表中刪除一行,並且同時將該行的刪除操作作爲事務記錄在日誌中保存以便進行進行回滾操作.Delete只是刪除表中的內容,並不是把整個表去除.

2.DROP

刪除表(刪除整個表而不是其內容)非常簡單,使用DROP TABLE 語句即可:

Drop Table Customers;

3.TRUNCATE

Truncate Table Customers 

跟Drop 一樣 Truncate跟Table 連用.但是他只是清楚表內所有內容,並不是把整張表刪除.

4.不同方式的區別

1.Drop是把整個表刪除,Truncate和Delete只是清除表的內容
2.速度上來說Drop>Truncate>Delete

提示:truncate table是將表結構重新建一次速度要比使用delete from快很多,而delete from是一行一行的刪除,速度很慢.

3.Delete 可以通過Where來精準選擇要刪除的行,也可以全部刪除表內容.其他兩個只能全部刪除.
4.Delete 可以回滾刪除,其他兩個不行

五.用SQL語句修改表

1.修改列名

Alter Table  Customers Rename NewCus;

用Alter命令配合Rename.上面爲把Customers表名字改爲NewCus

2.修改表中數據

修改數據我們用Update 命令

Update Customers
Set cus_email = '**@gmail.com',
   cust_contact = 'Sam Roberts'
Where cus_id = '1005';

解釋一下,首先我們要選擇表,也就是在Update 後面跟上你要用的表名,之後輸入Set在其後面跟上你需要修改的列,並附上新的值也就是(列=值),最後用Where篩選出你要更新的是哪一個數據,這裏用了cus_id進行了指定,也就是選擇了cus_id爲1005的這行數據對cus_email進行更新.如果沒有Where,那麼Dbms會對所有數據的cus_email 都進行更新(也就是更新所有行).

我們甚至可以使用Update命令進行刪除操作如下:

Update Customer
Set cus_email  = Null
Where  cus_id = '1005';

其實跟上面的理解一樣,我們就是對cus_id 爲1005顧客的郵件地址進行了更新,只不過這次更新是使得他的郵件地址變成了空值(Null),也就是刪除了他的郵件地址信息.如果不指定Where則是表示讓整個email列都變成空值.

3.刪除行

下面的語句表示從Customers 表中刪除一行,也就是刪除了整個cus_id 是1005的顧客信息,就是我們表裏去掉了這個顧客

Delete From Customers
Where cust_id = '1005';

同樣如果省略where,那麼就變成了刪除整張表的內容,但是並不會刪除整個表的本身.但是如果列裏有外鍵,則會拋出異常,這也是防止誤刪的一個手段.

4.刪除列

注意:小心使用ALTER TABLE
使用ALTER TABLE 要極爲小心,應該在進行改動前做完整的備份(表結構和數據的備份)。數據庫表的更改不能撤銷,如果增加了不需要的列,也許無法刪除它們。類似地,如果刪除了不應該刪除的列,可能會丟失該列中的所有數據。

假設我們要對Customers表刪除一列,操作如下:

ALTER TABLE Customers
Drop Column  = cus_phone;

用ALter命令, Alter Table 後面更需要操作的表名,之後輸入Drop後面跟自己需要刪除的列的列名.

5.新建列

假設我們要對Customers表新增一列,也就是添加一個新屬性,操作如下:

ALTER TABLE Customers
ADD cus_phone CHAR(20);

用ALter命令, Alter Table 後面更需要操作的表名,之後輸入Add 後面跟自己需要增加的列的信息,列名,字段類型,是否not null,默認值等.

6.新建行

新建行就是我們前面說的Insert

Insert into Customers(cust_id,
								cust_name,
								cust_address
								)
Values ('1006',
	'Toy Land',
	'New York',
	);

作業

項目三

在這裏插入圖片描述
在這裏插入圖片描述

項目四

在這裏插入圖片描述
在這裏插入圖片描述

…都寫完了忘記保存哭哭惹…暫時不寫了 直接交作業

項目五

項目六

原數據:
在這裏插入圖片描述

處理後:
在這裏插入圖片描述

這裏解釋一下我們首先用select找出class_id爲重複的數據(並且重複次數大於3)也就是通過,這裏返回的是篩選後的表:

select class_id from students
group by class_id 
having count(class_id) >3 ;

再接着我們需要用in來完成where後面的條件語句.

class_id in 篩選條件

意思就是匹配 在篩選條件中的 class_id
在這裏插入圖片描述
然後我們需要通過再添加另一個條件也就是尋找id是最小的數據行:

id in (select min(id) from students);

在這裏插入圖片描述

最後組合這些條件 用delete

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章