[資料庫 02] 資料庫 資料型別 引擎型別
資料庫基礎操作
關係型資料庫 SQL 非關係型資料庫 NoSQL(Not noly sql) 常見:redis, MongDB
1. Mysql基本命令列操作
每行都必須帶;
結尾
-- 進入 mysql -uroot -p -- 修改使用者名稱密碼(實際是對儲存密碼的表的修改) update mysql.user set authentication_string=password('') where user = 'root' and Host = 'localhost'; -- 重新整理許可權 flush privileges; -- 展示所有資料庫 show databases; -- 切換資料庫 mysql> use school Database changed -- 展示所有的表 show tables; -- 描述表中的行列等資訊 desc student;-- student是表名
DDL, DML, DQL, DCL D...L :資料庫 ... 語言
定義,管理,查詢, 控制
2. 操作資料庫
操作資料庫,操作表,操作資料
1. 操作資料庫
-
建立
create database 資料庫名 ; -- 加判斷 create database if not exists 資料庫名 ;
-
刪除
drop database 資料庫名 ; drop database if exists 資料庫名 ;
-
使用
-- 切換資料庫 use 資料庫名 ; -- 如果物件名稱為一個特殊字元或欄位(和sql系統欄位有重複,則增加``) select `user` from student; -- user是student表中的一個屬性
-
檢視資料庫
show databases;
2. 資料庫資料型別
常用:
int 對應 java中的int
varchar 對應 String
text 用於儲存長文字
timestamp 為時間戳,
datetime常用
資料庫中int型別,設定的Length只和欄位屬性中的Zerofill有關(補幾個0),設定為int之後,最大資料量就是4位元組,和設定的Length無關。
-
數值
- 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.util.Date
- date YYYY-MM-DD 日期
- time HH:mm:ss 時間日期
- datetime 最常用的時間格式
- timestamp 時間戳 , 1970.1.1到現在的毫秒數
- year 年份表示
-
null
- 沒有值,未知
3. 資料庫的欄位屬性
-
Unsigned:無符號整數,宣告不能為負數
-
Zerofill: 0填充,不足的位數,使用0填充
-
Auto Incr: 自增, 自動在上一條記錄的基礎上加1,用來設定唯一主鍵,理解為index,必須是整數型別,
可以自定義主鍵的初始值和增量(在sqlyog建立表格的 advanced裡設定)
-
Not null: 當設定為not null時,如果不給該屬性賦值,就會報錯。
-
Default:設定預設值
每張表中,必須存在的5個屬性(專案階段):表示一個記錄存在的意義
id 主鍵
`version` 樂觀鎖
is_delete 偽刪除
gmt_create 建立時間
gmt_update 修改時間
4. 建立資料庫表
-- 字串使用單引號
-- 所有的語句後加逗號, 最後一個不用加
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 '密碼',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性別',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT 'address',
`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式:
create table 表名(
屬性名 型別宣告(型別長度) 欄位屬性,
primary key (屬性名) -- 最後一個沒有,號
)表型別 字元編碼
檢視建好的資料庫的定義 SHOW CTEATE TABLE 表明
3. 資料庫引擎型別
InnoDB | MyISAM | |
---|---|---|
事務支援 | 支援 | 不支援 |
外來鍵支援 | 支援 | 不支援 |
行級鎖 | 支援 | 不支援(表級鎖) |
聚集索引 | 支援 | 不支援 |
全文索引 | 不支援 | 支援 |
表空間 | 大,為MyISAM的兩倍 | 小 |
全文索引:可以在一篇文章中索引內容
MyISAM:節約空間,速度快
InnoDB: 安全性高,事務處理, 支援多表多使用者處理(支援行鎖和外來鍵)
所有的資料庫都存在於data目錄下,本質還是檔案儲存
儲存區別:
InnoDB:生成*.frm
檔案, 和上層資料夾中的ibdata1
檔案。
MyISAM:
*.frm
表結構的定義檔案*.MYD
資料檔案data*.MYI
索引檔案index
如果不設定charset,mysql預設字符集編碼。
修改方法:1. 建表時選擇charset=utf8;2. 在my.ini 中配置, 新增character-set-server=utf8