在上一篇文章里,主要記錄了資料庫的一些操作,主要包括創建、查詢、修改、洗掉等操作,
這一篇的內容則是圍繞著資料庫中的表進行展開,嘿嘿,其實這些內容是應該放在一篇來寫的,但是,,,我懶啊,又不愿意寫一半留著下次續寫,所以只能分著寫啦,見諒!
目錄
- 1.資料表特性
- 2.創建資料表
- 2.1.創建空資料表
- 2.2.創建資料表時指定主鍵
- 2.3.創建資料表時指定外鍵
- 2.4.創建資料表時指定欄位非空
- 2.5.創建表時指定默認值
- 2.6. 創建資料表時指定主鍵默認遞增
- 2.7.創建資料表時指定存盤引擎
- 2.8.創建資料庫時指定編碼
- 3.查看資料表結構
- 3.1.使用DESCRIBE/DESC查看表結構
- 3.2.使用SHOW CREATE TABLE陳述句查看表結構
- 4.修改資料表
- 4.1.修改資料表名稱
- 4.2.為資料表添加新欄位
- 4.3.修改欄位名稱
- 4.4.修改欄位的資料型別
- 4.5.修改欄位位置
- 4.6.洗掉欄位
- 4.7.修改已有表的存盤引擎
- 4.8.取消資料表的外鍵約束
- 5.洗掉資料表
- 5.1.洗掉沒有關聯關系的資料表
- 5.2.洗掉有外鍵約束的主表
- 6.臨時表
- 6.1.創建臨時表
- 6.2.洗掉臨時表
1.資料表特性
在MySQL中,資料表是以二維表格形式展示,一行代表一條完整資料,一列代表一種特定屬性,
2.創建資料表
2.1.創建空資料表
- 語法
CREATE TABLE [IF NOT EXISTS] 表名(
欄位1,資料型別,[約束條件][默認值],
欄位2,資料型別,[約束條件][默認值],
)
- 創建一個包含序號、姓名和年齡的資料表
mysql> use test_new;
mysql> create table test_01 (
-> id int,
-> name varchar(20),
-> age varchar(30)
-> );
Query OK, 0 rows affected (0.07 sec)
注意:
在MySQL 8.0中,不再推薦為INT型別指定顯示長度
如需要表名稱不區分大小寫,需要在my.cnf中添加以下配置:
lower_case_table_names=1
- 查看資料表,可以看到剛創建的資料表
mysql> show tables;
+--------------------+
| Tables_in_test_new |
+--------------------+
| test_01 |
+--------------------+
1 row in set (0.01 sec)
2.2.創建資料表時指定主鍵
主鍵又稱作主碼,在表中包含一列或多列,能夠唯一標識表中的一行記錄,
主鍵列的資料必須唯一,且不為空,
主鍵可分為單列主鍵和多列聯合主鍵,
-
單列主鍵
單列主鍵只包含資料表中一個欄位
語法:
欄位 資料型別 PRIMARY KEY [默認值]
- 創建test_02資料表,將id欄位作為主鍵
#定義列的同時指定主鍵
mysql> create table test_02 (
-> id int primary key,
-> name varchar(20),
-> age varchar(20)
-> );
Query OK, 0 rows affected (0.05 sec)
#也可以定義完所有列后指定主鍵
mysql> create table test_03 (
-> id int,
-> name varchar(20),
-> age varchar(20),
-> primary key(id)
-> );
Query OK, 0 rows affected (0.05 sec)
-
多列聯合主鍵
多列聯合主鍵只能在定義完表所有列后指定
語法:
PRIMARY KEY [欄位1],[欄位2],...[欄位n]
用法與定義完所有列后指定主鍵相似,就不舉例了,
2.3.創建資料表時指定外鍵
外鍵可以關聯資料庫的兩張表
一張表的外鍵可以為空,也可以不為空,當外鍵不為空時,則外鍵的值必須對應另一張表主鍵某個值
一張表的外鍵可以不是本表主鍵,但是一定對應另一表主鍵
一張表定義了外鍵后不允許洗掉另一表具有關聯關系的資料行
由外鍵引出兩個概念,主表和從表
兩表具有關聯關系時,關聯欄位中主鍵所在的表為主表,外鍵所在的表為從表
- 創建外鍵的語法格式
[CONSTRAINT 外鍵名] FOREIGN KEY 欄位1 REFERENCES 主表名 主鍵列1
#以上內容含義
外鍵名:定義外鍵時資料表指定的外鍵名稱,同一表中,外鍵名唯一
FOREIGN KEY:外鍵包含哪些欄位
REFERENCES:指定關聯的主表名
將其加到創建的表欄位后
2.4.創建資料表時指定欄位非空
- 語法格式:
欄位名稱 資料型別 NOT NULL
- 創建一個例子可以直觀體現出來
mysql> create table test_04 (
-> id int primary key not null,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.02 sec)
2.5.創建表時指定默認值
- 語法格式
欄位名稱 資料型別 DEFAULT 默認值
- 例
mysql> create table test_05 (
-> id int default 1,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.02 sec)
#當向表中插入資料時,沒有指定id的值,則id欄位的默認值為1
2.6. 創建資料表時指定主鍵默認遞增
MySQL支持將整數型別主鍵設定為默認遞增型別
這樣向表中插入資料時,不用指定整數型別主鍵的值
MySQL會將該表整數型別的主鍵值自動加 1
- 語法格式
欄位名稱 資料型別 AUTO_INCREMENT
- 例
mysql> create table test_06 (
-> id int primary key auto_increment,
-> name varchar(20) not null
-> );
Query OK, 0 rows affected (0.03 sec)
此時表中主鍵id為自動遞增型別,在向表中插入資料時,
主鍵id默認值從1開始每加入一條新資料,id欄位的值會自動加1.
2.7.創建資料表時指定存盤引擎
- 語法格式
ENGINE=存盤引擎名稱
創建表時在陳述句后加入'ENGINE=存盤引擎‘即可為當前表指定存盤引擎
- 例
mysql> create table test_07 ( id int primary key auto_increment, name varchar(20) not null )engine=InnoDB;
Query OK, 0 rows affected (0.03 sec)
2.8.創建資料庫時指定編碼
- 語法格式
DEFAULT CHARACTER SET 編碼 COLLATE 校對規則
或
DEFAULT CHARSET=編碼 COLLATE=校對規則
- 和2.7一樣,加在表后就可以了,就不舉例了
3.查看資料表結構
3.1.使用DESCRIBE/DESC查看表結構
使用此陳述句查看表結資訊,包含欄位名稱、資料型別及主鍵等資訊
- 語法格式
DESCRIBE/DESC 表名稱
- 例
mysql> desc test_06;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
以上資訊說明:
Field:表中的欄位
Type:欄位中的資料型別
Null:表中當前欄位能否為空
key:表中欄位是否存在索引,PRI表示主鍵列,UNI表示當前列是UNIQUE標識的唯一索引列,或是其中一部分;MUL表示在當前列中某個值可以出現幾次
Default:當前列是否由默認值,同時顯示默認值是多少
Extra:表示與當前列相關的附件資訊
3.2.使用SHOW CREATE TABLE陳述句查看表結構
通過這種方式,不僅可以查看創建表的SQL陳述句,
還可以看存盤引擎和字符集等資訊
- 語法格式:
SHOW CREATE TABLE 表名 \G
- 例
mysql> show create table test_06 \G
*************************** 1. row ***************************
Table: test_06
Create Table: CREATE TABLE `test_06` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
4.修改資料表
4.1.修改資料表名稱
- 語法格式:
ALTER TABLE 原表名 RENAME [TO] 新表名
#TO可以省略
- 例
mysql> alter table test_06 rename to test_60;
Query OK, 0 rows affected (0.03 sec)
4.2.為資料表添加新欄位
- 語法格式:
ALTER TABLE 表名 ADD COLUMN 新欄位名 資料型別 [NOT NULL DEFAULT 默認值]
- 例,為表test_60添加新欄位
mysql> alter table test_60 add column age varchar(20);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 添加欄位時指定位置,在表的第一列添加欄位
ALTER TABLE 表名 ADD COLUMN 新欄位名 資料型別 [NOT NULL DEFAULT 默認值] FIRST
#FIRST關鍵字表示要添加的欄位位于當前表的第一列
- 在指定欄位后添加新欄位
ALTER TABLE 表名 ADD COLUMN 新欄位名 資料型別 [NOT NULL DEFAULT 默認值] ALTER 原有欄位名
4.3.修改欄位名稱
- 語法格式
ALTER TABLE 表名 CHANGE 原欄位名 新欄位名 新資料型別
在修改欄位名時也可以不修改資料型別
可以將新欄位的資料型別設定成與原由欄位資料型別一樣
但是新欄位名稱的資料型別不能為空,
新欄位名稱后加上DEFAULT即為保持資料型別不變
4.4.修改欄位的資料型別
- 語法格式
ALTER TABLE 表名 MODIFY 欄位名 新資料型別 [DEFAULT 默認值]
使用MODIFY關鍵字指定欄位的新資料型別
- 例
mysql> alter table test_60 modify age tinyint(2);
Query OK, 0 rows affected, 1 warning (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 1
咳咳,舉例暫時忽略警告
4.5.修改欄位位置
- 將欄位的位置修改為資料表的第一個欄位
ALTER TABLE 表名 MIDIFY 欄位名 資料型別 FIRST
使用FIRST關鍵字將當前欄位修改為資料表的第一個欄位
- 將選中欄位修改到某欄位之后
ALTER TABLE 表名 MODIFY 欄位1名稱 欄位1資料型別 AFTER 欄位2名稱
4.6.洗掉欄位
- 洗掉表中某個欄位的語法:
ALTER TABLE 表名 DROP 欄位名
- 例
mysql> desc test_60;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| age | tinyint | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> alter table test_60 drop age;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
4.7.修改已有表的存盤引擎
- 語法格式:
ALTER TABLE 表名 ENGINE=存盤引擎名稱
- 例
mysql> alter table test_05 engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
4.8.取消資料表的外鍵約束
- 語法格式:
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名
5.洗掉資料表
5.1.洗掉沒有關聯關系的資料表
- 語法格式:
DROP TABLE [IF EXISTS] 資料表
- 例
mysql> drop table test_07;
Query OK, 0 rows affected (0.03 sec)
5.2.洗掉有外鍵約束的主表
- 可以先洗掉有外鍵約束從表,在洗掉主表
- 先解除外鍵約束,再洗掉主表
6.臨時表
6.1.創建臨時表
- 語法格式:
CREATE TEMPORARY TABLE [IF NOT EXISTS] 表名
注:臨時表通過DESC或者SHOW CREATE TABLE陳述句來查看
6.2.洗掉臨時表
- 語法格式
DROP TABLE [IF EXISTS] 表名
#與正常表洗掉方式一樣
本文寫了資料表的一些操作,當然,有很多地方只給出了語法,沒有示例,因為資料表大的主體時相同的,不同的只是使用關鍵詞上,所有只給出了語法,將語法代入即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/263340.html
標籤:其他
