一寸五、mysql在liunx環(huán)境安裝
1.1 下載mysql數(shù)據(jù)庫鏡像
# docker pull mysql:5.7.22
1.2 創(chuàng)建mysql掛載目錄
# mkdir -p /opt/mysql/data
1.3 編寫mysql配置文件
進(jìn)入/opt/mysql目錄中梳杏,編寫mysql配置文件
# cd /opt/mysql
# vim my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
port=3306
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
long_query_time = 5
slow_query_log = 1
slow_query_log_file = slow.log
max_connections=3000
skip-name-resolve
back_log=384
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days = 7
server-id = 123
1.4 啟動mysql數(shù)據(jù)庫容器
命令:
# pwd
/opt/mysql
# docker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name mysql -p 3306:3306 -v $(pwd)/data:/var/lib/mysql -v $(pwd)/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.22
注意:
安裝mysql時十性,需要將連接信息保存至安全的文件中塑悼,需要保存如下信息:
Mysql:
連接IP:mysql服務(wù)器內(nèi)網(wǎng)IP地址
連接端口:3306
連接密碼:123456
二厢蒜、mysql庫表創(chuàng)建
2.1 mysql數(shù)據(jù)庫創(chuàng)建
mysql創(chuàng)建數(shù)據(jù)庫斑鸦,并且指定編碼utf8
CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
注:utf8mb4兼容utf8,且比utf8能表示更多的字符固以。無特殊情況憨琳,用uft8
2.2 mysql數(shù)據(jù)表創(chuàng)建
CREATE TABLE IF NOT EXISTS `table`(
`geekdocs_id` INT UNSIGNED AUTO_INCREMENT,
`geekdocs_title` VARCHAR(100) NOT NULL,
`geekdocs_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `geekdocs_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
參數(shù)解釋:
- 如果你不想字段為 NULL 可以設(shè)置字段的屬性為 NOT NULL栽渴,在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為NULL 稳懒,就會報錯场梆。
- AUTO_INCREMENT定義列為自增的屬性或油,一般用于主鍵,數(shù)值會自動加1腔彰。
- PRIMARY KEY關(guān)鍵字用于定義列為主鍵霹抛。 您可以使用多列來定義主鍵杯拐,列間以逗號分隔世蔗。
- ENGINE 設(shè)置存儲引擎污淋,CHARSET 設(shè)置編碼寸爆。
三而昨、mysql常用數(shù)據(jù)類型
3.1 數(shù)據(jù)類型介紹
數(shù)據(jù)類型是指列、存儲過程參數(shù)着憨、表達(dá)式和局部變量的數(shù)據(jù)特征甲抖,它決定了數(shù)據(jù)的存儲格式,代表了不同的信息類型挫剑。
有一些數(shù)據(jù)是要存儲為數(shù)字的樊破,數(shù)字當(dāng)中有些是要存儲為整數(shù)唆铐、小數(shù)艾岂、日期型等...
MySQL 支持多種數(shù)據(jù)類型,主要有數(shù)值類型脆炎、日期/時間類型和字符串類型秒裕。
- 數(shù)值類型:包括整數(shù)類型 TINYINT簇爆、SMALLINT入蛆、MEDIUMINT哨毁、INT源武、BIGINT话浇、浮點(diǎn)小數(shù)數(shù)據(jù)類型 FLOAT和 DOUBLE幔崖、定點(diǎn)小數(shù)類型 DECIMAL。
- 日期/時間類型:YEAR 吉嫩、TIME自娩、 DATE、 DATETIME 和 TIMESTAMP智什。
- 字符串類型: CHAR 荠锭、VARCHAR证九、 BINARY愧怜、 VARBINARY妈拌、 BLOB尘分、 TEXT著摔、 ENUM定续、 SET 摹察。
3.2 整數(shù)類型
3.2.1 MySQL中的整數(shù)型數(shù)據(jù)類型:
類型名稱 | 大小 | 范圍(有符號) | 范圍(無符號) | 用途 |
---|---|---|---|---|
TINYINT | 1個字節(jié) | (-128供嚎,127) | (0寸宏,255) | 小整數(shù)值 |
SMALLINT | 2個字節(jié) | (-32768氮凝,32767) | (0罩阵,65535) | 大整數(shù)值 |
MEDIUMINT | 3個字節(jié) | (-8388608稿壁,8388607) | (0傅是,16777215) | 大整數(shù)值 |
INT(INTEGER) | 4個字節(jié) | (-2147483648,2147483647) | (0蕾羊,4294967295) | 大整數(shù)值 |
BIGINT | 8個字節(jié) | (-9233372036854775808喧笔,9223372036854775807) | (0,18446744073 709551615) | 極大整數(shù)值 |
舉例說明:整數(shù)類型的大小與范圍的關(guān)系
例如:整數(shù)類型 int
1字節(jié)=8位
4字節(jié)=32位龟再,每位由0或者1組成书闸,所以int得取值范圍是:2的32次方 位
3.2.2 有符號與無符號
無符號unsigned 表示設(shè)置的的數(shù)據(jù)為0或者正數(shù);
有符號則可以是負(fù)數(shù) -利凑;
舉例說明(使用TINYINT數(shù)據(jù)類型進(jìn)行舉例)
如果帶符號,需要用1位表示符號(1表示負(fù)數(shù),0表示正),剩下7位表示數(shù)據(jù)浆劲,那么表示范圍是-127—127(包括-0和+0)
如果不帶符號,8位全部表示數(shù)據(jù),那么表示范圍是 0–256
3.2.3 類型的大小、取值范圍與數(shù)據(jù)長度
我們經(jīng)常會把數(shù)據(jù)類型設(shè)置成INT(11)哀澈,這后面的數(shù)字11表示的是該數(shù)據(jù)類型指定的顯示寬度牌借。
- 舉例一:
例如走哺,假設(shè)聲明一個 INT 類型的字段:
create table t1(year int(4));
我們向表中插入兩條數(shù)據(jù):
insert into t1(year) values(1999),(19999);
可以插入束凑,而且沒有警告谈秫,然后查看表中數(shù)據(jù)如下:
mysql> select * from t1;
+-------+
| year |
+-------+
| 1999 |
| 19999 |
+-------+
2 rows in set (0.00 sec)
- 舉例二:
我們再次向表中插入一條數(shù)據(jù)硕淑,此值超出了int數(shù)據(jù)類型有符號的范圍:2147483647
INSERT INTO t1(YEAR) VALUES(2147483648);
向數(shù)據(jù)庫中插入此數(shù)據(jù)時拇囊,出現(xiàn)了一條警告:
Warning Code : 1264
Out of range value for column 'year' at row 1
然后查看表中數(shù)據(jù)如下:
mysql> select * from t1;
+------------+
| year |
+------------+
| 1999 |
| 19999 |
| 2147483647 |
+------------+
3 rows in set (0.00 sec)
- 根據(jù)以上實驗可得出結(jié)論:
顯示寬度和數(shù)據(jù)類型的取值范圍是無關(guān)的纠永,顯示寬度只是指明 MySQL 最大可能顯示的數(shù)字個數(shù)英上,數(shù)值的位數(shù)小于指定的寬度會由空格填充相恃;如果插入了大于顯示寬度的值见剩,只要該值不超過該類型整數(shù)的取值范圍,數(shù)值依然可以插入,而且能夠顯示出來。
長度的作用為為整型指定顯示寬度送火,如INT(11)坚俗,對于存儲來說INT(1)和INT(20)是相同的恩闻,它不會限制值的合法范圍尉剩,只是規(guī)定了MySQL與客戶端的交互應(yīng)該顯示多少位而已皂林,比如你向INT(1)中插入了123456值著隆,數(shù)據(jù)庫中其實已經(jīng)存入了123456浦辨,只是對于客戶端查出來是1而已旦装。
顯示寬度和數(shù)據(jù)類型的取值范圍是無關(guān)的,顯示寬度只是指明 MySQL 最大可能顯示的數(shù)字個數(shù),數(shù)值的位數(shù)小于指定的寬度會由空格填充;如果插入了大于顯示寬度的值,只要該值不超過該類型整數(shù)的取值范圍,數(shù)值依然可以插入强岸,而且能夠顯示出來悯衬。
3.2.4 tinyint、int瘸味、decimal 應(yīng)用場景
- tinyint尘奏、int赋铝、decimal 應(yīng)用場景
tinyint:tinyint 一般用于存放 status,type 這種數(shù)值小的數(shù)據(jù)臂外,不夠用時可能會用 smallint殖属,為了避免數(shù)據(jù)庫被過度設(shè)計原环,布爾、枚舉類型也采用 tinyint;
int:可用于存儲時間戳與自增ID主鍵;
decimal: DECIMAL類型可用于存儲對精度要求比較高的數(shù)值,比如訂單金額存儲等。
- 如何選擇適合的數(shù)據(jù)類型
為了更好的提高系統(tǒng)性能城丧,選擇合適的數(shù)據(jù)類型非常重要蚊惯,以下幾個簡單的原則有助于你更好的做出選擇:
更小通常是最好的:越小酝豪,占用cpu、磁盤和內(nèi)存越少重窟;
盡量簡單:簡單的數(shù)據(jù)類型可以減少cpu開銷载萌;
盡量避免null:包含null值的列在sql語句中通常很難優(yōu)化。
3.3 日期/時間類型
mysql(5.5)所支持的日期時間類型有:DATETIME巡扇、 TIMESTAMP扭仁、DATE、TIME厅翔、YEAR乖坠。本篇文章此處主要講解DATETIME類型
幾種類型比較如下:
日期時間類型 | 占用空間 | 日期格式 | 最小值 | 最大值 | 零值表示 |
---|---|---|---|---|---|
DATETIME | 8 bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
TIMESTAMP | 4 bytes | YYYY-MM-DD HH:MM:SS | 19700101080001 | 2038 年的某個時刻 | 00000000000000 |
DATE | 4 bytes | YYYY-MM-DD | 1000-01-01 | 9999-12-31 | 0000-00-00 |
TIME | 3 bytes | HH:MM:SS | -838:59:59 | 838:59:59 | 00:00:00 |
YEAR | 1 bytes | YYYY | 1901 | 2155 | 0000 |
注:dateTime類型用來記錄日期和時間,其作用等價于date類型和Time類型的組合刀闷。一個dateTime類型的字段可以用一個date類型的字段和一個time類型的字段代替熊泵。但是如果需要同時記錄日期和時間,選擇dateTime類型是個不錯的選擇甸昏。
3.4 字符串類型
MySQL 中的字符串類型有 CHAR顽分、VARCHAR、TINYTEXT施蜜、TEXT卒蘸、MEDIUMTEXT、LONGTEXT、ENUM缸沃、SET 等恰起。
3.4.1 MySQL中的字符串?dāng)?shù)據(jù)類型:
下表中列出了 MySQL 中的字符串?dāng)?shù)據(jù)類型,括號中的M表示可以為其指定長度趾牧。
類型名稱 | 說明|存儲需求
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字節(jié) | 定長字符串 |
VARCHAR | 0-65535字節(jié) | 變長字符串 |
TINYTEXT | 0-255字節(jié) | 短文本字符串 |
TEXT | 0-65535字節(jié) | 長文本數(shù)據(jù) |
MEDIUMTEXT | 0-16777215字節(jié) | 中等長度文本數(shù)據(jù) |
LONGTEXT | 0-4294967295字節(jié) | 極大文本數(shù)據(jù) |
3.4.2 char和varchar
char類型和varchar類型都是在創(chuàng)建表時指定了最大長度检盼,其基本形式如下:字符串類型(M)。其中翘单,字符串類型參數(shù)指定了數(shù)據(jù)類型是char類型還是varchar類型吨枉,M參數(shù)指定了該字符串的最大長度為M。舉個例子县恕,char(4)就是指數(shù)據(jù)類型是char類型东羹,其最大長度為4。
char類型的長度是固定的忠烛,在創(chuàng)建表時就指定了属提,其長度可以是0~~255的任意值。
比如美尸,char(100)就是指定char類型的長度為100冤议。
varchar類型的長度是可變的,在創(chuàng)建表時指定了最大長度师坎。定義時恕酸,其最大值可以取0~~65525之間的任意值。指定了varchar類型的最大值以后胯陋,其長度可以在o到最大長度之間蕊温。
比如,varchar(100)的最大長度是100遏乔,但是义矛,不是每條記錄都要占用100個字節(jié)。而是在這個最大值范圍內(nèi)盟萨,使用多少分配多少凉翻,varchar類型實際占用的空間為字符串的實際長度加一。這樣捻激,即可有效節(jié)約系統(tǒng)的空間制轰。
3.4.3 char、varchar胞谭、txt 應(yīng)用場景
- char的優(yōu)缺點(diǎn):定長垃杖,效率高,存在空間浪費(fèi)的可能丈屹;一般用于固定長度的表單提交數(shù)據(jù)存儲缩滨;例如:身份證號,手機(jī)號,電話脉漏,密碼等
- varchar的優(yōu)缺點(diǎn):存變長大數(shù)據(jù),速度慢袖牙,不存在空間浪費(fèi)侧巨;如果字符串列的最大長度比平均長度大很多;列的更新很少鞭达;所以碎片不是問題司忱;使用了像UTF-8這樣復(fù)雜的字符集,每個字符都使用不同的字節(jié)數(shù)進(jìn)行存儲畴蹭,那么應(yīng)該使用varchar
- text:存變長大數(shù)據(jù)坦仍,速度慢,不存在空間浪費(fèi)叨襟;一般用來直接存儲一個比較大的文本繁扎,比如說一篇文章,一篇新聞