Mysql基礎

請寫出數據類型(int char varchar datetime text)的意思;請問 varchar 和 char有什麼區別?

Int 整數 char 定長字符 Varchar 變長字符 Datetime 日期時間型 Text 文本型 Varchar 與char的區別 char是固定長度的字符類型,分配多少空間,就佔用多長空間。 Varchar是可變長度的字符類型,內容有多大就佔用多大的空間,能有效節省空間。 Varchar是變長,節省存儲空間,char是固定長度。查找效率要char型快,因爲varchar是非定長,必須先查找長度,然後進行數據的提取,比char定長類型多了一個步驟,所以效率低一些

MyISAM 和 InnoDB 的基本區別?索引結構如何實現?

MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行速度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。
創建索引:alert table tablename add index (字段名)

mysql_fetch_row() 和mysql_fetch_array之間有什麼區別?

Mysql_fetch_row()以索引數組的方式取查詢的結果集,mysql_fetch_array()以索引數組和關聯數組兩種方式取查詢的結果集。

什麼是數據庫索引,主鍵索引,唯一索引的區別,索引的缺點是什麼?

索引用來快速地尋找那些具有特定值的記錄。
主鍵索引和唯一索引的區別:主鍵是一種唯一性索引,但它必須指定爲“PRIMARY KEY”,每個表只能有一個主鍵。唯一索引索引列的所有值都只能出現一次,即必須唯一。
索引的缺點:
1、創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
2、索引需要佔用物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,需要的空間就會更大。
3、當對錶中 的數據進行增加、刪除、修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

數據庫中的事務是什麼?

事務(transaction)是作爲一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認爲事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作 完成,事務則提交,其修改將作用於所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

解釋:左連接,右連接,內連接,索引。

1、內連接僅選出兩張表中互相匹配的記錄.因此,這會導致有時我們需要的記錄沒有包含進來。內部連接是兩個表中都必須有連接字段的對應值的記錄,數據才能檢索出來。
2、左連接和右連接都是外部連接,也就是區別於內部連接,它對不滿足連接條件的行並不是象內部連接一樣將數據完全過濾掉,而是保留一部分數據,行數不會減少。
3、左連接是隻要左邊表中有記錄,數據就能檢索出來,而右邊有的記錄必要在左邊表中有的記錄才能被檢索出來
4、右連接是隻要右邊表中有記錄,數據就能檢索出來 ;
5、全連接則會回返回兩個表中的所有記錄

簡述0000000中無限分類的實現原理。

1、數據庫分類表的設計:id字段、父id字段、類名稱字段、path字段
2、Path字段存當前分類的路徑,格式:0,父類id,本身id
3、查詢分類:select * from 分類表order by path asc;
4、這樣就查出來每個分類及其對應的子類。

寫出三種以上MySQL數據庫存儲引擎的名稱(提示:不區分大小寫)

MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十幾個引擎

數據庫索引有幾類,分別是什麼?什麼時候該用索引?

普通索引、主鍵索引、唯一索引
並非所有的數據庫都以相同的方式使用索引,作爲通用規則,只有當經常查詢列中的數據時才需要在表上創建索引。

對關係型數據庫而言,索引是相當重要的概念,請回答有關索引幾個問題:

a)索引的目的是什麼?
1、快速訪問數據表中的特定信息,提高檢索速度
2、創建唯一性索引,保證數據庫表中每一行數據的唯一性
3、加速表和表之間的連接
4、使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間

b) 索引對數據庫系統的負面影響是什麼?
負面影響:創建索引和維護索引需要耗費時間,這個時間隨着數據量的增加而增加;索引需要佔用物理空間,不光是表需要佔用數據空間,每個索引也需要佔用物理空間;當對錶進行增、刪、改的時候索引也要動態維護,這樣就降低了數據的維護速度。

c) 爲數據表建立索引的原則有哪些?
1、在最頻繁使用的、用以縮小查詢範圍的字段上建立索引
2、在平頻繁使用的、需要排序的字段上建立索引

d) 什麼情況下不宜建立索引?
1、對於查詢中很少涉及的列或者重複值比較多的列,不宜建立索引
2、對於一些特殊的數據類型,不宜建立索引,比如文本字段(text)等。

如何設計或配置Mysql,才能達到高效使用的目的。

1、數據庫設計方面,設計結構良好的數據庫,允許部分數據冗餘。
選取最適用的字段屬性,儘可能把字段設置爲NOTNULL,這樣在查詢的時候,數據庫不用去比較NULL值。
2、系統架構設計方面,表散列,把海量數據散列到幾個不同的表裏面,集羣,數據庫查詢和寫入分開。
寫高效sql語句,以提高效率。
使用連接(join)來代替子查詢
使用聯合(union)來代替手動創建的臨時表
所得皆必須,只從數據庫取必須的數據。
必要的時候用不同的存儲引擎,比如Innodb可以減少死鎖,HEAP可以提高一個數量級的查詢速度。
使用事務
使用外鍵
使用索引

設定網站的用戶數量在千萬級,但是活躍用戶的數量只有1%,如何通過優化數據庫提高活躍用戶的訪問速度?

我們可以根據用戶的活躍程度,把活躍的用戶提取出來放到另外一張表裏面,每次活躍的用戶登陸的時候就直接到活躍用戶表中進行查詢,這樣就提高了數據庫的查詢速度。

瞭解XSS攻擊嗎? 如何防止 ?

XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構造的腳本,然後利用不安全的Activex控件執行惡意的行爲。
使用htmlspecialchars()函數對提交的內容進行過濾,使字符串裏面的特殊符號實體化。

SQL注入漏洞產生的原因 ? 如何防止?

SQL注入產生的原因:程序開發過程中不注意規範書寫sql語句和對特殊字符進行過濾,導致客戶端可以通過全局變量POST和GET提交一些sql語句正常執行。

防止SQL注入:

1、開啓配置文件中的magic_quotes_gpc和magic_quotes_runtime設置
2、執行sql語句時使用addslashes進行sql語句轉換
3、Sql語句書寫儘量不要省略小引號和單引號
4、過濾掉sql語句中的一些關鍵字:update、insert、delete、select、*
5、提高數據庫表和字段的命名技巧,對一些重要的字段根據程序的特點命名,取不易被猜到的。
6、Php配置文件中設置register_globals爲off,關閉全局變量註冊
7、控制錯誤信息,不要再瀏覽器上輸出錯誤信息,將錯誤信息寫到日誌文件中。
如何進行防SQL注入?
1、過濾掉一些常見的數據庫操作關鍵字:select,insert,update,delete,and,*等
或者通過系統函數:addslashes(需要被過濾的內容)來進行過濾。
2、在PHP配置文件中
Register_globals=off;設置爲關閉狀態 //作用將註冊全局變量關閉。
比如:接收POST表單的值使用POST[user],registerglobals=on;使_POST['user'],如果將register_globals=on;直接使用user可以接收表單的值。
3、SQL語句書寫的時候儘量不要省略小引號(tab鍵上面那個)和單引號
4、提高數據庫命名技巧,對於一些重要的字段根據程序的特點命名,取不易被猜到的
5、對於常用的方法加以封裝,避免直接暴漏SQL語句
6、開啓PHP安全模式
Safe_mode=on;
7、打開magic_quotes_gpc來防止SQL注入
Magic_quotes_gpc=off;默認是關閉的,它打開後將自動把用戶提交的sql語句的查詢進行轉換,把’轉爲’,這對防止sql注入有重大作用。
因此開啓:magic_quotes_gpc=on;
8、控制錯誤信息
關閉錯誤提示信息,將錯誤信息寫到系統日誌。
9、使用mysqli或pdo預處理。

你常用到的mysql命令?

Show databases
Show tables
Insert into 表名() values()
Update 表名 set 字段=值 where …
Delete from 表名 where …
Select * from 表名 where 條件 order by … Desc/asc limit … Group by … Having …

進入mysql管理命令行的命令?

Mysql -uroot -p 回車 密碼
show databases; 這個命令的作用?
顯示當前mysql服務器中有哪些數據庫

show create database mysql; 這個命令的作用?

顯示創建數據庫的sql語句

show create table user; 這個命令的作用?

顯示創建表的sql語句

desc user; 這個命令的作用?

查詢user表的結構

explain select * from user; 這個命令的作用?

獲取select相關信息

show processlist; 這個命令的作用?

顯示哪些線程正在運行

SHOW VARIABLES; 這個命令的作用?

顯示系統變量和值

SHOW VARIABLES like ’%conn%’; 這個命令的作用?

顯示系統變量名包含conn的值

LEFT JOIN 寫一個SQL語句?

SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.id

怎麼找到數據庫的配置文件路徑?

在數據庫安裝目錄下,my.ini

優化MYSQL數據庫的方法。(4分,多寫多得)

1、選取最適用的字段屬性,儘可能減少定義字段長度,儘量把字段設置NOT NULL,例如’省份,性別’,最好設置爲ENUM
2、使用連接(JOIN)來代替子查詢:
3、使用聯合(UNION)來代替手動創建的臨時表
4、事務處理:
5、鎖定表,優化事務處理:
6、使用外鍵,優化鎖定表
7、建立索引:
a.格式:
(普通索引)->
創建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
創表指定索引:CREATE TABLE tablename([…],INDEX索引名)
(唯一索引)->
創建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
創表指定索引:CREATE TABLE tablename([…],UNIQUE索引名)
(主鍵)->
它是唯一索引,一般在創建表是建立,格式爲:
CREATA TABLE tablename ([…],PRIMARY KEY[索引字段])
8、優化查詢語句

MYSQL取得當前時間的函數是?,格式化日期的函數是

now(),date()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章