mysql筆記整理1 常用知識及問題bug

2021-07-24 22:24:38 字數 3548 閱讀 8891

檢視表定義:desc tablename;show create table empadd/cnahge/modify中,都有乙個可選項first|after column_name,用來修改欄位在表中的位置,add 增加的新字段預設是加在表的最後位置,而change/modify 預設都不會改變欄位的位置。

alter

table [表名] add [字段] [型別] after [已存在字段];

alter

table [表名] modify [字段] [型別] first;

顯示部分資料:select ……[limit offset_start,row_count]

offset_start 表示記錄的起始偏移量,row_count 表示顯示的行數。

在預設情況下,起始偏移量為0,只寫記錄行數,實際就是前n行。

select * from [表名] limit n;

select * from [表名] order

by [字段] limit 1,3;

排序後從第二條開始,顯示3 條記錄:

limit 經常和order by 一起配合使用來進行記錄的分頁顯示。

4. curdate()函式:返回當前日期,只包含年月日。

curtime()函式:返回當前時間,只包含時分秒。

now()函式:返回當前的日期和時間,年月日時分秒全都包含。

datediff(date1,date2)函式:用來計算兩個日期之間相差的天數。

mysql> select

datediff('2008-08-08',now());

if(value,t,f) 如果value 是真,返回t;否則返回f

mysql> select

if(salary>6000,'high','low') from salary;

看你的mysql當前預設的儲存引擎:

mysql> show variables like

'%storage_engine%';

查詢當前資料庫支援的儲存引擎:

mysql> show engines;
myisam 不支援事務、也不支援外來鍵,其優勢是訪問的速度快,對事務完整性沒有要求或者以select、insert 為主的應用基本上都可以使用這個引擎來建立表。innodb 儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比myisam的儲存引擎,innodb 寫的處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。

隨機取樣時,order by rand()能夠把資料隨機排序, 再抽取前n 條記錄。

mysql> select * from *** order

by rand() limit 5;

使用group by的with rollup字句可以檢索出更多的分組聚合資訊,可

以滿足使用者想要得到的任何乙個分組以及分組組合的聚合資訊值。

mysql> select year, country, product, sum(profit) from sales group

by year, country, product with rollup;

前3 行表示2004 年在中國各個產品(tnt1、tnt2、tnt3)的利潤,

第4 行表示2004 年在中國所有產品的利潤,

第5 行表示2004 年全世界所有產品的利潤

8. 在mysql 中在硬碟上儲存、使用表名和資料庫名由lower_case_tables_name 系統變數決定,在啟動mysqld 時設定這個變數。

值 含義

0:  使用create

table 或create

database 語句指定的大寫和小寫在硬碟上儲存表名和資料庫名。

名稱對大小寫敏感。在unix 系統中的預設設定就是這個值

1: 表名在硬碟上以小寫儲存,名稱對大小寫敏感。mysql 將所有表名轉換為小寫以便儲存和查詢。

該值為windows 和mac os x 系統中的預設值

2: 表名和資料庫名在硬碟上使用create

table 或create

database 語句指定的大小寫進行儲存,但mysql 將它們轉換為小寫以便查詢。此值只在對大小寫不敏感的檔案系統上適用

在unix 中將lower_case_tables_name 設定為1 並且重啟mysqld 之前,必須先將舊的資料庫名和表名轉換為小寫!!!

9. 備份所有資料庫:

mysqldump -uroot

-p--

all-database

>

all.sql

備份資料庫test:

mysqldump -uroot

-p test > test.sql

備份資料庫test 下的表emp 和dept:

mysqldump -uroot

-p test emp dept > emp_dept.sql

對於事務儲存引擎(innodb 和bdb)來說,採用更好的選項–single-transaction,此選項將使得innodb 儲存引擎得到乙個快照(snapshot),使得備份的資料能夠保證一致性。

匯出資料:

mysqldump –u

root –p –d

[資料庫名]

[表名] > 表名.sql

–1.問題描述

use scm之後,切換到scm資料庫;

show tables之後,顯示有a表;

select * from a之後報表不存在;

在此資料庫下我新建表b,select * from b成功;

–2.處理方式

已處理大小寫敏感問題,mysql也重啟了,表也進行了repair修復

–3.結果

沒一點作用,還是報表a不存在;

–4.解決方案

原來是lower_case_table_names這個引數在作怪,建立表之前這個引數是預設的0,因此建立的表都是大小寫敏感的,結果後面改了一下引數為1了,大小寫不敏感了,查詢的時候不管是select大寫還是小寫,統統都轉換成小寫了,而表名其實是大寫的,所以才報錯找不到表的。

delete

from a a where a.id in (select b.ids from b b);

測試過程中發現有一張表每次都被清空,但是業務設定上是只有id在子查詢中時才刪除,後來檢查發現是mysql-5.6.19有個bug,當括號中子查詢異常時(本次為子查詢中select後面的字段寫錯了,單獨執行子查詢報錯不存在此欄位),直接執行了where前面的主查詢的delete語句,所以delete的時候很恐怖的,所有mysql中盡量別使用巢狀子查詢,能用join的就用join吧。

知識整理1

c 的深拷貝和淺拷貝 淺拷貝也叫位拷貝 bitwise assignment 意思就是將乙個物件的記憶體映像按位原封不動的複製給另乙個物件。如果欄位是值型別的,則對該字段執行逐位複製 如果欄位是引用型別,則複製引用但不複製引用的物件。如果改變目標物件中引用型字段的值他將反映在原是物件中,也就是說原始...

MySQL知識整理

mysql 常用工具 1 show processlist 檢視正在執行的sql 2 show profile分析sql 先用select profiling檢視結果,結果為1,說明已經開啟。show profiles 檢視sql耗時。show profile for query queryid 檢...

sql知識整理(1)

儲存過程概念,優點 what 儲存過程是資料庫物件,用於儲存用t sql編寫的程式 why 1 更好的效能。因為sqlserver在它第一次執行時就生成並快取了儲存過程的執行計畫。2 更好的維護和訪問。它集中在乙個地方,能夠使三層架構的實現更加簡單 儲存過程將組成資料層 3 安全。sqlserver...