今天開始學習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...