當前位置:網站首頁>Linux Mysql 數據庫基礎

Linux Mysql 數據庫基礎

2022-01-27 07:51:32 Dark_wWw

目錄

Linux Mysql 數據庫基礎

一、數據庫

數據庫簡介

數據庫的分類

數據庫的發展史

數據庫系統發展階段

DBMS 數據庫管理系統

數據庫管理系統的優點

數據庫管理系統的基本功能

數據庫系統的架構

各種數據管理系統

 RDBMS 關系型數據庫

關系系統型數據庫相關概念

常用關系數據庫

關系型數據庫理論

二、關系型數據庫和非關系型數據庫

三、數據庫的基本概念

使用數據庫的必要性

數據(Data)

數據庫

數據庫管理系統(DBMS)

數據庫系統

訪問數據庫的流程

四、Mysql 的安裝

Mysql 組成

五、多實例

多實例介紹

 六、安裝插件 使 SQL 命令使用時可以補全

 七、數據庫基本操作

SQL 分類

SQL 語言規範

SQL 語句分類

查看幫助信息

查看支持的字符集

查看錶  使用錶

管理數據庫

 八、數據

數據類型

整數型

浮點型(float 和 double )  近似值

定點數

字符串(char,varchar,text)


Linux Mysql 數據庫基礎

一、數據庫

數據庫簡介

涉及的數據量大

數據不隨程序的結束而消失

數據被多個應用程序共享

大數據

數據庫的分類

結構化的數據:即有固定格式和有限長度的數據。例如填的錶格就是結構化的數據,國籍:中華人

民共和國,民族:漢,性別:男,這都叫結構化數據

非結構化的數據:非結構化的數據越來越多,就是不定長、無固定格式的數據,例如網頁,有時候

非常長,有時候幾句話就沒了;例如語音,視頻都是非結構化

的數據

半結構化數據:比如:XML或者HTML的格式的數據

數據庫的發展史

文件管理系統的缺點

編寫應用程序不方便

數據冗餘不可避免

應用程序依賴性

不支持對文件的並發訪問

數據間聯系弱

難以按用戶視圖錶示數據

無安全控制功能

數據庫系統發展階段

萌芽階段:文件系統

        使用磁盤文件來存儲數據

初級階段:第一代數據庫

        出現了網狀模型、層次模型的數據庫

中級階段:第二代數據庫

        關系型數據庫和結構化查詢語言

高級階段:新一代數據庫

        “關系-對象”型數據庫

DBMS 數據庫管理系統

Database:數據庫是數據的匯集,它以一定的組織形式存於存儲介質上

DBMS:是管理數據庫的系統軟件,它實現數據庫系統的各種功能。是數據庫系統的核心

DBA:負責數據庫的規劃、設計、協調、維護和管理等工作

應用程序:指以數據庫為基礎的應用程序

數據庫管理系統的優點

相互關聯的數據的集合

較少的數據冗餘

程序與數據相互獨立

保證數據的安全、可靠

最大限度地保證數據的正確性

數據可以並發使用並能同時保證一致性

數據庫管理系統的基本功能

數據定義

數據處理

數據安全

數據備份

數據庫系統的架構

單機架構

大型主機/終端架構

主從式架構(C/S)

分布式架構

各種數據管理系統

層次數據庫

 網狀數據庫

 RDBMS 關系型數據庫

Relational Database Management System,關系模型最初由IBM公司的英國計算機科學家埃德加·科德

(Edgar F. Codd)於1969年描述,1974年,IBM開始開發系統R,這是一個開發RDBMS原型的研究項目

然而,第一個商業上可用的RDBMS是甲骨文,於1979年由關系軟件(現為甲骨文公司)發布

關系系統型數據庫相關概念

關系Relational :關系就是二維錶,其中:錶中的行、列次序並不重要

行row:錶中的每一行,又稱為一條記錄record

列column:錶中的每一列,稱為屬性,字段,域field

主鍵Primary key:PK , 用於惟一確定一個記錄的字段,一張錶只有一個主鍵

域domain:屬性的取值範圍,如,性別只能是'男'和'女'兩個值,人類的年齡只能0-150

常用關系數據庫

MySQL: MySQL, MariaDB, Percona Server

PostgreSQL: 簡稱為pgsql,EnterpriseDB

Oracle

MSSQL

DB2

錶一

 錶二

 數據庫排名

DB-Engines Ranking - popularity ranking of database management systems

關系型數據庫理論

實體聯系類型 E-R

實體Entity:客觀存在並可以相互區分的客觀事物或抽象事件稱為實體,在E-R圖中用矩形框錶示實

體,把實體名寫在框內

屬性:實體所具有的特征或性質

聯系:聯系是數據之間的關聯集合,是客觀存在的應用語義鏈

實體內部的聯系:指組成實體的各屬性之間的聯系。如職工實體中,職工號和部門經理號之間

有一種關聯關系

實體之間的聯系:指不同實體之間聯系。例:學生選課實體和學生基本信息實體之間

實體之間的聯系用菱形框錶示

 聯系類型

一對一聯系(1:1)

一對多聯系(1:n):外鍵

多對多聯系(m:n):增加第三張錶

數據的操作

數據提取:在數據集合中提取感興趣的內容。SELECT

數據更新:變更數據庫中的數據。INSERT、DELETE、UPDATE

數據庫規劃流程

收集數據,得到字段

收集必要且完整的數據項

轉換成數據錶的字段

二、關系型數據庫和非關系型數據庫

1)描述主流的數據庫系統 關系型數據庫: Mysql(Oracle公司) 、 SQL server(微軟) 、access(微軟公司office產品) Oracle 、DB2(IBM公司),sybase(sybase) 等等

2)關系型數據庫和非關系型數據庫的區別 關系數據庫: 關系數據庫結構是二維數據庫錶,二維錶當中每個字段(列)用來描述對象的一個屬性, 每個記錄(行)用來描述一個對象的信息(完整信息),關系數據庫寫到哪裏也就是存儲在硬盤當中 讀寫系統就會受到的IO限制或者瓶頸

其他 關系型數據庫最典型的數據結構是錶,由二維錶及其之間的聯系所組成的一個數據組織 優點: 1、易於維護:都是使用錶結構,格式一致; 2、使用方便:SQL語言通用,可用於複雜查詢; 3、複雜操作:支持SQL,可用於一個錶以及多個錶之間非常複雜的查詢。 缺點: 1、讀寫性能比較差,尤其是海量數據的高效率讀寫; 2、固定的錶結構,靈活度稍欠; 3、高並發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸

緩存加速軟件 非關系型數據庫(NoSQL): MongoDB 、 Redis(內存數據庫/緩存數據庫)K-V鍵值對、與之類似的Memcache,K-V鍵值對 redis-memecache對比: 相同點:存儲高熱數據(在內存中高速運行) 不同點:redis可以做持久化保存,可以存儲對象

非關系型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或者鍵值對等

優點:

格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、 圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型。

速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;

高擴展性與高可用性

成本低:nosql數據庫部署簡單,基本都是開源軟件

缺點:

不提供sql支持,學習和使用成本較高

無事務處理

數據結構相對複雜,複雜查詢方面稍欠

三、數據庫的基本概念

使用數據庫的必要性

使用數據庫可以高效且條理分明地存儲數據,使人們能够更加迅速、方便地管理數據。 數據庫具有以下特點

可以結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。

可以有效地保持數據信息的一致性、完整性,降低數據冗餘

可以滿足應用的共享和安全方面的要求

數據庫技術是計算機科學的核心技術之一,具有完備的理論基礎。對數據庫基本概念的掌握,將有助於對數據庫的理解

數據(Data)

描述事物的符號記錄

包括數字,文字、圖形、圖像、聲音、檔案記錄等

以“記錄”形式按統一的格式進行存儲

將不同的記錄組織在一起

用來存儲具體數據

數據庫

錶的集合,是存儲數據的倉庫

以一定的組織方式存儲的相互有關的數據集合

數據庫管理系統(DBMS)

數據庫管理系統(Database Management System,DBMS)是實現對數據庫資源有效組織、 管理和存取的系統軟件。它在操作系統的支持下,支持用戶對數據庫的各項操作。DBMS 主要包括以下功能

數據庫的建立和維護功能:包括建立數據庫的結構和數據的錄入與轉換、數據庫的 轉儲與恢複、數據庫的重組與性能監視等功能

數據定義功能:包括定義全局數據結構、局部邏輯數據結構、存儲結構、保密模式 及信息格式等功能。保證存儲在數據庫中的數據正確、有效和相容,以防止不合語 義的錯誤數據被輸入或輸出。

數據操縱功能:包括數據查詢統計和數據更新兩個方面

數據庫的運行管理功能:這是數據庫管理系統的核心部分,包括並發控制、存取控 制、數據庫內部維護等功能

通信功能:DBMS 與其他軟件系統之間的通信,如 Access 能與其他 Office 組件進行 數據交換

數據庫系統

是一個人機系統,由硬件、OS、數據庫、DBMS、應用軟件和數據庫用戶組成

用戶可以通過DBMS或應用程序操作數據庫

訪問數據庫的流程

 過程:

應用程序把查詢SQL語句發給服務器端執行

服務器解析請求的SQL語句

語句執行

PS:

確保SQL語法正確

確保SQL語義上的正確性即對象是否存在

數據庫用戶是否具有相應的訪問權限

四、Mysql 的安裝

Mysql 組成

客戶端

mysql: 交互式的CLI工具

mysqladmin:基於mysql協議管理mysqld

mysqlimport:數據導入工具

MyISAM存儲引擎的管理工具

myisamchk:檢查MyISAM庫

myisampack:打包MyISAM錶,只讀

服務端程序

mysqld_safe

mysqld

mysqld_multi 多實例 ,示例:mysqld_multi

[[email protected] ~]#yum info mariadb
可安裝的軟件包
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
可安裝的軟件包
名稱    :mariadb
架構    :x86_64
時期       :1
版本    :5.5.56
發布    :2.el7
大小    :8.7 M
源    :yum
簡介    : A community developed branch of MySQL
網址    :http://mariadb.org
協議    : GPLv2 with exceptions and LGPLv2 and BSD
描述    : MariaDB is a community developed branch of
         : MySQL. MariaDB is a multi-user,
         : multi-threaded SQL database server. It is a
         : client/server implementation consisting of
         : a server daemon (mysqld) and many different
         : client programs and libraries. The base
         : package contains the standard MariaDB/MySQL
         : client programs and generic MySQL files.
 
MySQL被Sun收購後,搞了個過渡的6.0版本,沒多久就下線了,後來被Oracle收購後,終於迎來了像樣的5.6
版本,之後就是5.7、8.0版本。由於6.0版本號已被用過,7.x系列版本專用於NDB Cluster,因而新版本
號從8.0開始。

法一:編譯安裝

1. #安裝依賴包並解壓下載的mysql
yum install -y ncurses-devel autoconf cmake
tar zxf mysql-5.6.26.tar.gz 
 
2. #編譯安裝
cd mysql-5.6.26/
 
###編譯###
cmake  \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
 
###安裝###
make && make install -j4
 
3. #拷貝文件,並授權
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld 
chkconfig --add /etc/init.d/mysqld
chkconfig  mysqld --level 35 on
 
4. #設置環境變量,申明/宣告mysql命令便於系統識別
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
echo $PATH
 
5. #創建普通用戶管理mysql
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
 
 
6. #初始化初始化數據庫
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
 
7. #修改配置文件
vim /etc/init.d/mysqld 
 
##修改46,47行
basedir=/usr/local/mysql
datadir=/home/mysql
 
8. #啟動mysql
service mysqld start
ss -ntap|grep "3306"
 
9. #登錄及登出mysql
##給root賬號設置密碼
mysqladmin -u root -p password "123123"
##登錄mysql
mysql -u root -p
##登出mysql
mysql> exit
Bye

見:本人博客 Linux LAMP架構介紹及配置 第三小節

法二:YUM 安裝 5.7 版

1. #創建mysql源
cd /etc/yum.repos.d/
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
 
2. #安裝服務mysql-community-server
yum -y install mysql-community-server
 
3. #啟動服務
systemctl start mysqld
ss -ntap |grep 3306
 
4. #登入數據庫,但是密碼是默認的,需要查看
mysql -u root -p
grep password /var/log/mysqld.log
mysql -u root -p'+8saq%5+ljzG'
#特殊符號用單引號引起來
 
5. #登入數據庫後必須修改密碼
status
alter user [email protected]'localhost' identified by '[email protected]';
 
#可以使用mysql> \h查看幫助

五、多實例

多實例介紹

        什麼是數據庫多實例

多實例類似微信雙開,端口號類比微信賬號,數據庫類比聊天窗口,錶類比聊天記錄

MySQL多實例就是在一臺服務器上同時開啟多個不同的服務端口(如:3306、3307等),同時運

行多個MySQL服務進程,這些服務進程通過不同的Socket監聽不同的服務端口來提供服務。

多實例可能是MySQL的不同版本,也可能是MySQL的同一版本實現

        多實例的好處

可有效利用服務器資源。當單個服務器資源有剩餘時,可以充分利用剩餘資源提供更多的服務,且

可以實現資源的邏輯隔離節約服務器資源。例如公司服務器資源緊張,但是數據庫又需要各自盡量

獨立的提供服務,並且還需要到主從複制等技術,多實例就是最佳選擇

        多實例弊端

存在資源互相搶占的問題。比如:當某個數據庫實例並發很高或者SQL查詢慢時,整個實例會消耗

大量的CPU、磁盤I/O等資源,導致服務器上面其他的數據庫實例在提供服務的質量也會下降,所以

具體的需求要根據自己的實際情况而定

多實例 示例

1. #安裝mariadb-server並啟動登入系統
yum -y install mariadb-server
systemctl start mariadb.service
 
#一路回車,並設置密碼
mysql_secure_installation 
 
#登入系統
mysql -u root -p123123
 
 
 
2. #創建目錄和文件夾
mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
 
3. #設置屬主屬組
 chown -R mysql.mysql /mysql
 tree -d /mysql/
 
 4. #初始化數據庫
 mysql_install_db --user=mysql --datadir=/mysql/3306/data
 mysql_install_db --user=mysql --datadir=/mysql/3307/data
 mysql_install_db --user=mysql --datadir=/mysql/3308/data
 
 5. #編輯配置文件
vim /mysql/3306/etc/my.cnf 
[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid
 
6. #修改3307和3308配置文件
sed 's/3306/3307/' /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf
 
sed 's/3306/3308/' /mysql/3306/etc/my.cnf > 
/mysql/3308/etc/my.cnf
 
 
7. #准備啟動脚本
vim /mysql/3306/bin/mysqld
#!/bin/bash
 
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
 
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}
 
 
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}
 
 
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}
 
case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
 
8. #重複上述過程,分別建立3307,3308的啟動脚本
 
9. #授權並啟動服務
chmod +x /mysql/3306/bin/mysqld 
chmod +x /mysql/3307/bin/mysqld 
chmod +x /mysql/3308/bin/mysqld 
 
/mysql/3306/bin/mysqld start
/mysql/3307/bin/mysqld start
/mysql/3308/bin/mysqld start
 
#查看有沒有啟動成功
ss -natp|grep 33
 
 
10. #怎麼看mysql這個進程是不是超線程
1)#找到mysql進程號
pstree -p
2)#查看,5450就是查看的進程號
cat /proc/5450/status |grep Threads
 
11. #登入mysql
#示例
mysql -h127.0.0.1 -P3308
 
12. #怎麼殺掉這個進程,示例
/mysql/3308/bin/mysqld stop
 
13. #修改密碼示例
mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password  
'123123' 
 
14. #設置開機啟動
vim /etc/rc.d/rc.local
for i in {3306..3308};do /mysql/$i/bin/mysqld start;done
 
chmod +x /etc/rc.d/rc.local
 
開機後
bash /etc/rc.d/rc.local 

 六、安裝插件 使 SQL 命令使用時可以補全

1. #安裝插件
yum install -y libffi-devel
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
 
2. #將php包導入/opt下,解壓安裝php
cd /opt/
tar zxvf Python-3.7.7_.tgz
##編譯
cd Python-3.7.7/
./configure --prefix=/usr/local/Python-3.7.7/
 
##安裝
make && make install
 
##做軟連接
ln -s  /usr/local/Python-3.7.7/bin/python3.7  /usr/bin/python37
ln -s /usr/local/Python-3.7.7/bin/pip3.7 /usr/bin/pip37
pip37 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
ln -s /usr/local/Python-3.7.7/bin/mycli /usr/bin/mycli
 
3. #登錄
mycli -u root -p 000000
 
 
####如果不裝插件
[[email protected] ~]#vim /etc/my.cnf                       
[mysql]
prompt=(\\[email protected]\\h) [\\d]>\\_
 
auto-rehash

 七、數據庫基本操作

SQL 分類

數據庫:database

錶:table

行:row

列:column

索引:index

視圖:view

存儲過程:procedure

存儲函數:function

觸發器:trigger

事件調度器:event scheduler,任務計劃

用戶:user

權限:privilege

SQL 語言規範

在數據庫系統中,SQL 語句不區分大小寫,建議用大寫

SQL語句可單行或多行書寫,默認以 " ; " 結尾

關鍵詞不能跨多行或簡寫

用空格和TAB 縮進來提高語句的可讀性

子句通常比特於獨立行,便於編輯,提高可讀性

數據對象和命名

數據庫的組件(對象)

數據庫、錶、索引、視圖、用戶、存儲過程、函數、觸發器、事件調度器等

命名規則

必須以字母開頭,後續可以包括字母,數字和三個特殊字符(# _ $)

不要使用MySQL的保留字,如tabble select show databases

SQL 語句分類

        DDL: Data Defination Language 數據定義語言

CREATE,DROP,ALTER

        DML: Data Manipulation Language 數據操縱語言

INSERT,DELETE,UPDATE

軟件開發:CRUD

                DQL:Data Query Language 數據查詢語言

SELECT

        DCL:Data Control Language 數據控制語言

GRANT,REVOKE

        TCL:Transaction Control Language 事務控制語言

COMMIT,ROLLBACK,SAVEPOINT

#DDL: Data Defination Language 數據定義語言
CREATE,DROP,ALTER
 
#DML: Data Manipulation Language 數據操縱語言
INSERT,DELETE,UPDATE
 
#DQL:Data Query Language 數據查詢語言
SELECT 
 
 
#DCL:Data Control Language 數據控制語言
GRANT,REVOKE,COMMIT,ROLLBACK
 
 
SELECT *                 #SELECT子句
FROM products             #FROM子句
WHERE price>666         #WHERE子句

查看幫助信息

mysql> help create
#help 後面跟上具體命令可以查看幫助
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   CREATE DATABASE
   CREATE EVENT
   CREATE FUNCTION
   CREATE FUNCTION UDF
   CREATE INDEX
   CREATE LOGFILE GROUP
   CREATE PROCEDURE
   CREATE SERVER
   CREATE TABLE
   CREATE TABLESPACE
   CREATE TRIGGER
   CREATE USER
   CREATE VIEW
   SHOW
   SHOW CREATE DATABASE
   SHOW CREATE EVENT
   SHOW CREATE FUNCTION
   SHOW CREATE PROCEDURE
   SHOW CREATE TABLE
   SHOW CREATE USER
   SPATIAL
   
   
 ##也可以進一步
 mysql> help create DATABASE \G

查看支持的字符集

show charset;
#查看支持字符集
默認拉丁文字
 
utf8     | UTF-8 Unicode   
#閹割版的
 
utf8mb4  | UTF-8 Unicode 
#真實的版本
 
我們編譯安裝已經修改過了

查看錶  使用錶

mysql> show databases;
#查看當前數據庫
 
 
mysql> use mysql;
#使用 mysql錶
 
 
MySQL [email protected]:school> select * form  yh;
#查看yh錶格的

管理數據庫

創建數據庫

CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME'
CHARACTER SET 'character set name'
COLLATE 'collate name';
 
#創建數據庫
create database yh1;
 
#創建的時候指定語言
create database db3 charset=utf8;
 
 
#查看創建的數據庫
show create  database yh1;
 
#加的數據比特置
cd /usr/local/mysql/data/test/

 修改數據庫

ALTER DATABASE DB_NAME character set utf8;

 删除數據庫

DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
 
例如
drop database yh22;

 查看數據庫列錶

SHOW DATABASES;
 
例如:
show databases;

 查看當前目錄情况

 system ls

 查看主機名

 system hostname

 查看當前數據庫版本信息

mysql -V

 八、數據

數據類型

數據長什麼樣

數據需要多少空間來存放

數據類型

系統內置數據類型

用戶定義數據類型

MySQL**支持多種內置數據類型**

數值類型

日期/時間類型

字符串(字符)類型

數據類型參考鏈接

https://dev.mysql.com/doc/refman/8.0/en/data-types.html

選擇正確的數據類型對於獲得高性能至關重要,三大原則:

更小的通常更好,盡量使用可正確存儲數據的最小數據類型

簡單就好,簡單數據類型的操作通常需要更少的CPU周期

盡量避免NULL,包含為NULL的列,對MySQL更難優化

整數型

tinyint(m) 1個字節 範圍(-128~127)

smallint(m) 2個字節 範圍(-32768~32767)

mediumint(m) 3個字節 範圍(-8388608~8388607)

int(m) 4個字節 範圍(-2147483648~2147483647)

bigint(m) 8個字節 範圍(+-9.22*10的18次方)

上述數據類型,如果加修飾符unsigned後,則最大值翻倍

如:tinyint unsigned的取值範圍為(0~255)

浮點型(float 和 double )  近似值

float(m,d) 單精度浮點型 8比特精度(4字節) m總個數,d小數比特, 注意: 小數點不占用總個數

double(m,d) 雙精度浮點型16比特精度(8字節) m總個數,d小數比特, 注意: 小數點不占用總個數

設一個字段定義為float(6,3),如果插入一個數123.45678,實際數據庫裏存的是123.457,但總個數還以

實際為准,即6比特

定點數

在數據庫中存放的是精確值,存為十進制

格式 decimal(m,d) 錶示 最多 m 比特數字,其中 d 個小數,小數點不算在長度內

比如: DECIMAL(6,2) 總共能存6比特數字,末尾2比特是小數,字段最大值 9999.99 (小數點不算在長度內)

參數m<65 是總個數,d<30且 d<m 是小數比特

MySQL5.0和更高版本將數字打包保存到一個二進制字符串中(每4個字節存9個數字)。

例如: decimal(18,9)小數點兩邊將各存儲9個數字,一共使用9個字節:其中,小數點前的9個數字用4個

字節,小數點後的9個數字用4個字節,小數點本身占1個字節

浮點類型在存儲同樣範圍的值時,通常比decimal使用更少的空間。float使用4個字節存儲。double占用

8個字節

因為需要額外的空間和計算開銷,所以應該盡量只在對小數進行精確計算時

字符串(char,varchar,text)

char(n) 固定長度,最多255個字符,注意不是字節

varchar(n) 可變長度,最多65535個字符

tinytext 可變長度,最多255個字符

text 可變長度,最多65535個字符

mediumtext 可變長度,最多2的24次方-1個字符

longtext 可變長度,最多2的32次方-1個字符

BINARY(M) 固定長度,可存二進制或字符,長度為0-M字節

VARBINARY(M) 可變長度,可存二進制或字符,允許長度為0-M字節

內建類型:ENUM枚舉, SET集合

char和varchar的比較

參考:MySQL :: MySQL 8.0 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types

CREATE DATABASE school;
USE school;
CREATE TABLE ky15 (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'', PRIMARY KEY (id));
DESC zzz;

版權聲明
本文為[Dark_wWw]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201270751320425.html

隨機推薦