MariaDB 表的基本操作


在數據庫中,數據表是數據庫中最重要、最基本的操作對象,是數據存儲的基本單位,數據表被定義為列的集合,數據在表中是按照行和列的格式來存儲的、每一行代表一條唯一的記錄,每一列代表記錄中的一個域.

創建數據表

在創建完數據庫之后,接下來的工作就是創建數據表.所謂創建數據表,指的是在已經創建好的數據庫中建立新表,創建數據表的過程是規定數據列的屬性的過程,同時也是實施數據完整性(包括實體完整性、引用完整性和域完整性等)約束的過程,本節將介紹創建數據表的語法形式、如何添加主鍵約束、外鍵約束、非空約束等.

在創建表之前,應使用use <數據庫名稱>,進入一個數據庫,以下是一個數據表創建的語法規則:

create table <表名>
(
          字段名1,數據類型 [列級別約束條件] [默認值],
          字段名2,數據類型 [列級別約束條件] [默認值],
          字段名3,數據類型 [列級別約束條件] [默認值],
......
           [表級別約束條件]
);

使用create table 創建表,必須指定以下信息:

1.要創建的表名稱,不區分大小寫,且不能使用SQL語句中的關鍵字
2.數據表中的每一個列(字段),的名稱和數據類型,如果創建多列,要用逗號隔開

實例: 根據以下表結構信息,創建一個員工表tb_user,並查看規則.

字段名稱 數據類型 備注
id INT(11) 員工編號
name VARCHAR(25) 員工名稱
deptId INT(11) 所在部門編號
salary FLOAT 工資

1.首先我們先來創建一個lyshark的數據庫,用來存儲表結構,並指定采用utf8編碼.

MariaDB [(none)]> create database lyshark charset utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lyshark            |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)

MariaDB [(none)]> 

2.進入lyshark這個數據庫,並更具題目要求創建這個表結構.

MariaDB [(none)]> use lyshark
Database changed

MariaDB [lyshark]> create table tb_user
    -> (
    -> id int(11),
    -> name varchar(25),
    -> deptId int(11),
    -> salary float
    -> );
Query OK, 0 rows affected (0.01 sec)

3.查看這個數據表,已經創建成功啦.

MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tb_user           |
+-------------------+
1 row in set (0.00 sec)

MariaDB [lyshark]> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MariaDB [lyshark]>

◆使用主鍵約束◆

主鍵,又稱為主碼,是表中一列或多列的組合.主鍵約束(Primary Key Constraint)要求主鍵列的數據唯一,並且不允許為空.主鍵能夠唯一地標識表中的一條記錄,可以結合外鍵來定義不同數據表之間的關系,並且可以加快數據庫查詢的速度.主鍵和記錄之間的關系如同身份證和人之間的關系,它們之間是一一對應的.主鍵分為兩種類型:單字段主鍵和多字段聯合主鍵.

定義單字段主鍵

實例: 定義一個數據表tab_1id字段定義為主鍵primary key,其SQL語句的寫法如下:

MariaDB [lyshark]> create table tab_1
    -> (
    -> id int(10) primary key,
    -> name varchar(20),
    -> deptid int(10),
    -> salary float
    -> );
Query OK, 0 rows affected (0.01 sec)

MariaDB [lyshark]>

查看一下表結構,會發現在id字段上多出來一個key,這就把它定義成主鍵了.

MariaDB [lyshark]> desc tab_1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(10)     | NO   | PRI | NULL    |       |         #注意此處key列表,出現了主鍵標識
| name   | varchar(20) | YES  |     | NULL    |       |
| deptid | int(10)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

在定義主鍵約束時,還可以在表結構定義完成以后,在最后指定主鍵id.

MariaDB [lyshark]> create table tab_2
    -> (
    -> id int(10),
    -> name varchar(20),
    -> deptid int(10),
    -> salary float,
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.01 sec)

定義多字段主鍵

實例: 定義數據表tab_3,將name字段與deptid字段組合在一起,成為tab_3的多字段聯合主鍵.

MariaDB [lyshark]> create table tab_3 
    -> (
    -> name varchar(20),
    -> deptid int(10),
    -> salary float,
    -> primary key(name,deptid)
    -> );
Query OK, 0 rows affected (0.00 sec)

查看一下結構吧:

MariaDB [lyshark]> desc tab_3;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(20) | NO   | PRI |         |       |
| deptid | int(10)     | NO   | PRI | 0       |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

◆使用外鍵約束◆

外鍵用來在兩個表的數據之間建立鏈接,它可以是一列或者多列.一個表可以有一個或多個外鍵,外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空值,則每一個外鍵值必須等於另一個表中主鍵的某個值.

外鍵:首先它是表中的一個字段,它可以不是本表的主鍵,但對應另外一個表的主鍵.外鍵主要作用是保證數據引用的完整性,定義外鍵后,不允許刪除在另一個表中具有關聯關系的行.外鍵的作用是保持數據的一致性、完整性.

主表(父表):兩個具有關聯關系的表,相關聯字段中,主鍵所在的那個表既是主表.
從表(子表):兩個具有關聯關系的表,相關聯字段中,外鍵所在的那個表既是從表.

創建外鍵的語法規則:

[constraint <外鍵名>] foreign key 字段名1 [,字段名2,......]

peferences <主表名> 主鍵列1 [,主鍵列2,....]

實例: 創建一個tb_dept指定為主表,把tb_emp指定為從表,將兩表指定字段相關聯.

1.首先創建一個部門表tb_dept,表結構如下所示.

字段名稱 數據類型 備注
id INT(11) 部門編號
name VARCHAR(22) 部門名稱
location VARCHAR(50) 部門位置
MariaDB [lyshark]> create table tb_dept
    -> (
    -> id int(11) primary key,
    -> name varchar(22) NOT NULL,
    -> location varchar(50)
    -> );
Query OK, 0 rows affected (0.01 sec)

2接着定義數據表tb_emp,讓它的deptid字段,作為外鍵關聯到tb_dept的主鍵id字段上,SQL語句如下:

MariaDB [lyshark]> create table tb_emp
    -> (
    -> id int(10) primary key,
    -> name varchar(25),
    -> deptid int(10),
    -> salary float,
    -> constraint fk_empdept foreign key(deptid) references tb_dept(id)
    -> );
Query OK, 0 rows affected (0.00 sec)

以上語句執行成功后,在表tb_emp上添加了名稱為fk_empdept的外鍵約束,外鍵字段為deptid,其依賴於tb_dept表中的,主鍵id.

查看一下結構,理解下吧:

MariaDB [lyshark]> desc tb_dept;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> desc tb_emp;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(10)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptid | int(10)     | YES  | MUL | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MariaDB [lyshark]> 

◆使用非空約束◆

非空約束(Not Null Constraint)指定字段的值不能為空,對於使用非空約束的字段,如果用戶不給指定數值,則報錯.

非空約束語法規則:

字段名 數據類型  not null

實例:定義數據表tab_4,指定員工名稱不能為空,SQL語句如下,執行后則name字段將不能為空:

MariaDB [lyshark]> create table tab_4
    -> (
    -> id int(10) primary key,
    -> name varchar(20) not null,
    -> salary float
    -> );
Query OK, 0 rows affected (0.00 sec)

### ◆使用唯一約束◆

唯一性約束(Unique Constraint):要求該列唯一,允許為空,但只能出現一個空值,唯一約束可以確保數據不重復.

在定義是完列表之后直接指定唯一約束,語法如下:

字段名 數據類型 unique

實例1: 創建tab_5表,並指定字段name為唯一約束,SQL語句如下:

MariaDB [lyshark]> create table tab_5
    -> (
    -> id int(10) primary key,
    -> name varchar(20) unique,
    -> location varchar(50)
    -> );
Query OK, 0 rows affected (0.01 sec)

實例2: 還可以在定義完字段,以后來指定約束條件.

MariaDB [lyshark]> create table tab_6
    -> (
    -> id int(10) primary key,
    -> name varchar(20),
    -> location varchar(50),
    -> constraint sth unique(name)
    -> );
Query OK, 0 rows affected (0.00 sec)

uniqueprimary key區別:一個表可以有多個字段聲明成unique,但只能有一個primary key聲明.

◆使用默認約束◆

默認約束(Default Constraint)也就是指定默認值,如果不填寫則自動使用默認值.

默認約束語法規則如下:

字段名 數據類型 default 默認值

實例: 定義一個表名稱tab_7並指定salary自動默認工資為500,如不填寫此項默認是500.

MariaDB [lyshark]> create table tab_7
    -> (
    -> id int(10) primary key,
    -> name varchar(20) not null,
    -> salary float default 500
    -> );
Query OK, 0 rows affected (0.00 sec)

◆設置表自增長◆

在數據庫應用中,經常希望在每次插入新記錄時,系統自動生成字段的主鍵值.可以通過為表主鍵添加AUTO_INCREMENT關鍵字來實現.默認的,在MySQL中AUTO_INCREMENT的初始值是1,每次新增一條記錄,字段值自動增加1,一個表只能有一個字段使用AUTO_INCREMENT約束,且字段必須為主鍵的一部分.

設置表的自增長語法規則如下:

字段名 數據類型 auto_increment

實例: 定義一個數據表tab_8指定id員工編號為自動增長模式,SQL語句如下:

MariaDB [lyshark]> create table tab_8
    -> (
    -> id int(10) primary key auto_increment,
    -> name varchar(20) not null,
    -> salary float
    -> );
Query OK, 0 rows affected (0.01 sec)

此處我們插入一些數據,但是不寫ID編號這一欄.

MariaDB [lyshark]> insert into tab_8(name,salary) values('lyshark',1000),('admin',200);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

接着查看一下插入的數據,你會發現ID這一個字段已經自動填充上了.

MariaDB [lyshark]> select * from tab_8;
+----+---------+--------+
| id | name    | salary |
+----+---------+--------+
|  1 | lyshark |   1000 |
|  2 | admin   |    200 |
|  3 | lyshark |   1000 |
|  4 | admin   |    200 |
+----+---------+--------+
4 rows in set (0.00 sec)

## 查詢表結構

使用SQL語句創建好數據表之后,可以查看表結構的定義,以確認表的定義是否正確.在MySQL中,查看表結構可以使用describeshow create table語句.

◆desc查詢表結構◆

先來看一下語法格式:

describe 表名稱; or desc 表名稱;

實例: 查詢tab_8數據表的表結構.

MariaDB [lyshark]> describe tab_8;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | NO   |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> desc tab_8;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | NO   |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> 

◆show查詢表結構◆

先來看一下語法格式:

show create table <表名> \G

實例: 顯示tab_8表的詳細數據信息.

MariaDB [lyshark]> show create table tab_8 \G

*************************** 1. row ***************************
       Table: tab_8
Create Table: CREATE TABLE `tab_8` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

注釋: 當然也可以查詢一個數據庫啦,比如查詢lyshark這個數據庫的創建信息.

MariaDB [lyshark]> show create database lyshark;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| lyshark  | CREATE DATABASE `lyshark` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

## 修改數據表

修改表指的是修改數據庫己經存在的數據表的結構.MySQL使用alter table語句修改表,常用的修改表的操作有:修改表名、修改字段數據類型或字段名、增加和刪除字段、修改字段的排列位置、更改表的存儲引擎、刪除表的外鍵約束等.

◆修改表名稱◆

如果一個數據表名稱需要修改腫莫辦,MySQL中是通過alter table語句來實現表名稱的修改的,語法規則如下:

alter table <舊表名> rename [to] <新表名>;

實例: 將數據表tab改名成tab_lyshark.

MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab               |
| tab_8             |
+-------------------+
2 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab rename to tab_lyshark;      #將tab表改成tab_lyshark
Query OK, 0 rows affected (0.00 sec)

MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab               |
| tab_lyshark       |
+-------------------+
2 rows in set (0.00 sec)

◆修改字段名◆

上面的小例子是修改表的名稱,當我們想要修改字段名稱時,可以使用以下SQL語句:

alter table <表名> change <舊字段名> <新字段名> <新數據類型>

#舊字段名:指修改前的字段名    新字段名:指修改后的字段名    新數據類型:指修改后的數據類型 

實例: 將表tab_testsalary字段名改為lyshark並修改數據類型為varchar(30).

MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(40) | YES  |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test change salary lyshark varchar(30);     #將字段名salary改為lyshark數據類型改成varchar(30)
Query OK, 4 rows affected (0.00 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> 

◆修改字段類型◆

每個字段都會有自己的數據類型,加入有一天你需要修改字段的數據類型,可以使用以下SQL語句:

alter table <表名> modify <字段名> <數據類型>

# 表名:指的是欲修改的表名稱    字段名:欲要修改的字段名    數據類型:你要修改成的類型

實例: 將表tab_testname字段數據類型由varchar(20)修改為varchar(40)

MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | NO   |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test modify name varchar(40);         #將類型從varchar(20)改成varchar(40)
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(10)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(40) | YES  |     | NULL    |                |
| salary | float       | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> 

◆添加一個字段◆

隨着業務的需求變化,可能需要在已經存在的表中添加新的字段,一個完整字段包括,字段名,數據類型,完整性約束,添加字段的SQL語法規則如下:

alter table <表名> add <新字段> <數據類型>

# 表名:指定表名稱    新字段:欲要添加的新字段   數據類型:指定添加的類型
# [約束條件] [first | after 已存在字段名]:指的是插入在那個字段前或者后.

在末尾添加: 添加無完整約束條件的字段,在tab_test表中添加一個int類型字段manager

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test add manager int(10);      #添加一個manager字段,類型為int
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [lyshark]> 

在末尾添加: 添加有完整性約束條件的字段,在tab_test表中添加clound字段,類型為varchar(20)

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test add clound varchar(20) not null;   #添加一個clound字段,並且不允許為空
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

在表開頭添加:tab_test表的第一列添加一個新字段,字段名wang類型int(4)

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test add wang int(4) first;   #在表的第一列添加一個字段名稱是wang,類型是int
Query OK, 4 rows affected (0.00 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

指定位置添加:tab_test表的指定位置添加一個字段,在name列的后面插入一個xxxx字段類型為int

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test add xxxx int(4) after name;   #在name字段后面插入一個xxxx,類型int
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

◆刪除一個字段◆

有時候我們需要刪除指定無用字段,刪除字段是將數據表中的某個字段從表中移除,這里可以使用alert table drop命令來完成,SQL語法格式如下:

alter table <表名> drop <字段名>

實例: 刪除tab_test表中的clound字段.

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| clound  | varchar(20) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test drop clound;        #刪除指定字段 clound
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

◆修改字段排列位置◆

對於一個表來說,在創建的時候,字段在表中的排列順序就已經確定了,有時候,我們還需要對其進行微調,我們可以這樣寫SQL語句如下:

alter table <表名> modify <字段1> <數據類型> first | after <字段2>

#上面說明,將字段1放到<first|after>字段2的前面或后面

修改到第一列:tab_test表中的lyshark字段移動到第1列

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test modify lyshark varchar(30) first;     #將lyshark字段調整到最頂端的位置
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES  |     | NULL    |                |
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

修改到指定位置:tab_test表中的manager字段放到lyshark字段的后面

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES  |     | NULL    |                |
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

MariaDB [lyshark]> alter table tab_test modify manager int(10) after lyshark;  #把manager字段放到lyshark字段的后面
Query OK, 4 rows affected (0.01 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> desc tab_test;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| lyshark | varchar(30) | YES  |     | NULL    |                |
| manager | int(10)     | YES  |     | NULL    |                |
| wang    | int(4)      | YES  |     | NULL    |                |
| id      | int(10)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(40) | YES  |     | NULL    |                |
| xxxx    | int(4)      | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

◆修改表的存儲引擎◆

存儲引擎是MySQL中的數據存儲在文件或者內存中時采用的不同技術實現,可以根據自己的需要,選擇不同的引擎,甚至可以為每一張表選擇不同的存儲引擎.MySQL中主要存儲引擎有:MyISAM、InnoDB、MEMORY、BDB、FEDERATED等.可以使用show engines語句查看系統支持的存儲引擎.如下表是MySQL所支持的存儲引擎.

引擎名稱 是否支持
FEDERATED
MRG_MYISAM
MyISAM
BLACKHOLE
CSV
MEMORY
ARCHIVE
InnoDB 默認
PERFORMANCE_SCHEMA

更改一個表的存儲引擎,可以使用的SQL語法規則:

alter table <表名> engine=<更改后的存儲引擎名稱>

更改引擎: 修改tab_test表的默認存儲引擎為MyISAM

1.首先我們可以使用show create table先查看一下當前的存儲引擎是什么,可以看到默認引擎是InnoDB

MariaDB [lyshark]> show create table tab_test \G
*************************** 1. row ***************************
       Table: tab_test
Create Table: CREATE TABLE `tab_test` (
  `lyshark` varchar(30) DEFAULT NULL,
  `manager` int(10) DEFAULT NULL,
  `wang` int(4) DEFAULT NULL,
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  `xxxx` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

2.接着執行修改命令,並查看一下變化.

MariaDB [lyshark]> alter table tab_test engine=MyISAM;
Query OK, 4 rows affected (0.00 sec)               
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [lyshark]> show create table tab_test \G
*************************** 1. row ***************************
       Table: tab_test
Create Table: CREATE TABLE `tab_test` (
  `lyshark` varchar(30) DEFAULT NULL,
  `manager` int(10) DEFAULT NULL,
  `wang` int(4) DEFAULT NULL,
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  `xxxx` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1   #可以看到已經改變了
1 row in set (0.00 sec)

◆刪除表的外鍵約束◆

對於數據庫定義的外鍵,如果不需要可以將其刪除掉,外鍵一旦刪除,就會解除主表和從表的關聯關系,MySQL中刪除外鍵的語法如下:

alter table <表名> drop foreign key <外鍵約束名>

#外鍵約束名:指的是在定義表時constraint關鍵字后面的參數

刪除外鍵: 刪除tb_emp的外鍵約束

1.先來查看一下表的外鍵約束.

MariaDB [lyshark]> desc tb_emp;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(10)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptid | int(10)     | YES  | MUL | NULL    |       |   #外鍵標識MUL
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


MariaDB [lyshark]> show create table tb_emp \G
*************************** 1. row ***************************
       Table: tb_emp
Create Table: CREATE TABLE `tb_emp` (
  `id` int(10) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptid` int(10) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_empdept` (`deptid`),
  CONSTRAINT `fk_empdept` FOREIGN KEY (`deptid`) REFERENCES `tb_dept` (`id`)   #這里foreign key指定了外鍵
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

2.使用drop foreign key命令刪除外鍵

MariaDB [lyshark]> alter table tb_emp drop foreign key fk_empdept;   #刪除tb_emp表中的外鍵fk_empdept
Query OK, 0 rows affected (0.01 sec)               
Records: 0  Duplicates: 0  Warnings: 0


MariaDB [lyshark]> show create table tb_emp \G
*************************** 1. row ***************************
       Table: tb_emp
Create Table: CREATE TABLE `tb_emp` (
  `id` int(10) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptid` int(10) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_empdept` (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1   #此時已經沒有foreign key 這一項了,說明刪除成功
1 row in set (0.00 sec)

## 刪除數據表

刪除數據表就是將數據庫中已存在的表從數據庫移除,需要注意的是,在刪除表的同時,表的定義和表中的所有數據均會被刪除,因此再刪除之前,最好做好備份,刪除的SQL語法如下:

drop table [if exists] 表1,表2,.....表n

#參數 if exists=刪除前判斷刪除的表是否存在,如果表不存在會報錯。

刪除表: 刪除指定表tab_test

MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tab_test          |
| tb_dept           |
| tb_emp            |
+-------------------+
10 rows in set (0.01 sec)

MariaDB [lyshark]> drop table if exists tab_test;
Query OK, 0 rows affected (0.00 sec)

MariaDB [lyshark]> show tables;
+-------------------+
| Tables_in_lyshark |
+-------------------+
| tb_dept           |
| tb_emp            |
+-------------------+
10 rows in set (0.01 sec)

參考文獻:mysql5.7從入門到精通


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM