1. 程式人生 > 資料庫 >MySQL入門(一) 資料表資料庫的基本操作

MySQL入門(一) 資料表資料庫的基本操作

序言

這類文章,記錄我看《MySQL5.6從零開始學》這本書的過程,將自己覺得重要的東西記錄一下,並有可能幫助到你們,在寫的博文前幾篇度會非常基礎,只要動手敲,跟著我寫的例子全部實現一遍,基本上就搞定了,前期很難理解的東西基本沒有,所以寫博文的內容,就是以練題的形式來呈現的。

需要用的資料以連結的形式給需要的同學。

我用的mysql版本為: Mysql-5.5.45-win64.msi 密碼是:26zw

圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs

開始我的MySQL之旅吧   始於2016.12.04

                                              --WH

一、資料庫的安裝

這個就不在這裡過多闡述了,因為網上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就能夠安裝完好。

安裝好mysql後,如果需要使用windows命令視窗(也就是cmd)來操作mysql,那麼就需要配置環境變數,在安裝好的mysql下找到bin,將其目錄放到環境變數path中去,就行了,檢測成功與否的方法是在cmd命令視窗中輸入mysql,就會出現一大段英文,就說明成功了,反之失敗,如果不會的話就去百度搜教程。

二、資料庫的基本操作

1、開啟mysql服務命令

net start mysql

2、進入mysql的兩種方式

明文進入:mysql -uroot -proot  格式:mysql -u帳號 -p密碼

密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示為***這樣。

3、檢視mysql中所有的資料庫(一般在固定的單詞命令就會是用大寫,這個要習慣,看多了敲多了就認識了)

前面四個資料庫是mysql中自帶的,也就是必須的.

SHOW DATABASES;

4、建立名為test_1的資料庫

格式:CREATE DATABASE 資料庫名

CREATE DATABASE test_1;

5、刪除名為test_1的資料庫

格式:DROP DATABASE 資料庫名

DROP DATABASE test_1;

總結:學習了對資料庫的三個操作,1、檢視所有資料庫 2、建立資料庫 3、刪除資料庫

三、資料表的基本操作

資料表和資料庫還有Mysql三者的關係

mysql中儲存了很多資料庫、一個數據庫中可以儲存很多表。

對資料表的增(建立表)刪(刪除表)改(修改表字段)查(查詢表結構)。 注意:這裡的操作物件是表,對錶的操作也就是表的結構,和表中的欄位的操作(欄位和記錄要分清楚)

前提:表是在資料庫下的,所以要先確實使用哪個資料庫。

USE test_1;

1、建立資料表

格式:CREATE TABLE 資料表名(

   欄位名1  資料型別[列級別約束條件],

   欄位名2  資料型別[列級別約束條件],

   欄位名3  資料型別[列級別約束條件]

               ); 

注意:格式不一定需要這樣隔著寫,完全可以全部寫成一行。但是那樣寫可觀性非常差。我這樣寫只是為了可以看的更清晰。

解釋:

1、[]中括號中的內容表示可以有可以沒有,

2、列級別這個“列”一定要搞清楚說的是什麼,一張表中有行有列,列表示豎,行表示橫 

3、約束條件後面會講到

  1.1、建立沒有約束的student表

     CREATE TABLE student(
          id  INT(11),          name  VARCHAR(12),          age  INT(11)
               );

註釋:SHOW TABLES 查詢資料庫底下的所有表。

1.2、建立有約束的student表

   六大約束:主鍵約束、外來鍵約束、非空約束、唯一約束、預設約束、自動增加

1.2.1:主鍵約束

PRIMARY KEY(primary key):獨一無二(唯一)和不能為空(非空),通俗的講,就是在表中增加記錄時,在該欄位下的資料不能重複,不能為空,比如以上面建立的表為例子,在表中增加兩條記錄,如果id欄位用了主鍵約束。則id不能一樣,並且不能為空。一般每張表中度有一個欄位為主鍵,唯一標識這條記錄。以後需要找到該條記錄也可以同這個主鍵來確認記錄,因為主鍵是唯一的,並且非空,一張表中每個記錄的主鍵度不一樣,所以根據主鍵也就能找到對應的記錄。而不是多條重複的記錄。如果沒有主鍵,那麼表中就會存在很多重複的記錄,那麼即浪費儲存空間,在查詢時也消耗更多資源。

一般被主鍵約束了的欄位度習慣性的稱該欄位為該表的主鍵

單欄位主鍵約束

  兩種方式都可以

  CREATE TABLE student(            CREATE TABLE student(

    id  INT(11) PRIMARY KEY,          id  INT(11),

    name  VARCHAR(12),            name  VARCHAR(12),

    age  INT(11)   age  INT(11),

  ); PRIMARY KEY(id) );

多欄位主鍵約束(複合主鍵)

    這個id和name都市主鍵,說明在以後增加的插入的記錄中,id和name不能同時一樣,比如說可以是這樣。一條記錄為id=1,name=yyy、另一條記錄為:id=1,name=zzz。 這樣是可以的。並不是你們所理解的兩個欄位分別度不可以相同。

  CREATE TABLE student(CREATE TABLE student(

    id  INT(11) PRIMARY KEY,            id  INT(11),

    name  VARCHAR(12) PRIMARY KEY,       name  VARCHAR(12),

    age  INT(11)     age  INT(11),

  );        PRIMARY KEY(id,name) );

1.2.2:外來鍵約束

什麼是外來鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另一張表是dept(部門)表,一個員工屬於一個部門,那麼如何通過員工能讓我們自己他在哪個部門呢?那就只能在員工表中增加一個欄位,能代表員工所在的部門,那該欄位就只能是儲存dept中的主鍵了(因為主鍵是唯一的,才能確實是哪個部門,進而代表員工所在的部門,如果是部門名稱,有些部門的名稱可能是同名。就不能區分了。),像這樣的欄位,就符合外來鍵的特點,就可以使用外來鍵約束,使該欄位只能夠儲存另一張表的主鍵。如果不被外來鍵約束,那麼該欄位就無法保證儲存進來的值就一定是另一張表的主鍵值。

外來鍵約束的特點:

  1、外來鍵約束可以描述任意一個欄位(包括主鍵),可以為空,並且一個表中可以有多個外來鍵。但是外來鍵欄位中的值必須是另一張表中的主鍵。

  2、這樣被外來鍵關聯的兩種表的關係可以稱為父子表或者主從表。子表(從表)擁有外來鍵欄位的表,父表(主表)被外來鍵欄位所指向的表。

  3、子表被外來鍵約束脩飾的欄位必須和父表的主鍵欄位的型別一樣。

  注意:一個表中有被外來鍵修飾的欄位,就稱該表有外來鍵(是“有外來鍵”。而不是“是外來鍵”),並會給該表中的外來鍵約束取一個名稱,所以我們常說的這個表有沒有外來鍵,指的不是被外來鍵約束脩飾的欄位名,而是指這個表是否有存在外來鍵約束。也就是說,不能說這個表的外來鍵是xxx(該表中被外來鍵約束脩飾的欄位名),這種說法是錯誤的,但是大多數人已經習慣了這樣,雖然影響不大,但是在很多時候需要理解一個東西時,會造成一定的困擾。

格式:CONSTRAINT  外來鍵名稱  FOREIGN KEY(被外來鍵約束的欄位名稱)  REFERENCES 主表名(主鍵欄位)

    英文解釋:CONSTRAINT:約束    REFERENCES:參考

   CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);     

     解釋:tableB中有一個名為tableA_tableB_1的外來鍵關聯了tableA和tableB兩個表,被外來鍵約束脩飾的欄位為tableB中的deptId,主鍵欄位為tableA中的id     

1.2.3:非空約束

NOT NULL. 被該約束脩飾了的欄位,就不能為空,主鍵約束中就包括了這個約束

   CREATE TABLE tableA
(
id INT(11),
PRIMARY KEY(id)
);

1.2.4:唯一約束

UNIQUE 被唯一約束脩飾了的欄位,表示該欄位中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處於該欄位的值不能是一樣的。

         CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
PRIMARY KEY(id)
);

也就是說在插入的記錄中,每條記錄的name值不能是一樣的。

1.2.5:預設約束

Default 指定這一列的預設值為多少,比如,男性同學比較多,性別就可以設定為預設男,如果插入一行記錄時,性別沒有填,那麼就預設加上男 

     
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);

1.2.6:自動增加  

AUTO_INCREMENT 一個表只能一個欄位使用AUTO_INCREMENT,並且使用這個約束的欄位只能是整數型別(任意的整數型別 TINYINT,SMALLIN,INT,BIGINT),預設值是1,也就是說從1開始增加的。一般就是給主鍵使用的,自動增加,使每個主鍵的值度不一樣,並且不用我們自己管理,讓主鍵自己自動生成

  CREATE TABLE table
  (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(22) NOT NULL
  );

2、查詢表結構  

              2.1、查看錶基本結構語句

                    格式1:DESCRIBE 表名/DESC 表名  這兩個的功能是一樣的,簡寫了單詞describe

                      DESCRIBE student;

2.2、檢視建立表的語句 

   格式:SHOW CREATE TABLE 表名

   SHOW CREATE TABLE student;

這樣顯示的格式很不好,看不清楚,所以有了下面這個語句

格式:SHOW CREATE TABLE 表名\G

SHOW CREATE TABLE student\G;

3、修改資料表      

修改資料表包括:對錶中欄位的增加、刪除、修改。 在這個裡面用的關鍵字為 ALTER

  3.1、修改表名

    格式:ALTER TABLE<舊錶名> RENAME[TO]<新表名>;

    將student表名改為student1(改完後在改回來)

    ALTER TABLE student RENAME TO student1;

3.2、修改表中的欄位名

  格式:ALTER TABLE<表名> CHANGE<舊欄位名><新欄位名><新資料型別>

  將student表中的name欄位名改為 username

  ALTER TABLE student CHANGE name username VARCHAR(30);

3.3、修改表中的資料型別

  格式:ALTER TABLE<表名> MODIFY<欄位名><資料型別>                     

  ALTER TABLE student MODIFY username VARCHAR(20);

解釋:只能修改欄位名的資料型別,但是其原理跟上面change做的事情一樣,這裡也有修改欄位名的過程,只不過修改後的欄位名和修改前的欄位名相同,但是資料型別不一樣。

3.4、修改欄位的排列位置

   方式1:ALTER TABLE<表名> MODIFY<欄位1><資料型別> FIRST|AFTER<欄位2>

   解釋:將欄位1的位置放到第一,或者放到指定欄位2的後面

   ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;

方式2:ALTER TABLE<表名> CHANGE<欄位1><欄位2><資料型別> FIRST|AFTER<欄位3> 

解釋:其實是一樣的,將是欄位2覆蓋欄位1,然後在進行排序

ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;

總結

CHANGE和MODIFY的區別?

原理都市一樣的,MODIFY只能修改資料型別,但是CHANGE能夠修改資料型別和欄位名,也就是說MODIFY是CHANGE的更具體化的一個操作。可能覺得用CHANGE只改變一個數據型別不太爽,就增加了一個能直接改資料型別的使用關鍵字MODIFY來操作。

3.5、新增欄位

格式:ALTER TABLE<表名稱> ADD<新欄位名><資料型別>[約束條件][FIRST|AFTER<已存在的表名>]

解釋:在一個特定位置增加一個新的欄位,如果不指定位置,預設是最後一個。

ALTER TABLE student ADD sex VARCHAR(11);

3.6、刪除欄位

格式:ALTER TABLE<表名稱> DROP<欄位名>;

ALTER TABLE student DROP sex;

3.7、刪除表的外來鍵約束

格式:ALTER TABLE<表名稱> DROP FOREIGN KEY<外來鍵約束名>

注意:外來鍵約束名 指的不是被外來鍵約束脩飾的欄位名,切記,而是我們在建立外來鍵約束關係時取的名字。

3.8、更改表的儲存引擎

格式:ALTER TABLE<表名> ENGINE=<更改後的儲存引擎名>

這個儲存引擎目前我自己也不太清楚,雖然知道有哪幾種引擎,但是稍微深入一點就不清楚了,所以打算留到日後在說。

4、刪除表

4.1、刪除無關聯表

格式:DROP TABLE<表名>;

ALTER TABLE student;

4.2、刪除被其他表關聯的主表

這個是比較重要的一點,在有外來鍵關聯關係的兩張表中,如果刪除主表,那麼是刪不掉的,並且會報錯。因為有張表依賴於他。那怎麼辦呢?針對這種情況,總共有兩種方法

1、先刪除你子表,然後在刪除父表,這樣就達到了刪除父表的目的,但是子表也要被刪除
2、先解除外來鍵關係,然後在刪除父表,這樣也能達到目的,並且保留了子表,只刪除我們不需要的父表。在3.7中就講解了如何刪除外來鍵關係。

四、總結

講了這麼多,但實際中,用到的並不是很多,特別是對錶結構的修改的操作,在實際開發中,一般資料庫表被定義下來了,就不會在修改了,發現數據庫表設計的不好,也是將表全部刪除,然後在重新建立過新表。但是在我們學習的過程中,這些操作還是很重要的,因為需要這些基礎來學習後面更深入的東西,不可能因為實際中不用,就不學這不學那,要相信,不管做什麼,那肯定是有意義的事情,可能那意義並不大,但是日後肯定會對我們有所幫助。