天天看點

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

                      

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

        2、進入mysql的兩種方式

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

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

                      

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

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

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

              SHOW DATABASES;

                      

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

        4、建立名為test_1的資料庫

              格式:CREATE DATABASE 資料庫名

              CREATE DATABASE test_1;

                      

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

       5、删除名為test_1的資料庫

              格式:DROP DATABASE 資料庫名

              DROP DATABASE test_1;

                      

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

      

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

三、資料表的基本操作

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

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

      對資料表的增(建立表)删(删除表)改(修改表字段)查(查詢表結構)。  注意:這裡的操作對象是表,對表的操作也就是表的結構,和表中的字段的操作(字段和記錄要厘清楚)

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

              USE test_1;

                    

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

      1、建立資料表

               格式:CREATE TABLE 資料表名(

                    字段名1  資料類型[列級别限制條件],

                    字段名2  資料類型[列級别限制條件],

                    字段名3  資料類型[列級别限制條件]

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

               解釋:1、[]中括号中的内容表示可以有可以沒有,2、列級别這個“列”一定要搞清楚說的是什麼,一張表中有行有列,清單示豎,行表示橫 3、限制條件後面會講到

          1.1、建立沒有限制的student表

               CREATE TABLE student(

                    id  INT(11),

                    name  VARCHAR(12),

                    age  INT(11)

               );

                       

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

                    注釋: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),

                                name VARCHAR(22) NOT NULL,

                                location VARCHAR(50),

                                PRIMARY KEY(id)

                            );

              1.2.4:唯一限制

                    UNIQUE  被唯一限制修飾了的字段,表示該字段中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處于該字段的值不能是一樣的。

                       CREATE TABLE tableA

                            (

                                id INT(11),

                                name VARCHAR(22) UNIQUE,

                                location VARCHAR(50),

                                PRIMARY KEY(id)

                            );

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

              1.2.5:預設限制

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

                   

                            CREATE TABLE table

                            (

                                id INT(11) PRIMARY KEY,

                                name VARCHAR(22) NOT NULL,

                                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;

                          

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

              2.2、檢視建立表的語句 

                    格式:SHOW CREATE TABLE 表名

                      SHOW CREATE TABLE student;

                          

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

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

                    格式:SHOW CREATE TABLE 表名\G

                      SHOW CREATE TABLE student\G;

                          

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

    

      3、修改資料表      

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

            3.1、修改表名

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

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

                    ALTER TABLE student RENAME TO student1;

                          

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

            3.2、修改表中的字段名

                  格式:ALTER TABLE<表名> CHANGE<舊字段名><新字段名><新資料類型>

                    将student表中的name字段名改為 username

                    ALTER TABLE student CHANGE name username VARCHAR(30);

                          

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

   

                   解釋:這個不僅能改變字段名,還能将字段的資料類型一并修改,也就是說,你可以單純的隻修改字段名,也可以單純的隻修改資料類型,也可以同時一起修改

            3.3、修改表中的資料類型

                    格式:ALTER TABLE<表名> MODIFY<字段名><資料類型>                     

                      ALTER TABLE student MODIFY username VARCHAR(20);

                          

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

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

            3.4、修改字段的排列位置

                   方式1:ALTER TABLE<表名> MODIFY<字段1><資料類型> FIRST|AFTER<字段2>

                      解釋:将字段1的位置放到第一,或者放到指定字段2的後面

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

                         

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

   

                  方式2:ALTER TABLE<表名> CHANGE<字段1><字段2><資料類型> FIRST|AFTER<字段3> 

                      解釋:其實是一樣的,将是字段2覆寫字段1,然後在進行排序

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

                         

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

  

                  總結

                     CHANGE和MODIFY的差別?

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

            3.5、添加字段

                  格式:ALTER TABLE<表名稱> ADD<新字段名><資料類型>[限制條件][FIRST|AFTER<已存在的表名>]

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

                    ALTER TABLE student ADD sex VARCHAR(11);

                         

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

            3.6、删除字段

                  格式:ALTER TABLE<表名稱> DROP<字段名>;

                    ALTER TABLE student DROP sex;

                         

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

 

            3.7、删除表的外鍵限制

                  格式:ALTER TABLE<表名稱> DROP FOREIGN KEY<外鍵限制名>

                     注意:外鍵限制名 指的不是被外鍵限制修飾的字段名,切記,而是我們在建立外鍵限制關系時取的名字。

            3.8、更改表的存儲引擎

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

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

      4、删除表

            4.1、删除無關聯表

                  格式:DROP TABLE<表名>;

                  ALTER TABLE student;

                         

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

 

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

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

                  1、先删除你子表,然後在删除父表,這樣就達到了删除父表的目的,但是子表也要被删除

                  2、先解除外鍵關系,然後在删除父表,這樣也能達到目的,并且保留了子表,隻删除我們不需要的父表。在3.7中就講解了如何删除外鍵關系。

四、總結

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