MySQL概述及數據庫、表操作
前言:
JavaEE:企業級Java開發 Web
前端(頁面:展示,數據!)
後臺(連接點:連接數據庫JDBC,鏈接前端(控制,控制視圖跳轉,給前端傳遞數據))
數據庫是所有軟件體系中最核心的存在 DBA
1 什麼是數據庫?
數據庫(DB DataBase)
概念:數據倉庫~軟件,安裝在操作系統(window, linux, mac…)之上!
作用:存儲數據,管理數據,可以存儲大量的數據,500萬以下還是可以的!
2 數據庫分類
關係型數據庫: (SQL)
- MySQL,Oracle,Sql Server, DB2,SQLlite
- 通過表和表之間,行和列之間的關係進行數據的存儲,比如學院信息表,考勤表…
非關係型數據庫:(NoSQL~Not Only SQL)
- Redis,MongDB
- 以對象存儲,通過對象自身的屬性來決定操作
DBMS(數據庫管理系統)
-
數據庫的管理軟件,科學有效的管理我們的數據。維護和獲取數據
-
MySQL-數據庫管理系統!
3 MySQL簡介
MySQL是一個關係型數據庫管理系統
前世:瑞典MySQL AB公司
今生:屬於Oracle旗下產品
MySQL是最好的RDBMS(RElational Database Management System,關係數據庫管理系統)應用軟件之一。開源的數據庫軟件~
體積小、速度快、總體擁有成本低,招人成本比較低。
中小型網站、或某些大型網站都在使用!
此處省略MySQL的安裝與初始化,可自行查找博客。
我採用的是 MySQL 8.0.18 + Sequel Pro
4 連接數據庫
命令行連接!
mysql -u root -p123123 -- 連接數據庫
查看數據庫、表基本操作:
-- 單行註釋(SQL的的單行註釋)
/* (SQL的多行註釋)
hello
world
*/
mysql> show databases; -- 查看所有數據庫
mysql> use test; -- 使用數據庫test
mysql> show tables; -- 查看該數據庫中所有的表
mysql> describe teacher; -- 顯示數據庫中某個表的信息
mysql> create database jeverdata; -- 創建一個新的數據庫
mysql> show databases; -- 查看此時的數據庫
mysql> exit -- 退出連接數據庫
Bye
數據庫xxx語言:
- DDL 定義 (Database Define Language)
- DML 操作 (Database Manager Language)
- DQL 查詢 (Database Query Language)
- DCL 控制 (Database Control Language)
5 操作數據庫
操作數據庫 --> 操作數據庫中的表 --> 操作數據庫中表的數據
mysql關鍵字不區分大小寫
5.1 創建數據庫
mysql> create database jeverdata;
Query OK, 1 row affected (0.00 sec)
也可直接在Navicat中創建,右鍵單機我的連接,選擇創建數據庫,之後按照下圖勾選,即可創建成功!
2、刪除數據庫
mysql> drop database jeverdata;
Query OK, 0 rows affected (0.00 sec)
3、使用數據庫
mysql> use test;
Database changed
4、查看數據庫
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| medicine |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
5.2 數據庫的列類型
數值
-
tinyint 十分小的數據 1個字節
-
smallint 較小的數據 2個字節
-
int 標準的整數 4個字節
-
bigint 較大的數據 8個字節
-
float 浮點數 4個字節
-
double 浮點數 8個字節
-
decimal 字符串形式的浮點數 金融計算的時候,一般使用decimal
字符串
- char 字符串固定大小的 0~255
- **varchar 可變字符串 0~65535 ** 常用的變量 String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 存放大文本
時間日期
java.util.Data
- data YYYY-MM-DD 日期格式
- time HH:mm:ss 時間格式
- datatime YYYY-MM-DD HH: mm: ss 最常用的時間格式
- timestamp 時間戳 --> 1970.1.1到現在的毫秒數! 也較爲常用!
- year 年份表示
null
- 沒有值,未知
- 注意,不要使用NULL進行運算,結果爲NULL
5.3 數據庫的字段屬性(重點)
Unsigned:
- 無符號的整數
- 聲明瞭該列不能聲明爲負數
zerofill:
- 0填充
- 不足的位數,使用0來填充,int(3) --> 5~005
自增:
- 通常理解爲自增,自動在上一條記錄的基礎上+1(默認)
- 通常用來設計唯一的主鍵~index,必須是整數類型
- 可以自定義設計主鍵自增的起始值和步長
非空 not null
- 假設設置爲not null,如果不給它賦值,就會報錯!
- NULL,如果不填寫值,默認就是null!
默認:
- 設置默認的值!
- gender,默認值爲男,如果不指定該列的值,則會有默認的值
擴展:
/*項目中根據規範每一個表必須要存在以下五個字段:
id 主鍵
`version` 樂觀鎖
is_delete 僞刪除
gmt_create 創建時間
gmt_update 修改時間
*/
6 操作數據表
6.1 創建表案例
-- 目標:創建一個school數據庫
-- 創建學生表(列,字段) 使用SQL創建
-- 學號int、登陸密碼varchar(20)、姓名、性別varchar(2)、出生日期(datatime)、家庭住址、email
-- 注意點,使用英文(),表的名稱和字段 儘量使用``擴起來
-- AUTO_INCREMENT 自增
-- 字符串使用單引號擴起來
-- 所有的語句後面加,(英文的),最後一個不加
-- PRIMARY KEY 主鍵,一個表只能有一個唯一的主鍵
create table if not exists `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',
`gender` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性別',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址'
,
`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
說明:其中數據庫的引擎INNODB在 ‘數據表的類型’ 中說明。
格式:
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列類型 [屬性][索引][註釋],
`字段名` 列類型 [屬性][索引][註釋],
...
`字段名` 列類型 [屬性][索引][註釋]
)[表類型][字符集設置][註釋]
常用查看語句:
SHOW CREATE DATABASE school -- 查看創建數據庫的語句
SHOW CREATE TABLE student -- 查看student數據表的定義語句
DESC student; -- 查看錶的結構
數據表的類型
-- 關於數據庫的引擎
/*
InnoDB 默認使用~
MYISAM 早些年使用
*/
MYISAM | INNODB | |
---|---|---|
事務支持 | 不支持 | 支持 |
數據行鎖定 | 不支持(表鎖定) | 支持 |
外鍵約束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空間的大小 | 較小 | 較大,約爲MYISAM兩倍 |
常規使用操作:
- MYSIAM: 節約空間,速度較快
- INNODB: 安全性高,支持事務的處理,多表多用戶操作
設置數據庫表的字符集編碼:
CHARSET=utf8
如果不設置,會是mysql默認的字符集編碼~(不支持中文!)
MySQL的默認編碼是Latin1,不支持中文。
6.2 修改和刪除數據表字段
-- 修改表名: ALTER TABLE 舊錶名 RENAME AS 新表名
ALTER TABLE students RENAME AS student;
-- 增加表的字段: ALTER TABLE 表名 ADD 字段名 列屬性
ALTER TABLE student ADD age INT(11);
-- 修改表的字段:
-- ALTER TABLE 表名 MODIFY 字段名 列屬性[]
ALTER TABLE student MODIFY age VARCHAR(11) -- 修改約束
-- ALTER TABLE 表名 CHANGE 舊名字 新名字 列屬性[]
ALTER TABLE student CHANGE age Age INT(11) -- 字段重命名
-- 刪除表的字段
ALTER TABLE student DROP Age;
-- 刪除表(如果表存在再刪除)
DROP TABLE IF EXISTS student;
注意:
- change 用來字段重命名,不能修改字段類型和約束;
- modify 不能用來字段重命名,只能修改字段類型和約束;
所有的創建和刪除操作儘量加上判斷,以免報錯!
寫在最後
Making the most of every opportunity, because the days are evil.
——Ephesians 5: 16
To Demut and Dottie~