Day01.操作資料庫(整體非重點)
一、初始MySQL
1.1 資料庫分類以及DBMS
1. 關係型資料庫:(SQL)
-
MySQL
-
將資料儲存在不同的表中
2. 非關係型資料庫 (NoSQL 這裡的No是指Not only)
-
Redis
-
物件儲存,通過物件的自身屬性來決定
3. DBMS (資料庫管理系統)
-
資料庫的管理軟體,科學有效的管理資料。 用於維護和獲取資料
1.2 MySQL相關知識
1.2.1 基本指令(這裡是5.7版本)
flush privileges; -- 重新整理許可權
-------------------------------------------------------
mysql -u root -p -- 進入資料庫
show databases; -- 檢視所有的資料庫
mysql> use school -- 切換資料庫 use + 資料庫名
Database changed
show tables; -- 檢視所有資料庫中所有表的資訊
describe student; -- 顯示資料庫中所有表的資訊 describe 表名
create database xxx; -- 建立一個數據庫
exit; -- 退出連線
-- 單行註釋 (SQL本來的註釋,在sqlyog中可以使用#)
/*
這是多行註釋
*/
1.2.2 四種資料庫語言
-
DDL 定義 Database definition language
-
DML 操作 Database Manipulation Language
-
DQL 查詢 Database query language
-
DCL 控制 Database Control language
二、操作資料庫(瞭解)
須知:操作資料庫 > 操作資料庫中的表 > 操作資料庫表中的資料
2.1 操作資料庫的相應指令(資料庫層面)
MySQL的指令不區分大小寫
-
建立資料庫
CREATE DATABASE [IF NOT EXISTS] xxx
-
刪除資料庫
DROP DATABASE [IF EXISTS] xxx
-
使用資料庫
USE `xxx` -- 如果表明或者欄位名為特殊字元,需要加` `
-
檢視資料庫
SHOW DATABASE -- 檢視所有資料庫
2.2 資料庫的資料型別
數值
-
tinyint 十分小的資料 1個位元組
-
smallint 比較小的資料 2個位元組
-
mediumint 中等大小的資料 3個位元組
-
int (常用) 標準的整數 4個位元組
-
bigint 較大的資料 8個位元組
-
float 浮點數 4個位元組
-
double 浮點數 8個位元組
-
decimal (金融常用) 字串形式的浮點數
字串
-
char 固定大小的字串 0 ~ 255
-
varchar (常用) 可變字串 0 ~ 65535
-
tinytext 微型文字 2^8 - 1
-
text(儲存大文字) 文字串 2^16 - 1
時間日期
在Java裡面 java.tuil.Date
-
data YYYY-MM-DD 日期格式
-
time HH :mm : ss 時間格式
-
datatime(常用) YYYY-MM-DD HH :mm : ss
-
timestamp(常用) 時間戳(1970.1.1到現在的毫秒數)
-
year 年份表示
null
-
沒有值或者未知值
-
注意:不要使用NULL進行運算,因為其計算結果還是NULL
2.3 資料庫的欄位屬性 (重點)
UnSigned (無符號的的整數
-
宣告該列不允許負數 .
ZEROFILL (0 填充的
-
不足位數的用 0 來填充 , 如 int(3),5 則為 005
-
INT(M) M指的是最大的顯示寬度 最大的有效顯示寬度為255 顯示寬度與儲存大小或者型別包含的值的範圍無關
-
而 VARCHAR(m) 後面的m是規定的最大長度 輸入內容不能超過這個長度
Auto_InCrement
-
自動增長的 , 每新增一條資料 , 自動在上一個記錄數上加 1(預設)
-
通常用於設定主鍵 , 且為整數型別
-
可定義起始值和步長
-
-
-
當前表設定步長 (AUTO_INCREMENT=100) : 隻影響當前表
-
-
-
SET @@auto_increment_increment=5 ; 影響所有使用自增的表 (全域性)
-
NULL 和 NOT NULL
-
不給值則為 NULL , 即沒有插入該列的數值
-
如果勾選了NOT NULL , 則該列必須有值
DEFAULT
-
預設的
-
用於設定預設值
-
例如, 性別欄位, 預設為 "男" , 否則為 “女” ; 若無指定該列的值 , 則預設值為 "男" 的值
2.4 建立資料庫表 (重點)
建立資料庫表
CREATE TABLE IF NOT EXISTS `student2`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'學號',
`name` VARCHAR(30)NOT NULL DEFAULT '匿名' COMMENT'姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT'性別',
`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
常用命令
SHOW CREATE DATABASE XXX -- 檢視建立資料庫
SHOW CREATE TABLE XXX -- 檢視建立資料表
DESC xxx -- 顯示錶的結構
2.5 資料表的型別(5.7版本)
-- 關於資料庫引擎
/*
INNODB 現在預設使用
MYISAM 早些年使用
*/
資料庫引擎 | MYISAM | INNODB |
---|---|---|
事務支援 | 不支援 | 支援 |
資料行鎖定 | 不支援 | 支援 |
外來鍵約束 | 不支援 | 支援 |
全文索引 | 支援 | 不支援 |
表空間的大小 | 較小 | 較大,約為MYISM2倍 |
常規使用操作:
-
MYISAM
-
節約空間,速度較快
-
-
INNODB
-
安全性高
-
事物的處理
-
多表多使用者操作
-
在物理空間存在的位置
所有的資料庫檔案都存在data目錄下面 本質上還是檔案的儲存
MySQL引擎在物理檔案上的區別
-
INNODB 在資料庫表中只有一個*.frm檔案,以及上級目錄下的ibdata1檔案
-
MYISAM對應檔案
-
*.frm 表結構的定義檔案
-
*.MYD 資料檔案(data)
-
*.MYI 所以檔案(index)
-
設定資料庫表的字符集編碼
CHARSET=UTF8
不設定的話,MySQL的預設編碼是Latin1(不支援中文)
還有一種方法就是在物理檔案my.ini中配置預設的編碼 (不推薦)
character-set-server=utf-8
2.6 修改刪除表
修改
-- 修改表名:ALTER TABLE 舊錶名 RENAME AS 新表名
ALTER TABLE student2 RENAME AS student3
-- 欄位重新命名: ALTER TABLE 表名 CHANGE 舊欄位名 新欄位名 資料型別
ALTER TABLE student3 CHANGE gamepwd gamezzx INT(1)
-- 增加表的欄位: ALTER TABLE 表名 ADD 欄位名 資料型別
ALTER TABLE student3 ADD gamepwd INT(10)
-- 修改表的欄位:ALTER TABLE 表名 MODIFY 欄位名 更新後的資料型別
ALTER TABLE student3 MODIFY gamepwd VARCHAR(2)
-- 刪除表的欄位:ALTER TABLE 表名 DROP 欄位名
ALTER TABLE student3 DROP gamezzx
-- 刪除表:DROP TABLE IF EXISTS 表名
DROP TABLE IF EXISTS student3