1. 程式人生 > 其它 >[資料庫 02] 資料庫 資料型別 引擎型別

[資料庫 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. 操作資料庫

  1. 建立

    create database 資料庫名 ;
    -- 加判斷
    create database if not exists 資料庫名 ;
    
  2. 刪除

    drop database 資料庫名 ;
    drop database if exists 資料庫名 ;
    
  3. 使用

    -- 切換資料庫
    use 資料庫名 ;
    -- 如果物件名稱為一個特殊字元或欄位(和sql系統欄位有重複,則增加``)
    select `user` from student; -- user是student表中的一個屬性
    
  4. 檢視資料庫

    show databases;
    

2. 資料庫資料型別

常用:

int 對應 java中的int

varchar 對應 String

text 用於儲存長文字

timestamp 為時間戳,

datetime常用

資料庫中int型別,設定的Length只和欄位屬性中的Zerofill有關(補幾個0),設定為int之後,最大資料量就是4位元組,和設定的Length無關。


  1. 數值

    • tinyint 1位元組, smallint 2位元組, mediumint 3位元組, int 4位元組;== bigint 8位元組;
    • float 4位元組
    • double 8位元組
    • decimal 字串形式的浮點數(金融計算用)
  2. 字串

    • char 固定長字串, 0~255
    • varchar 可變長字串 0~65535
    • tinytext 微型文字 2^8 -1,部落格資訊足夠用
    • **text 文字串,大型文章 2^16 -1 **
  3. 時間日期

    java.util.Date

    • date YYYY-MM-DD 日期
    • time HH:mm:ss 時間日期
    • datetime 最常用的時間格式
    • timestamp 時間戳 , 1970.1.1到現在的毫秒數
    • year 年份表示
  4. null

    • 沒有值,未知

3. 資料庫的欄位屬性

  1. Unsigned:無符號整數,宣告不能為負數

  2. Zerofill: 0填充,不足的位數,使用0填充

  3. Auto Incr: 自增, 自動在上一條記錄的基礎上加1,用來設定唯一主鍵,理解為index,必須是整數型別,

    可以自定義主鍵的初始值和增量(在sqlyog建立表格的 advanced裡設定)

  4. Not null: 當設定為not null時,如果不給該屬性賦值,就會報錯。

  5. 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