mysql學習筆記 51 mysql學習筆記

2021-10-17 20:48:29 字數 4919 閱讀 3494

-----------------初學mysql時整理,隨時更新--------------

/* 資料操作 */ ------------------

-- 增

insert [into] 表名 [(字段列表)] values (值列表)[, (值列表), ...]

-- 如果要插入的值列表包含所有字段並且順序一致,則可以省略字段列表。

-- 可同時插入多條資料記錄!

replace 與 insert 完全一樣,可互換。

insert [into] 表名 set 欄位名=值[, 欄位名=值, ...]

-- 查

select 字段列表 from 表名[ 其他子句]

-- 可來自多個表的多個字段

-- 其他子句可以不使用

-- 字段列表可以用*代替,表示所有字段

-- 刪

delete from 表名[ 刪除條件子句]

沒有條件子句,則會刪除全部

-- 改

update 表名 set 欄位名=新值[, 欄位名=新值] [更新條件]

/* 字符集編碼 */ ------------------

-- mysql、資料庫、表、欄位均可設定編碼

-- 資料編碼與客戶端編碼不需一致

show variables like 'character_set_%' -- 檢視所有字符集編碼項

character_set_client 客戶端向伺服器傳送資料時使用的編碼

character_set_results 伺服器端將結果返回給客戶端所使用的編碼

character_set_connection 連線層編碼

set 變數名 = 變數值

set character_set_client = gbk;

set character_set_results = gbk;

set character_set_connection = gbk;

set names gbk; -- 相當於完成以上三個設定

-- 校對集

校對集用以排序

show character set [like 'pattern']/show charset [like 'pattern'] 檢視所有字符集

show collation [like 'pattern'] 檢視所有校對集

charset 字符集編碼 設定字符集編碼

collate 校對集編碼 設定校對集編碼

/* 資料型別(列型別) */ ------------

1. 數值型別

-- a. 整型 ----------

型別 位元組 範圍(有符號位)

tinyint 1位元組 -128 ~ 127 無符號位:0 ~ 255

smallint 2位元組 -32768 ~ 32767

mediumint 3位元組 -8388608 ~ 8388607

int 4位元組

bigint 8位元組

int(m) m表示總位數

- 預設存在符號位,unsigned 屬性修改

- 顯示寬度,如果某個數不夠定義欄位時設定的位數,則前面以0補填,zerofill 屬性修改

例:int(5) 插入乙個數'123',補填後為'00123'

- 在滿足要求的情況下,越小越好。

- 1表示bool值真,0表示bool值假。mysql沒有布林型別,通過整型0和1表示。常用tinyint(1)表示布林型。

-- b. 浮點型 ----------

型別 位元組 範圍

float(單精度) 4位元組

double(雙精度) 8位元組

浮點型既支援符號位 unsigned 屬性,也支援顯示寬度 zerofill 屬性。

不同於整型,前後均會補填0.

定義浮點型時,需指定總位數和小數字數。

float(m, d) double(m, d)

m表示總位數,d表示小數字數。

m和d的大小會決定浮點數的範圍。不同於整型的固定範圍。

m既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。

支援科學計數法表示。

浮點數表示近似值。

-- c. 定點數 ----------

decimal -- 可變長度

decimal(m, d) m也表示總位數,d表示小數字數。

儲存乙個精確的數值,不會發生資料的改變,不同於浮點數的四捨五入。

將浮點數轉換為字串來儲存,每9位數字儲存為4個位元組。

2. 字串型別

-- a. char, varchar ----------

char 定長字串,速度快,但浪費空間

varchar 變長字串,速度慢,但節省空間

m表示能儲存的最大長度,此長度是字元數,非位元組數。

不同的編碼,所占用的空間不同。

char,最多255個字元,與編碼無關.

varchar,最多65535字元,與編碼有關。

一條有效記錄最大不能超過65535個位元組。

utf8 最大為21844個字元,gbk 最大為32766個字元,latin1 最大為65532個字元

varchar 是變長的,需要利用儲存空間儲存 varchar 的長度,如果資料小於255個位元組,則採用乙個位元組來儲存長度,反之需要兩個位元組來儲存。

varchar 的最大有效長度由最大行大小和使用的字符集確定。

最大有效長度是65532位元組,因為在varchar存字串時,第乙個位元組是空的,不存在任何資料,然後還需兩個位元組來存放字串的長度,所以有效長度是64432-1-2=65532位元組。

例:若乙個表定義為 create table tb(c1 int, c2 char(30), c3 varchar(n)) charset=utf8; 問n的最大值是多少? 答:(65535-1-2-4-30*3)/3

-- b. blob, text ----------

blob 二進位制字串(位元組字串)

tinyblob, blob, mediumblob, longblob

text 非二進位制字串(字元字串)

tinytext, text, mediumtext, longtext

text 在定義時,不需要定義長度,也不會計算總長度。

text 型別在定義時,不可給default值

-- c. binary, varbinary ----------

類似於char和varchar,用於儲存二進位制字串,也就是儲存位元組字串而非字元字串。

char, varchar, text 對應 binary, varbinary, blob.

3. 日期時間型別

一般用整型儲存時間戳,因為php可以很方便的將時間戳進行格式化。

datetime 8位元組 日期及時間 1000-01-01 00:00:00 到 9999-12-31 23:59:59

date 3位元組 日期 1000-01-01 到 9999-12-31

timestamp 4位元組 時間戳 19700101000000 到 2038-01-19 03:14:07

time 3位元組 時間 -838:59:59 到 838:59:59

year 1位元組 年份 1901 - 2155

datetime 「yyyy-mm-dd hh:mm:ss」

timestamp 「yy-mm-dd hh:mm:ss」

「yyyymmddhhmmss」

「yymmddhhmmss」

yyyymmddhhmmss

yymmddhhmmss

date 「yyyy-mm-dd」

「yy-mm-dd」

「yyyymmdd」

「yymmdd」

yyyymmdd

yymmdd

time 「hh:mm:ss」

「hhmmss」

hhmmss

year 「yyyy」

「yy」

yyyy

yy4. 列舉和集合

-- 列舉(enum) ----------

enum(val1, val2, val3...)

在已知的值中進行單選。最大數量為65535.

列舉值在儲存時,以2個位元組的整型(smallint)儲存。每個列舉值,按儲存的位置順序,從1開始逐一遞增。

表現為字串型別,儲存卻是整型。

null值的索引是null。

空字串錯誤值的索引值是0。

-- 集合(set) ----------

set(val1, val2, val3...)

create table tab ( gender set('男', '女', '無') );

insert into tab values ('男, 女');

最多可以有64個不同的成員。以bigint儲存,共8個位元組。採取位運算的形式。

當建立表時,set成員值的尾部空格將自動被刪除。

/* 選擇型別 */

-- php角度

1. 功能滿足

2. 儲存空間盡量小,處理效率更高

3. 考慮相容問題

-- ip儲存 ----------

1. 只需儲存,可用字串

2. 如果需計算,查詢等,可儲存為4個位元組的無符號int,即unsigned

1) php函式轉換

ip2long可轉換為整型,但會出現攜帶符號問題。需格式化為無符號的整型。

利用sprintf函式格式化字串

sprintf("%u", ip2long('192.168.3.134'));

然後用long2ip將整型轉回ip字串

2) mysql函式轉換(無符號整型,unsigned)

inet_aton('127.0.0.1') 將ip轉為整型

inet_ntoa(2130706433) 將整型轉為ip

以上就是mysql學習筆記的全部內容。

mysql學習筆記 51 Mysql 學習筆記

一.首先進入mysql mysql u root p新增使用者許可權設定 grant all privileges on to jerry localhost identified by aa1234567 只允許本機訪問 grant all privileges on to jerry 10.80...

MySQL自學筆記系列 零基礎上手MySQL

本文是對我學習資料庫和mysql時學習筆記的整理。都是一些基本的語法規則,作為自己的mysql使用查詢手冊。1.資料庫簡介 介紹了什麼是資料庫,主流資料庫有哪些,mysql的特點。2.mysql 初識 了解資料庫的儲存結構,介紹建庫,建表的基本操作。3.mysql 資料型別 介紹mysql支援的資料...

Python 學習筆記 5 1 高階函式

高階函式英文叫higher order function。什麼是高階函式?我們以實際 為例子,一步一步深入概念。以python內建的求絕對值的函式abs 為例,呼叫該函式用以下 abs 10 10但是,如果只寫abs呢?abs infunction abs 可見,abs 10 是函式呼叫,而abs是...