MySQL修行記【2】 數據表的基本操作

在像MySQL這樣的關係型數據庫中,數據表是數據庫中最重要,最基本的操作對象,是數據存儲的基本單位。下文簡稱爲“表”

1. 查看數據庫中的所有表,以及 表的創建 / 銷燬 / 查看概要 / 查看詳情 / 清空內容 / 改名

創建表以前,必須指定數據庫,使用 use 數據庫名;

create table 表名
(
字段名1 數據類型 列約束條件 默認值,
字段名2 數據類型 列約束條件 默認值,
字段名3 數據類型 列約束條件 默認值,
...
字段名N 數據類型 列約束條件 默認值,
[表級約束條件]
);
create database test_db; --創建數據庫test_db

use test_db; --切換當前數據庫爲test_db

create table tb_emp1    --在test_db內創建表 tb_emp1
(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
tb_emp1 表結構
字段名稱 數據類型 備註名稱
id INT(11) 員工編號
name VARCHAR(25) 員工名稱
deptId INT(11) 所在部門編號
salary FLOAT 工資

查看錶的概要信息

desc tb_emp1;

等同於如下語句

describe tb_emp1;

查看錶的詳細信息(即創建信息,包括表中存在的所有約束)

show create table tb_emp1;

銷燬表示例

use test_db;

drop table tb_emp1;

查看數據庫中的所有表

use test_db;

show tables;

修改表名  (語法: alter table 原表名 rename 新表名;)

alter table tb_emp1 rename emp1_tb;

2. 使用主鍵約束

主鍵,又名主碼,爲表中一列或多列的組合。主鍵約束要求主鍵數據唯一,並且不爲空。它能唯一地標識表中的一條記錄,可以結合外鍵來定義不同表間的關係,並可以加快數據庫查詢的速度。主鍵分爲單字段主鍵和多字段聯合主鍵。

主鍵約束示例

create table tb_emp2(
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float
);

或者

create table tb_emp2(
id int(11),
name varchar(25),
deptId int(11),
salary float,
constraint pk primary key(id) -- 此處的pk爲約束名,可以自定義
);

多字段聯合主鍵示例

create table tb_emp2(
id int(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id, name, deptId)
);

或者

create table tb_emp2(
id int(11),
name varchar(25),
deptId int(11),
salary float,
constraint pk primary key(id, name, deptId) -- 此處的pk爲約束名,可以自定義
);

3. 使用外鍵約束和非空約束

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

外鍵:它是本表的一個字段,可以不是主鍵,但對應另一張表的主鍵。外鍵主要作用是保證數據引用的完整性,定義外鍵後,不允許刪除在另一個表中具有關聯關係的行。

主表(父表):對於兩個具有關聯關係的表而言,相關聯字段中主鍵所在的那個表即是主表。刪除主表以前,必須刪除其所有從表(子表)或者 保留子表但要清除外鍵約束。

從表(子表):對於兩個具有關聯關係的表而言,相關聯字段中外鍵所在的那個表即是從表。單純的從表(子表)的內容可以直接刪除。

 

非空約束(Not Null Constraint)指字段的值不能爲空。對於使用了非空約束的字段,如果用戶在添加數據時沒有指定值,數據庫系統會報錯。

外鍵約束及非空約束示例

/* 創建一個部門表 */
create table tb_dept1(
id int(11) primary key,
name varchar(22) not null, -- not null爲非空約束,禁止此字段的值爲空
location varchar(50)
);

/* 創建一個員工表,並讓員工表的部門ID字段作爲外鍵關聯到部門表的主鍵 */
create table tb_emp1(
id int(11) primary key,
name varchar(25) not null, --非空約束
deptId int(11),
salary float,
constraint fk_tb_dept1 foreign key(deptId) references tb_dept1(id)
);

4. 使用唯一性約束和默認約束

唯一性約束(Unique Constraint)要求該列的每個值是唯一的,允許爲空,但只能存在一個空值。唯一性約束可以保證一列或者幾列不出現重複值。語法爲在定義列後直接指定唯一性約束。

默認約束爲指定某列的默認值,例如,如果男性較多,那麼,性別可以默認爲'男'。

示例

/* 唯一性約束示例 */
create tb_dept7(
id int(11) primary key,
name varchar(25) unique, --唯一性約束,指定部門名稱唯一,不存在重複
location varchar(50)
);

或者

create tb_dept7(
id int(11) primary key,
name varchar(25),
location varchar(50),
constraint uk unique(name) --uk可以自定義
);


/* 默認約束示例 */
create tb_emp7(
id int(11) primary key,
name varchar(25) not null,
deptId int(11) default 111, --默認部門ID爲111
salary float
);

5. 修改數據表

修改字段數據類型,關鍵詞爲modify

desc tb_emp3;

+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | NO   | PRI | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


alter table tb_emp3 modify name int(11); --將name的數據類型改爲int
desc tb_emp3;

+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id     | int(11) | NO   | PRI | NULL    |       |
| name   | int(11) | NO   | PRI | NULL    |       |
| deptId | int(11) | YES  |     | NULL    |       |
| salary | float   | YES  |     | NULL    |       |
+--------+---------+------+-----+---------+-------+

修改字段名,關鍵詞爲 change,語法爲alter table 表名 舊的字段名 新的字段名 新的字段的數據類型,

不難從語法看出,change關鍵詞同樣支持修改字段的數據類型。

desc tb_dept3;

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(25) | YES  | UNI | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


將location改名爲loc,並重新指定數據類型
alter table tb_dept3 change location loc varchar(50); 


desc tb_dept3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(25) | YES  | UNI | NULL    |       |
| loc   | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


將loc的數據類型利用change關鍵字改爲int(11)
alter table tb_dept3 change loc loc int(11);


desc tb_dept3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(25) | YES  | UNI | NULL    |       |
| loc   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

添加字段

語法:

ALTER TABLE <表名> ADD <新字段名> <數據類型> [約束條件] [FIRST | AFTER 已存在字段]

示例

添加無完整性約束條件的字段

alter table tb_dept3 add managerId int(10);

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+


添加有完整性約束條件的字段

alter table tb_dept3 add column1 varchar(12) not null;

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+


在表的第一列添加一個字段
alter table tb_dept3 add column2 varchar(12) first;

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+


在表的指定列後添加一個字段
alter table tb_dept3 add column3 int(11) after name; --在name後新增列column3

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

 

刪除字段

語法:ALTER TABLE <表名> DROP <字段名>

示例:

先查看原表格概要

desc tb_dept3; 
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+


開始刪除列

alter table tb_dept3 drop column1; --刪除表中的列column1

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

修改字段的排列位置

對於一個數據表而言,在創建的時候,字段在表中的排序已經確定了。但表的結構並不是完全不可以改變的,可以通過ALTER TABLE來改變表中字段的相對位置,語法格式如下

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

示例1, 修改字段爲表的第一個

先查看原表
desc tb_dept3; 

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
| column1   | int(11)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

接下來將column1移動爲表的第一個字段

alter tb_dept3 modify column1 int(11) first;

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1   | int(11)     | YES  |     | NULL    |       |
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

示例2, 修改字段到表的指定列後

先查看原表

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1   | int(11)     | YES  |     | NULL    |       |
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+


接下來將column1移動到location列後
alter table tb_dept3 modify column1 int(11) after location;

desc tb_dept3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | varchar(12) | YES  |     | NULL    |       |
| id        | int(11)     | NO   | PRI | NULL    |       |
| name      | varchar(25) | YES  | UNI | NULL    |       |
| column3   | int(11)     | YES  |     | NULL    |       |
| location  | varchar(25) | YES  |     | NULL    |       |
| column1   | int(11)     | YES  |     | NULL    |       |
| managerId | int(10)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

修改表的存儲引擎

存儲引擎是MySQL中的數據存儲在文件或者內存中的不同技術實現,可以根據實際需求選擇不同的引擎,甚至可以爲每一張表選擇不同的引擎。可以用show engines;查看系統支持的存儲引擎。

更改引擎語法 ALTER TABLE <表名> ENGINE=<新引擎的名字>

示例

先查看本機支持的引擎
show engines;

InnoDB
MRG_MYISAM
MEMORY
BLACKHOLE
MyISAM
CSV
ARCHIVE
PERFORMANCE_SCHEMA
FEDERATED

查看錶的創建信息
show create table tb_emp6;


| Table   | Create Table                                                                                                                                                                                                 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_emp6 | CREATE TABLE `tb_emp6` (
  `id` int(11) NOT NULL,
  `name` varchar(25) NOT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


修改表的存儲引擎(默認引擎爲InnoDB)

alter table tb_emp6 engine=MyISAM;

再次查看錶的創建信息
show create table tb_emp6;

| Table   | Create Table                                                                                                                                                                                                 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_emp6 | CREATE TABLE `tb_emp6` (
  `id` int(11) NOT NULL,
  `name` varchar(25) NOT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

刪除表的外鍵約束

語法:ALTER TABLE <表名> DROP FOREIGN KEY <外鍵約束名>

示例:

創建部門表

create table tb_dept1(
id int(11) primary key,
name varchar(25) not null,
location varchar(50)
);

創建帶外鍵約束的員工表

create table tb_emp9(
id int(11) primary key,
name varchar(25) not null,
deptId int(11),
salary float,
constraint fk_deptId foreign key(deptId) references tb_dept1
);

查看員工表的詳細信息

show create table tb_emp9;

刪除外鍵約束

alter table tb_emp9 drop foreign keyfk_deptId;

再次查看被刪除約束信息後的員工表

show create table tb_emp9;

 

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