# 表基本操作
## MySQL的存儲引擎
存儲引擎是MySql的重要特性,為了提高MySql對數據庫的存儲效率和靈活性,可以選擇不同的引擎。
存儲引擎指定表的類型,如何存儲數據和索引數據,以及是否支持事物。
在較為大型的應用系統中,我們一般為將數據庫做**讀寫分離**操作。
MySQL的主要存儲引擎:

* InnoDB:支持事務
> 事務:多條指令原子性的執行。
* MyISAM:不支持事務,但是它的數據訪問效率較高
## 表操作
**創建表**
> 表的元素有:表名、表的字段
>
> 表字段的元素有:字段名、**數據類型**、字段長度、**約束**
~~~sql
CREATE TABLE table_name (
字段名稱 字段數據類型 [字段約束],
字段名稱 字段數據類型 [字段約束]
)
~~~
示例:
~~~sql
-- 創建表的語句
CREATE TABLE student_info (
code VARCHAR(50),
name VARCHAR(50)
)
~~~
**SQL語言的注釋**
用`--`,`#`和`/* */`表示注釋部分的內容
**MySQL 字段數據類型**
> 主要分為:數值、日期、字符串三種類型。
數值類型:MySQL 是支持所有標準 SQL 中的數值類型。在絕大多數的應用程序中,我們使用 INT 和 DECIMAL 類型就可以了。
* INT:整型
* DECIMAL:浮點類型
* 其他數值類型:SMALLINT、NUMBERIC
日期類型:一般使用 DATETIME (用日期和時間構成)、DATE(只是表示日期),其他不常用的還有 TIME 、YEAR等等。
字符串類型:一般最常使用 VARCHAR(可變長度)、CHAR(定長)、TEXT(長文本類型,例如博客文章等數據),其他不常用的還有 LONGTEXT、TINYTEXT等等。
> VARCHAR 和 CHAR 的區別:例如 VARCHAR 定義的長度為 200,在使用的時候是存儲了 4 個字符長度的字符串,那么在數據庫中只會占用 4 個字符的數據空間,CHAR 是定長,無論存儲多少數據,在數據空間中都會占用到定義的長度。
在數據中,我們一般不會去存儲類似照片、視頻這樣的二進制文件,而是把這些文件在服務器中的訪問地址用字符串類型的數據進行存儲。
> 在定義數據庫字段名稱時,由于數據庫不區分大小寫,所以,一般碰到了多個單詞,我們用`_`分隔
示例:
~~~sql
-- 創建表的語句
CREATE TABLE student_info (
code CHAR(2),
name VARCHAR(50),
age INT(12),
weight DECIMAL(10, 2),
birthday DATE,
in_school DATETIME,
description TEXT
)
~~~
**表的約束**
在一個完整的表中,是需要對表中的字段進行相關約束的。
> 使用約束主要是為了保證數據表中數據的合法性以及相對完整性。
約束類型包括:
* 主鍵約束(PRIMARY KEY:PK):唯一的確定在數據表中的記錄,而且主鍵約束是不能為空的,我們一般使用沒有業務含義的字段去進行主鍵定義,在MySQL中可以使用自增長類型的主鍵或者可以使用 UUID 。
* 非空約束(NOT NULL)
* 默認值(DEFAULT)
* 唯一約束(UNIQUE KEY:UK)
* 外鍵約束(FOREIGN KEY:FK)
語法:
~~~sql
CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 外鍵關聯表(關聯表的字段)
~~~
* 自動增長(AUTO\_INCREMENT)、
綜合示例:
~~~sql
-- 創建表的語句
CREATE TABLE student_info1 (
id INT AUTO_INCREMENT PRIMARY KEY,
-- 建立非空和唯一性 約束
code CHAR(2) NOT NULL UNIQUE,
name VARCHAR(50) NOT NULL DEFAULT 'zhangsan',
age INT(12) NOT NULL,
weight DECIMAL(10, 2),
birthday DATE NOT NULL,
in_school DATETIME NOT NULL,
description TEXT
)
CREATE TABLE student_account1 (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
account VARCHAR(20),
password VARCHAR(20),
CONSTRAINT FK_SI_SA_01 FOREIGN KEY (student_id) REFERENCES student_info1(id)
)
~~~
> 主鍵是用來定義一條記錄的唯一性的,在應用程序中,一般通過 ID 找到某條記錄,主鍵是不會用過更新的。
>
> 在建立了外鍵關系的兩個表中,一般是子表通過某個字段引用主表的**主鍵**數據,如果要去對外鍵數據進行處理,一般我們會先解除外鍵關系,然后對數據處理后再加上。
**刪除表**:自學完成
**修改表**:自學完成
XMind
- JAVA基礎
- JAVA開發準備
- JAVA介紹
- 開發JAVA的準備
- JAVA的運行原理
- JDK配置
- 我的第一個JAVA程序
- 類與對象
- 基礎語言要素
- 數據類型
- eclipse的安裝與使用
- 變量
- 直接量
- 運算符
- 流程控制
- 數組結構
- 面向對象
- 隱藏與封裝
- 深入構造器
- 類的繼承
- 多態
- 包裝類
- final修飾符
- 抽象類
- 接口
- 內部類
- 設計模式
- 單例模式
- 工廠模式
- 集合框架
- 集合排序
- 常用類學習
- 異常處理
- Java基礎測試
- 綜合案例一
- JAVA高級
- 泛型
- 多線程
- 線程的創建
- 線程的生命周期
- 線程同步
- 線程通信
- 輸入輸出流(I/O編程)
- File文件操作
- 字節流與字符流
- 數據庫
- 數據庫介紹
- 數據庫安裝
- SQL
- 表的基本操作
- 修改數據語句
- 數據檢索操作
- 多表數據操作
- 表結構設計
- 綜合應用