MySQL學習筆記

2022-04-12 09:02:20 字數 3304 閱讀 7409

列明如果有特殊字元,如# 或者 - 等,需要用反引號`(數字鍵1左邊的符號)將列明括起來,否則會報錯

1. varchar(n):長度為n個位元組的可變長度且非unicode的字元資料。n必須是乙個介於1和8,000之間的數值。儲存大小為輸入資料的位元組的實際長度

2. nvarchar(n):包含n個字元的可變長度unicode字元資料。n的值必須介於1與4,000之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零。nvarchar適用中文和其他字元,其中n表示unicode編碼,可以解決多語言之間的轉換問題。使用nvarchar儲存英文本元會增大一倍的儲存空間.但是在儲存代價已經很低廉的情況下,優先考慮相容性會帶來更多好處的。

加上 n 代表存入資料庫時以 unicode 格式儲存。saleusername的字段型別為varchar(50)

update tablename set saleusername='小覃祝你⑭快樂' where id=87 

select * from tablename where id=87

why?saleusername欄位裡的文字怎麼變成這樣了。⑭這個符號怎麼變成了?

那麼,稍微改一下,在引數值前面加上n。現在可以看到調皮的⑭出來了。

update tablename set saleusername=n'小覃祝你⑭快樂' where id=87 

insert

into

workers

select'a

',25,'

統計',3000,1

union

allselect'b

',30,'

設計規劃

',9000,2

union

allselect'c

',20,'

**員',2000,3

的執行結果相當於執行了

insert

into workers values ('

a',25,'

統計',3000,1

);insert

into workers values('

b',30,'

設計規劃

',9000,2

);insert

into workers values('

c',20,'

**員',2000,3);

但是使用insert into ... select ... union all的資料插入效率要比下面分條插入的方式高的多。

insert into ... select ... union all這個語句分為兩部分,select ... union all 和insert

其實 select ... union all... 又由三個select 語句組成,通過union all 將select的結果聯合起來,然後一次性插入到資料庫中。

單獨執行:

select'a

',25,'

統計',3000,1

union

allselect'b

',30,'

設計規劃

',9000,2

union

allselect'c

',20,'

**員',2000,3

會產生3行。

最後,通過insert語句,將3行一次性插入到workers表中。這樣比下面分三次插入到表中的效率要高很多。

驅動表與被驅動表:在兩表連線查詢中,驅動表只需要訪問一次,被驅動表可能被訪問多次。

內連線與外連線:

過濾條件where 和 on:

一般情況下,我們都把只涉及單錶的過濾條件放到where子句中,把涉及兩表的過濾條件都放到on子句中,我們也一般把放到on子句中的過濾條件也稱之為連線條件

左連線與右連線:

左連線和右連線是左外連線和右外連線簡稱,只有外連線才分左右,且外連線一定會分左右

可以據此來分辨內連線和外連線:

如果join語句前面有left或者right, 則一定是外連線,此時on的語義與where的語義不同;

如果join語句前面沒有left或者right, 則一定是內連線,此時on的語義與where相同。

標識內連線和外連線的關鍵字inner|cross 和 outer都是可以省略的。

含義:

1、count(*) :統計所有的行數,包括為null的行(count(*)不單會進行全表掃瞄,也會對錶的每個字段進行掃瞄。而count('x')或者count(column)或者count(0)等則只進行乙個欄位的全表掃瞄)。

2、count(1):計算一共有多少符合條件的行(其實就可以想成表中有這麼乙個字段,這個字段就是固定值1,count(1),就是計算一共有多少個1..同理,count(2),也可以,得到的值完全一樣,count('x'),count('y')都是可以的。count(*),執行時會把星號翻譯成欄位的具體名字,效果也是一樣的,不過多了乙個翻譯的動作,比固定值的方式效率稍微低一些。)

3、count(列名):查詢列名那一列的,欄位為null不統計。

執行效果:

1、count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為null。

2、count(1)包括了忽略所有列,用1代表**行,在統計結果的時候,不會忽略列值為null。

3、count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空。

執行效率:

列名為主鍵,count(列名)會比count(1)快  

列名不為主鍵,count(1)會比count(列名)快  

如果表多個列並且沒有主鍵,則 count(1) 的執行效率優於 count(*)  

如果有主鍵,則 select count(主鍵)的執行效率是最優的  

如果表只有乙個字段,則 select count(*)最優

**

mysql學習筆記 51 mysql學習筆記

初學mysql時整理,隨時更新 資料操作 增 insert into 表名 字段列表 values 值列表 值列表 如果要插入的值列表包含所有字段並且順序一致,則可以省略字段列表。可同時插入多條資料記錄!replace 與 insert 完全一樣,可互換。insert into 表名 set 欄位名...

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學習筆記

alter table 新增,修改,刪除表的列,約束等表的定義。檢視列 desc 表名 修改表名 alter table t book rename to bbb 新增列 alter table 表名 add column 列名 varchar 30 刪除列 alter table 表名 drop ...