# 表基本操作
[TOC]
## 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 找到某條記錄,主鍵是不會用過更新的。
>
> 在建立了外鍵關系的兩個表中,一般是子表通過某個字段引用主表的**主鍵**數據,如果要去對外鍵數據進行處理,一般我們會先解除外鍵關系,然后對數據處理后再加上。
**刪除表**:自學完成
**修改表**:自學完成
## 作業
* 創建一個學生表以及學生賬戶表,并添加相應的約束。
- 概要
- 前言
- 計算機軟件概論
- 計算機軟件概論
- Markdown基礎
- 為什么使用Markdown
- Markdown語法簡明教程
- Xmind思維導圖
- 為什么要制作思維導圖
- 簡單制作思維導圖
- HTML基礎
- Web原理和HTML簡介
- Web原理
- HTML概念
- HTML標簽
- 標簽
- HTML固定基本結構
- 第一個HTML頁面
- 工具的使用
- 標題
- hr 和 p 標簽
- 表單的設計與使用
- 表單域的原理
- 文本框和密碼框
- 單選框和復選框
- 下拉列表框
- 多行文本和上傳
- 提交按鈕和重置按鈕
- 為CODING COFFEE加入在線購買頁
- 數據庫基礎
- 數據庫介紹
- 數據庫安裝和Navicat
- SQL
- 表基本操作
- 修改數據語句
- 數據檢索操作
- 多表數據操作
- JAVA基礎
- JAVA 介紹
- JAVA 運行原理
- JDK 配置
- 類和對象
- 數據類型
- 變量
- 直接量
- 運算符
- 流程控制
- 數組結構