mysql事務 鄭志偉 mysql學習筆記

2021-10-17 13:50:12 字數 4365 閱讀 1597

今天開始學習mysql資料庫了,也是第一次在這裡寫技術筆記,相信好記憶不如爛筆頭,就以此來見證自己的成長吧!

一、入門語句:

首先開啟執行對話方塊-->輸入cmd-->回車

1.連線到mysql伺服器:

mysql -h localhost -u 使用者名稱(通常都是root) -p 密碼;

如果不寫 -h localhost,預設是連線到本地的mysql伺服器,比如在我的電腦:

mysql -u root -p mysql;

2.檢視所有的資料庫

show databases;

3.選擇使用哪個資料庫

use databasename;  --這條語句比較特殊,可以不寫分號

比如我有乙個資料庫名字是test,則use test;

4.檢視某個資料庫下的所有表

show tables;

5.檢視表結構

desc(全稱description) 表名;

6.建庫語句

create database 資料庫名;

7.建表語句

注意:建表之前必須先選擇使用某個資料庫,use test,

create table 表名(

列名 資料型別,   --多個列用逗號隔開

其實建表就是宣告列的過程。

8.重新命名表

rename table oldname(原來的表名) to newname(新的表名);

注意:不能給資料庫重新命名的。

9.設定字符集

set names gbk;

二、詳解列型別之三大列型別

1.數值型(整型列,浮點型列)

2.字元型列

3.日期/時間型別

整型列儲存範圍與所佔空間

型別位元組

位有符號

無符號tinyint

-2^7-2^7-1

0-2^8-1

smallint

-2^15-2^15-1

0-2^16-1

mediumint

-2^23-2^23-1

0-2^24-1

intbigint

-2^31-2^31-1

-2^63-2^63-1

0-2^32-1

0-2^64-1

tinyint型別分析:

預設是有符號的,儲存-128-127;

比如:我們有一列age年齡列,年齡適合用tinyint型別,但年齡又不能為負數,這時候我們就要宣告為unsigned無符號型別,如:

create table student(

id int,

age tinyint unsigned

整型列的可選屬性

tinyint(m) unsigned zerofill;

m:寬度(在零填充的時候才有意義),不會影響儲存範圍

unsigned:無符號型別(非負),會影響儲存範圍

zerofill:0填充,預設無符號

zerofill詳解:

比如:我們往student表新增一列

alter table student add age2 tinyint(5) unsigned(可寫可不寫) zerofill;

然後我們再往student表插入一行資料時:

insert into student(id,age2) values(1,255);

表裡顯示的資料會是

id  age2

1   00255

位數不夠時,用0來填充就是這個意思。

另外,smallint,mediumint,int,bigint用法也是大同小異,此處就不多說了。

浮點型與定點型:

float(m,d),decimal(m,d)

m:代表精度,即總位數(不包含小數點)

d:代表標度,即小數字數

比如float(6,2),代表的取值範圍為-9999.99-9999.99

注意:和整型有一點不同的是float的m是影響它的取值範圍的,而整型則不會。

float和decimal的區別在於:decimal表達的值更精確,比如我們建立一張商品表:

create table goods(

id int primary key auto_increment,

floatprice float(9,2) not null default 0.00,

decimalprice decimal(9,2) not null default 0.00);

然後插入一行資料:

insert into (name,floatprice,decimalprice) values('法拉利',1234567.23,1234567.23);

goods最終顯示的結果是:

id   name   floatprice   decimalprice

1    法拉利  1234567.25   1234567.23

由此可見它們誰更加精確了。

字元型:

char(m),varchar(m)

型別寬度

可存字元

實存字元(i<=m)

實佔空間

利用率char

mm(0-255位元組)im

i/m<=100%

varchar

mm(0-65535位元組)

ii字元+(1-2個位元組)

i/(i+1-2)<100%

char和varchar的主要區別:

1.char:定長,m個字元,如果存的小於m個字元,實佔m個字元,如果不夠m個字元,內部會用空格來補全;

如果某列尾部值存在空格,用char的話會造成空格的丟失:

比如我們建立一張學生表:

create table stu(

id int primary key auto_increment,

name char(8) not null default '',

waihao varchar(8) not null default '');

insert into stu(name,waihao) values('lisi  ','lisi  ');

這裡某人的姓名就是lisi+兩個空格

然後我們查詢的時候

select concat(name,'!'),concat(waihao,'!') from stu;這裡用concat是為了讓大家看出效果

結果為:

id      name      waihao

1       lisi!      lisi  !

可見,char型別的name列的空格丟失了,為什麼呢?

因為char型別,我們這裡定義了8個字元,我們實際儲存的lisi+加兩個空格只有六個字元,它內部會再用2個空格再幫我們補全8個字元,而當我們查詢的時候,它會把後面的空格全部去掉,這樣就造成我們空格的丟失了。

varchar:變長,m個字元,如果存的小於m個字元,設為n,n<=m,實佔n個字元

2.它們的利用率

3.速度上char會比較快

char和varchar的選擇原則,以下三方面來考慮:

1.空間利用率,比如四字成語表,就可以用char(4),可以保證空間百分百利用;

而像個人簡介,微博這種就應該用varchar;

2.速度上,比如使用者名稱,如果用char,可能會浪費幾個位元組空間,但從速度上來考慮,當使用者註冊量非常大的時候,還是選擇用char比較好。

最後還有乙個text型別的,它是文字型別,可以儲存比較大的文字段,搜尋速度稍慢,因此如果不是特別大的內容,建議用char,varchar來代替;

text還有乙個要注意的:不能給text型別的字段加預設值。

三、日期/時間型別

1.year

1個位元組,表示1901-2023年,[0000,表示錯誤時的選擇]

如果輸入兩位,'00-69',則表示的是2000-2023年;'70-99',則表示的是1970-2023年;

如果嫌記得麻煩,就四位一起輸咯。

2.date

典型格式:1990-09-14;

表示的範圍:1000-01-01 到 9999-12-31

3.time

典型格式:hh:mm:ss

表示的範圍:-859:59:59->859:59:59

4.datetime

典型格式:yyyy-mm-dd hh:mm:ss

表示的範圍:1000-01-01 00:00:00->9999-12-31 23:59:59

5.時間戳

1970-01-01 00:00:00到當前的秒數;

一般存註冊時間,商品的發布時間並不是用datetime型別來儲存,而是用時間戳,

因為datetime雖然直觀,但計算不方便。

而用int型別來儲存時間戳,方便計算,對於顯示來說也方便格式化。

mysql 事務 數量 Mysql 事務

什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...

mysql事務機制 Mysql事務機制

mysql事務是指將資料庫從一種一致性狀態轉到另一種一致性狀態 mysql事務具有acid特性 原子性 atomicity 事務中的所有操作,要麼全部執行,要麼都不執行 一致性 consistency 事務開始和結束後,資料庫的完整性不會被破壞 隔離性 isolation 事務之間互不影響。事務的隔...

mysql事務死鎖 MySQL事務 死鎖

一 概念 多個事務在同一資源上互相占用形成迴路。這就是死鎖 基本命令 檢視是否自動提交事務 show variables like autocommit 設定事務是否自動提交 set autocommit 0 set autocommit 1 二 例子 create table user id bi...