亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL學習之創建、修改、刪除表

發布時間:2020-06-09 21:31:22 來源:網絡 閱讀:2027 作者:hectorHe 欄目:數據庫

1、如何創建表結構?


  語法格式如下:    

   CREATE TABLE [IF NOT EXISTS] 表名 (
          字段1 數據類型 [完整性約束條件],
          字段2 數據類型 [完整性約束條件],
          ....
          字段n 數據類型 [完整性約束條件]
         );

  說明 :[IF NOT EXISTS] 為可選字段,加上此選項后如果創建的數據表已經存在,不會報錯,只會出現警告信息,而不會報錯,如果不加此選項會出現報錯信息。創建的表的名字不能為SQL語言的關鍵字如create、updata和order等,每個字段的結束后用逗號隔開,最后一個字段不需要加逗號。

  完整性約束條件也是可選字段,是對字段進行限制。MySQL中常用的完整性約束條件如下表所示:

表1 MySQL中的完整性約束條件

約束條件         說明
PRIMARY KEY表示該字段為該表的主鍵,可以唯一的標識對應的元組
FOREIGN KEY
標識該屬性為該表的外鍵,與之聯系的是父表的主鍵
NOT NULL 標識該字段不能為空
UNIQUE標識該字段是唯一的
AUTO_INCREMENT標識該屬性的值自動增加,MySQL的特色
DEFAULT可以為字段設置默認值

下面分小節說明一下,這幾個完整性約束條件的測試。


1.1 主鍵的測試 


   設置主鍵的目的是可以幫助MySQL以最快的速度查找表中的某一條信息。

   特點:主鍵必須唯一;

       任意兩條表中記錄主鍵的字段不能相同;

       主鍵必須是非空值;

       主鍵可以是單一字段,也可以是多個字段的組合。

   單個字段的主鍵測試

   語法規則:字段名 數據類型 PRIMARY KEY  

    實例:創建一張student表,設置stu_id為主鍵,實現代碼如下:
    
      CREATE TABLE IF NOT EXISTS student(
        stu_id INT PRIMARY KEY ,
        stu_name VARCHAR(20),
        stu_age INT,
        stu_sex ENUM('男','女','保密')
    );

   多個主鍵的測試

   語法規則:PRIMARY KEY(字段1,字段2,...字段n)

    實例:創建一張teacher表,設置主鍵為tea_id和course_id,實現代碼如下:
    
    CREATE TABLE IF NOT EXISTS teacher(
        tea_id TINYINT,
        name VARCHAR(20),
        course_id INT,
        PRIMARY KEY(tea_id,course_id)
        );

1.2 外鍵的測試


  語法規則如下:

   CONSTRAINT 外鍵別名 FOREIGN KEY(字段1.1 ,字段1.2,字段1.3, ...)

        REFERENCES 表名(字段2.1 ,字段2.2,...)

   說明:‘外鍵別名’是外鍵的代號;字段1中的參數列表是在子表中設置的外鍵,‘表名’參數是父表的名稱;‘字段2’參數列表是父表的主鍵。

   實例:新建一張grade表,設置stu_id為外鍵,與student表中的主鍵stu_id相關聯。

SQL代碼如下:

CREATE TABLE IF NOT EXISTS grade(
        id INT PRIMARY KEY,
        stu_id INT,
        stu_name VARCHAR(20),
        `數學` FLOAT,
        `英語` FLOAT,
        `語文` FLOAT,
        CONSTRAINT grade_fk FOREIGN KEY (stu_id)
            REFERENCES student(stu_id)        
);

注意:創建的子表的外鍵必須是父表的主鍵。并且兩者的數據類型必須是一致的,如果不一致,則不能創建成功。


1.3 非空約束的測試


  非空約束就是要求表中設置的字段的值不能為空值,如果用戶插入的字段值為空值時,此時數據庫就會出現報錯信息,不能正確的插入數據,‘NOT NULL’ 約束經常與“DEFAULT”約束條件聯合使用

  基本語法規則:

    字段 數據類型 NOT NULL

  實例:重新創建一張student2表,設置sex字段為非空。

 CREATE TABLE IF NOT EXISTS student2(
    id TINYINT PRIMARY KEY,
    name VARCHAR(20),
    sex ENUM('男','女','保密') NOT NULL,
    age TINYINT
);

1.4 測試唯一性約束   


  唯一性約束就是指所有記錄中的該字段的值不能夠重復出現,例如,每個人的×××號都是不同的,可以將×××字段設置為唯一性,當插入的數據出現兩個相同的×××號時,數據庫就會出現告警信息。簡單的說,唯一性約束條件要求所有記錄該字段的值不能重復出現。

  基本語法如下:

     字段 數據類型 UNIQUE

  實例:創建一張student3表,設置id字段的屬性為唯一性,SQL 代碼如下:

CREATE TABLE IF NOT EXISTS student3(
        id INT NOT NULL UNIQUE,
        name VARCHAR(20),
        age TINYINT
);

1.5 測試自增長


   AUTO_INCREMENT 是MySQL數據庫中一種特殊的約束條件,為表中插入的新紀錄自動生成一個唯一的ID。且一張表中只能有一個字段使用AUTO_INCREMENT約束,該字段必須為主鍵的一部分,被約束的字段的類型可以為任何整數類型(INT TINYINT SMALLINT MEDIUMINT BIGINT)默認情況下該字段從1開始自增長。

  基本語法:字段名 數據類型 AUTO_INCREMENT

  實例:新建一張表student4,設置字段id為自增長屬性。

CREATE TABLE IF NOT EXISTS student4(
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30) ,
        age TINYINT
);

1.6 測試默認值


  在創建表時可以為表中的字段添加默認值,如果插入數據時沒有為這個字段插入數據,則這個字段就會為自動添加一個默認值。通過DEFAULT關鍵字來設置默認值的。

   基本語法:字段 數據類型 DEFAULT 默認值

   實例:創建一張表student5,位表中字段age和sex設置默認值,SQL代碼如下:

CREATE TABLE IF NOT EXISTS student5(
        id INT PRIMARY KEY ,
        name VARCHAR(20) NOT NULL,
        age TINYINT DEFAULT '20',
        sex ENUM('男','女','保密') DEFAULT '男'
  );

2、如何查詢表結構?


  數據庫定義完成后,可以通過查詢語句來查看已經定義好的數據庫,經常使用的查詢語句為

DESCRIBE和SHOW CREATE TABLE通過這兩個語句可以查看表的字段名、數據類型和完整性約束條件。


2.1 測試DESCRIBE語句


   語法結構: DESCRIBE 表名;

   實例:查詢一下剛剛建立好的student表結構。

 Thu Dec 08 00:58:40 2016localhosttest_db>DESCRIBE student;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| stu_id   | int(11)                | NO   | PRI | NULL    |       |
| stu_name | varchar(20)            | YES  |     | NULL    |       |
| stu_age  | int(11)                | YES  |     | NULL    |       |
| stu_sex  | enum('男','女','保密') | YES  |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

DESCRIBE 可以簡寫為DESC,代碼運行如下:

Thu Dec 08 00:59:02 2016localhosttest_db>DESC student;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| stu_id   | int(11)                | NO   | PRI | NULL    |       |
| stu_name | varchar(20)            | YES  |     | NULL    |       |
| stu_age  | int(11)                | YES  |     | NULL    |       |
| stu_sex  | enum('男','女','保密') | YES  |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

從查詢結果中,可以看到字段名(Field)、數據類型(Type)、是否為空(null)、是否為主外鍵(key)、默認值(Default)、額外信息(Extra)。


2.2 測試 SHOW CREATE TABLE 語句


   通過SHOW CREATE TABLE語句可以查看更加詳細的信息,除了能夠查詢字段名、數據類型、完整性約束條件信息外,還可以查看表的存儲引擎和使用的字符編碼。

   基本語法: SHOW CREATE TABLE 表名;

   實例:要查看剛剛建好的student1的表結構,SQL語句顯示如下:

Thu Dec 08 01:12:27 2016localhosttest_db>SHOW CREATE TABLE student2 \G
*************************** 1. row ***************************
       Table: student2
Create Table: CREATE TABLE `student2` (
  `id` tinyint(4) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `sex` enum('男','女','保密') NOT NULL,
  `age` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

注:后面加\G結尾可以使得顯示的結果更加直觀。


3、如何修改表?


  數據庫中的表建立好以后,可以通過SQL語句修改已經建立好的數據表。MySQL通過ALTER TABLE 語句修改表中的元素。例如,可以修改表名、修改字段的數據類型、修改字段名、增加字段、刪除字段、修改字段的排列位置、更改默認的存儲引擎和刪除表的外鍵約束等。


3.1 修改表名


   通過表名在一個數據庫下是唯一確定的,不可能存在兩個相同的數據表名。有時候為了實際需要,我們需要更改數據表的名字,重新建立一張一樣的表費時費力,這時我們可以通過SQL語句ALTER TABLE修改表的名字。

  基本語法:ALTER TABLE 舊的表名 RENAME [TO |AS] 新表名;

  實例:我們要把表student表名改為stu,把student2表名改為stu1,把student3表名改為stu2。SQL代碼如下:

--先查看一下庫中都有那些表
Thu Dec 08 01:11:32 2016localhosttest_db>SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| grade             |
| student           |
| student2          |
| student3          |
| student4          |
| student5          |
| teacher           |
+-------------------+
7 rows in set (0.00 sec)
-- 執行SQL 代碼
ALTER TABLE student RENAME TO stu;
ALTER TABLE student2 RENAME AS stu1;
ALTER TABLE student3 RENAME stu2;
-- 通過SHOW TABLES語句查看是否更改成功

Thu Dec 08 01:33:59 2016localhosttest_db>SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| grade             |
| stu               |
| stu1              |
| stu2              |
| student4          |
| student5          |
| teacher           |
+-------------------+
7 rows in set (0.00 sec)

說明:[TO|AS]為可選參數,可加可不加。


3.2 修改字段的數據類型


  用ALTER TABLE 語句可以修改字段的數據類型,基本語法如下:

  ALTER TABLE 表名 MODIFY 屬性名 數據類型;

  實例:將stu數據表中的name 字段的數據類型修改為VARCHAR(30),SQL代碼如下:

--先查看一下stu_name 現有的數據類型
Thu Dec 08 01:34:09 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| stu_id   | int(11)                | NO   | PRI | NULL    |       |
| stu_name | varchar(20)            | YES  |     | NULL    |       |
| stu_age  | int(11)                | YES  |     | NULL    |       |
| stu_sex  | enum('男','女','保密') | YES  |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

-- 執行SQL代碼,將stu_name的數據類型修改為VARCHAR(30)

Thu Dec 08 01:44:53 2016localhosttest_db>ALTER TABLE stu MODIFY stu_name VARCHAR(30);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

-- 查詢修改后的stu_name的數據類型

Thu Dec 08 01:45:55 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| stu_id   | int(11)                | NO   | PRI | NULL    |       |
| stu_name | varchar(30)            | YES  |     | NULL    |       |
| stu_age  | int(11)                | YES  |     | NULL    |       |
| stu_sex  | enum('男','女','保密') | YES  |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

 

3.3 修改表中的字段名


   有時候我們需要修改表的字段名,通過ALTER TABLE 語句可以修改表的字段名。

   基本語法如下:

    ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據屬性;

   實例1:修改表stu中的字段'stu_name'改為name,不改變他的數據類型。SQL語句實現如下:

-- 先查看一下stu的表結構

Thu Dec 08 20:54:26 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| stu_id   | int(11)                | NO   | PRI | NULL    |       |
| stu_name | varchar(30)            | YES  |     | NULL    |       |
| stu_age  | int(11)                | YES  |     | NULL    |       |
| stu_sex  | enum('男','女','保密') | YES  |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


-- 執行ALTER TABLE 語句修改字段的名字
Thu Dec 08 20:54:40 2016localhosttest_db>ALTER TABLE stu CHANGE stu_name name VARCHAR(30);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 20:56:56 2016localhosttest_db>DESC stu;
+---------+------------------------+------+-----+---------+-------+
| Field   | Type                   | Null | Key | Default | Extra |
+---------+------------------------+------+-----+---------+-------+
| stu_id  | int(11)                | NO   | PRI | NULL    |       |
| name    | varchar(30)            | YES  |     | NULL    |       |
| stu_age | int(11)                | YES  |     | NULL    |       |
| stu_sex | enum('男','女','保密') | YES  |     | NULL    |       |
+---------+------------------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

 

 實例2:修改字段名同時修改字段的數據類型,將stu表中的字段'stu_id'修改為'id',數據類型變為TINYINT,約束條件仍為主鍵。將'stu_age'改為‘age’,數據類型為TINYINT,完整性約束條件設為‘非空’,

字段‘stu_sex’改為sex 數據類型不變,完整性約束條件改為‘DEFAULT '保密'’。執行代碼如下:

Thu Dec 08 21:32:00 2016localhosttest_db>DESC stu;
+---------+------------------------+------+-----+---------+-------+
| Field   | Type                   | Null | Key | Default | Extra |
+---------+------------------------+------+-----+---------+-------+
| stu_id  | int(11)                | NO   | PRI | 0       |       |
| name    | varchar(30)            | YES  |     | NULL    |       |
| stu_age | int(11)                | YES  |     | NULL    |       |
| stu_sex | enum('男','女','保密') | YES  |     | NULL    |       |
+---------+------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
Thu Dec 08 21:32:12 2016localhosttest_db>ALTER TABLE stu CHANGE stu_id id TINYINT primary key;
ERROR 1068 (42000): Multiple primary key defined
-- 需要注意的是,修改主鍵名時,后面不需要添加 PRIMARY KEY 關鍵字,否則會出現以上報錯信息。

Thu Dec 08 21:33:03 2016localhosttest_db>ALTER TABLE stu CHANGE stu_id id TINYINT ;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 21:34:35 2016localhosttest_db>ALTER TABLE stu CHANGE stu_age age TINYINT;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 21:35:31 2016localhosttest_db>ALTER TABLE stu CHANGE stu_sex sex ENUM ('男','女','保密') DEFAULT '保密';
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 21:37:29 2016localhosttest_db>DESC stu;
+-------+------------------------+------+-----+---------+-------+
| Field | Type                   | Null | Key | Default | Extra |
+-------+------------------------+------+-----+---------+-------+
| id    | tinyint(4)             | NO   | PRI | 0       |       |
| name  | varchar(30)            | YES  |     | NULL    |       |
| age   | tinyint(4)             | YES  |     | NULL    |       |
| sex   | enum('男','女','保密') | YES  |     | 保密    |       |
+-------+------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
-- 最后,查詢一下表結構,可以看到表中的字段已經修改為我們需要的字段類型了。


3.4 為已經建好的表增加字段


  對于已經建好的數據表來說,如果我們想對表進行修改,為表中再添加一個新的字段,使用ALTER TABLE 語句可以為表中增加一個新的字段。它的基本語法如下:

  ALTER TABLE 表名 ADD 新的字段名 數據類型 [完整性約束條件] [FIRST|AFTER 已有的字段名];

 實例1:為stu表增加一個新的字段 Tel 不需要添加任何的完整性約束條件。SQL代碼如下:

-- 先查看一下表結構

Thu Dec 08 21:37:29 2016localhosttest_db>DESC stu;
+-------+------------------------+------+-----+---------+-------+
| Field | Type                   | Null | Key | Default | Extra |
+-------+------------------------+------+-----+---------+-------+
| id    | tinyint(4)             | NO   | PRI | 0       |       |
| name  | varchar(30)            | YES  |     | NULL    |       |
| age   | tinyint(4)             | YES  |     | NULL    |       |
| sex   | enum('男','女','保密') | YES  |     | 保密    |       |
+-------+------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

-- 為表增加一個新的字段tel
Thu Dec 08 21:37:39 2016localhosttest_db>ALTER TABLE stu ADD tel CHAR(11);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

-- 查詢一下表結構,可以看到表stu增加的一個新的字段tel

Thu Dec 08 21:55:42 2016localhosttest_db>DESC stu;
+-------+------------------------+------+-----+---------+-------+
| Field | Type                   | Null | Key | Default | Extra |
+-------+------------------------+------+-----+---------+-------+
| id    | tinyint(4)             | NO   | PRI | 0       |       |
| name  | varchar(30)            | YES  |     | NULL    |       |
| age   | tinyint(4)             | YES  |     | NULL    |       |
| sex   | enum('男','女','保密') | YES  |     | 保密    |       |
| tel   | char(11)               | YES  |     | NULL    |       |
+-------+------------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 實例2:為stu表添加一個字段address ,設置完整性約束條件為‘非空’。SQL代碼如下:

 

Thu Dec 08 21:55:49 2016localhosttest_db>ALTER TABLE stu ADD address VARCHAR(20) NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:00:47 2016localhosttest_db>DESC stu;
+---------+------------------------+------+-----+---------+-------+
| Field   | Type                   | Null | Key | Default | Extra |
+---------+------------------------+------+-----+---------+-------+
| id      | tinyint(4)             | NO   | PRI | 0       |       |
| name    | varchar(30)            | YES  |     | NULL    |       |
| age     | tinyint(4)             | YES  |     | NULL    |       |
| sex     | enum('男','女','保密') | YES  |     | 保密    |       |
| tel     | char(11)               | YES  |     | NULL    |       |
| address | varchar(20)            | NO   |     | NULL    |       |
+---------+------------------------+------+-----+---------+-------+
6 rows in set (0.02 sec)

 測試3:在表的第一個位置增加字段,在stu表中增加num字段,其SQL代碼如下: 

Thu Dec 08 22:00:53 2016localhosttest_db>ALTER TABLE stu ADD num TINYINT FIRST;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:28:24 2016localhosttest_db>DESC stu;
+---------+------------------------+------+-----+---------+-------+
| Field   | Type                   | Null | Key | Default | Extra |
+---------+------------------------+------+-----+---------+-------+
| num     | tinyint(4)             | YES  |     | NULL    |       |
| id      | tinyint(4)             | NO   | PRI | 0       |       |
| name    | varchar(30)            | YES  |     | NULL    |       |
| age     | tinyint(4)             | YES  |     | NULL    |       |
| sex     | enum('男','女','保密') | YES  |     | 保密    |       |
| tel     | char(11)               | YES  |     | NULL    |       |
| address | varchar(20)            | NO   |     | NULL    |       |
+---------+------------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

 測試4:在指定位置之后添加一個字段。

  

-- 在stu表的tel 字段后面添加一個新的字段‘birthday’
Thu Dec 08 22:28:38 2016localhosttest_db>ALTER TABLE stu ADD birthday DATE AFTER tel;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:34:52 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| num      | tinyint(4)             | YES  |     | NULL    |       |
| id       | tinyint(4)             | NO   | PRI | 0       |       |
| name     | varchar(30)            | YES  |     | NULL    |       |
| age      | tinyint(4)             | YES  |     | NULL    |       |
| sex      | enum('男','女','保密') | YES  |     | 保密    |       |
| tel      | char(11)               | YES  |     | NULL    |       |
| birthday | date                   | YES  |     | NULL    |       |
| address  | varchar(20)            | NO   |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
8 rows in set (0.01 sec)


3.5 刪除字段


   刪除字段是指我們可以刪除表中已經定義好的字段。使用ALTER TABLE 可以實現將表中的某個定義好的字段進行刪除操作。其基本語法如下:

   ALTER TABLE 表名 DROP 字段名;

   例如,表stu中的字段num我們不在需要,現在需要對它進行刪除操作,SQL代碼如下:

Thu Dec 08 22:42:31 2016localhosttest_db>ALTER TABLE stu DROP num;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:42:53 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| id       | tinyint(4)             | NO   | PRI | 0       |       |
| name     | varchar(30)            | YES  |     | NULL    |       |
| age      | tinyint(4)             | YES  |     | NULL    |       |
| sex      | enum('男','女','保密') | YES  |     | 保密    |       |
| tel      | char(11)               | YES  |     | NULL    |       |
| birthday | date                   | YES  |     | NULL    |       |
| address  | varchar(20)            | NO   |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
7 rows in set (0.01 sec)


3.6 修改字段的排列位置


  使用ALTER TABLE 語句也可以修改表中字段的排列位置,基本語法如下:

  ALTER TABLE 表名 MODIFY 字段名1 數據類型 FIRST|AFTER 字段名2;

 說明:字段名1 是需要改變位置的字段名稱;“數據類型”是字段1的數據類型;FIRST 參數是將字段1改變到第一個位置;“AFTER 字段名2”參數是將字段1加入到字段2的后面。

 

--測試將stu表中的name字段插入到第一個位置,將字段‘sex’修改到字段‘tel’的后面
ALTER TABLE stu MODIFY name VARCHAR(30) FIRST;
ALTER TABLE stu MODIFY sex ENUM('男','女','保密')  AFTER tel;

Thu Dec 08 22:43:08 2016localhosttest_db>ALTER TABLE stu MODIFY name VARCHAR(30) FIRST;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:56:00 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| name     | varchar(30)            | YES  |     | NULL    |       |
| id       | tinyint(4)             | NO   | PRI | 0       |       |
| age      | tinyint(4)             | YES  |     | NULL    |       |
| sex      | enum('男','女','保密') | YES  |     | 保密    |       |
| tel      | char(11)               | YES  |     | NULL    |       |
| birthday | date                   | YES  |     | NULL    |       |
| address  | varchar(20)            | NO   |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
Thu Dec 08 22:56:12 2016localhosttest_db>ALTER TABLE stu MODIFY sex ENUM('男','女','保密')  AFTER tel;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 22:56:26 2016localhosttest_db>DESC stu;
+----------+------------------------+------+-----+---------+-------+
| Field    | Type                   | Null | Key | Default | Extra |
+----------+------------------------+------+-----+---------+-------+
| name     | varchar(30)            | YES  |     | NULL    |       |
| id       | tinyint(4)             | NO   | PRI | 0       |       |
| age      | tinyint(4)             | YES  |     | NULL    |       |
| tel      | char(11)               | YES  |     | NULL    |       |
| sex      | enum('男','女','保密') | YES  |     | NULL    |       |
| birthday | date                   | YES  |     | NULL    |       |
| address  | varchar(20)            | NO   |     | NULL    |       |
+----------+------------------------+------+-----+---------+-------+
7 rows in set (0.02 sec)

  

3.7 更改表的存儲引擎


  MySQL中常用的存儲引擎有三個:InnoDB、MyISAM、MEMORY等。通過ALTER TABLE 語句可以更改表的存儲引擎類型。其語法結構如下:

  ALTER TABLE 表名 ENGINE=存儲引擎名;

 例如,將stu表的存儲引擎改為 MyISAM,SQL 代碼如下:

Thu Dec 08 22:56:34 2016localhosttest_db>ALTER TABLE stu ENGINE=MyISAM;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 23:03:35 2016localhosttest_db>SHOW CREATE TABLE stu \G
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `name` varchar(30) DEFAULT NULL,
  `id` tinyint(4) NOT NULL DEFAULT '0',
  `age` tinyint(4) DEFAULT NULL,
  `tel` char(11) DEFAULT NULL,
  `sex` enum('男','女','保密') DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `address` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.05 sec)

 注意:如果表中已經有很多數據,不建議更改表的存儲引擎,如果更改了存儲引擎可能會發生一些意料之外的影響。


3.8 刪除表的外鍵的約束


   外鍵是一個特殊的字段,它將某一表與父表建立關聯關系。 在創建表的時候外鍵約束就已經設定好了,如果想要去除與父表之間的關聯,可以用ALTER TABLE 語句刪除外鍵的約束。基本語法如下:

   ALTER TABLE 表名 DROP FOREIGN KEY 外鍵別名;

-- 創建表grade 設置stu_num為表student主鍵的外鍵
Thu Dec 08 23:36:16 2016localhosttest_db>CREATE TABLE IF NOT EXISTS grade(
    -> 	id INT PRIMARY KEY,
    ->         stu_num INT ,
    ->         english FLOAT,
    ->  	math   FLOAT,
    ->       CONSTRAINT g_fk FOREIGN KEY (stu_num)
    ->        REFERENCES student(id)
    -> );
Query OK, 0 rows affected (0.00 sec)

-- 查看一下grade的表結構

Thu Dec 08 23:40:53 2016localhosttest_db>SHOW CREATE TABLE grade;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| grade | CREATE TABLE `grade` (
  `id` int(11) NOT NULL,
  `stu_num` int(11) DEFAULT NULL,
  `english` float DEFAULT NULL,
  `math` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `g_fk` (`stu_num`),
  CONSTRAINT `g_fk` FOREIGN KEY (`stu_num`) REFERENCES `student` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

-- 刪除外鍵約束

Thu Dec 08 23:41:18 2016localhosttest_db>ALTER TABLE grade DROP FOREIGN KEY g_fk;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 23:42:45 2016localhosttest_db>SHOW  CREATE TABLE grade;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                       |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| grade | CREATE TABLE `grade` (
  `id` int(11) NOT NULL,
  `stu_num` int(11) DEFAULT NULL,
  `english` float DEFAULT NULL,
  `math` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `g_fk` (`stu_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


4.刪除表


  刪除表時指刪除已經存在的數據表。刪除表同時也會刪除表中的所有數據,因此,刪除前應做好必要的準備。MySQL中使用 DROP TABLE 語句來刪除表。對于一些表來說,創建表的時候存在著外鍵的約束,一些表成為了與之相聯系的表的父表。要刪除這些父表,情況就比較復雜了。


4.1 刪除沒有被關聯的普通表

   直接使用DROP TABLE語句刪除沒有被關聯的普通表,使用語法如下:

   DROP TABLE 表名;

   例如,要刪除student5表,SQL 語句如下:

-- 先查看一下student5的表結構
Thu Dec 08 23:22:02 2016localhosttest_db>DESC student5;
+-------+------------------------+------+-----+---------+-------+
| Field | Type                   | Null | Key | Default | Extra |
+-------+------------------------+------+-----+---------+-------+
| id    | int(11)                | NO   | PRI | NULL    |       |
| name  | varchar(20)            | NO   |     | NULL    |       |
| age   | tinyint(4)             | YES  |     | 20      |       |
| sex   | enum('男','女','保密') | YES  |     | 男      |       |
+-------+------------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

-- 執行刪除代碼

Thu Dec 08 23:23:46 2016localhosttest_db>DROP TABLE student5;
Query OK, 0 rows affected (0.00 sec)

Thu Dec 08 23:24:05 2016localhosttest_db>DESC student5;
ERROR 1146 (42S02): Table 'test_db.student5' doesn't exist

4.2 刪除有外鍵關聯的表

  

  要想刪除一個帶有外鍵關聯的表,首先,需要刪除表的外鍵,然后才能刪除表結構,SQL語句如下:


-- 先創建一個grade表,字段stu_num為表student主鍵的外鍵
Thu Dec 08 23:48:16 2016localhosttest_db>CREATE TABLE IF NOT EXISTS grade(
    -> 	id INT PRIMARY KEY,
    ->         stu_num INT ,
    ->         english FLOAT,
    ->  	math   FLOAT,
    ->       CONSTRAINT g_fk FOREIGN KEY (stu_num)
    ->        REFERENCES student(id)
    -> );
Query OK, 0 rows affected (0.02 sec)

-- 查看一下grade的表結構

Thu Dec 08 23:48:51 2016localhosttest_db>SHOW CREATE TABLE grade \G
*************************** 1. row ***************************
       Table: grade
Create Table: CREATE TABLE `grade` (
  `id` int(11) NOT NULL,
  `stu_num` int(11) DEFAULT NULL,
  `english` float DEFAULT NULL,
  `math` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `g_fk` (`stu_num`),
  CONSTRAINT `g_fk` FOREIGN KEY (`stu_num`) REFERENCES `student` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

-- 執行一下刪除命令,刪除表student,發現不能執行刪除命令

Thu Dec 08 23:49:19 2016localhosttest_db>DROP TABLE student;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

-- 執行命令,刪除一下表grade的外鍵約束

Thu Dec 08 23:49:39 2016localhosttest_db>ALTER TABLE grade DROP FOREIGN KEY g_fk;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Thu Dec 08 23:50:46 2016localhosttest_db>SHOW CREATE TABLE grade \G
*************************** 1. row ***************************
       Table: grade
Create Table: CREATE TABLE `grade` (
  `id` int(11) NOT NULL,
  `stu_num` int(11) DEFAULT NULL,
  `english` float DEFAULT NULL,
  `math` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `g_fk` (`stu_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

-- 再次執行一下刪除命令,發現成功刪除了student表

Thu Dec 08 23:50:54 2016localhosttest_db>DROP TABLE student;
Query OK, 0 rows affected (0.02 sec)
Thu Dec 08 23:51:13 2016localhosttest_db>SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| animalinfo        |
| grade             |
| stu               |
| teacher           |
+-------------------+
4 rows in set (0.00 sec)


  


   










向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌兰察布市| 武陟县| 灵川县| 双桥区| 南漳县| 昌黎县| 石屏县| 洱源县| 枣庄市| 鄂托克前旗| 固阳县| 靖西县| 柳林县| 天门市| 水富县| 西青区| 临颍县| 绥阳县| 皮山县| 砀山县| 光山县| 邵阳市| 大余县| 双柏县| 营山县| 丰镇市| 清河县| 阿尔山市| 进贤县| 全州县| 沈丘县| 望都县| 临泽县| 彭州市| 富阳市| 林西县| 馆陶县| 板桥市| 广安市| 黑龙江省| 丽江市|