MySQL最新最全面試題和答案_第1頁
MySQL最新最全面試題和答案_第2頁
MySQL最新最全面試題和答案_第3頁
MySQL最新最全面試題和答案_第4頁
MySQL最新最全面試題和答案_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MYSQL支持事務嗎?在缺省模式下,MYSQL是autocommit模式的,所有的數(shù)據(jù)庫更新操作都會即時提交,所以在缺省情況下,mysql是不支持事務的。但是如果你的MYSQL表類型是使用InnoDB Tables 或 BDB tables的話,你的MYSQL就可以使用事務處理,使用SET AUTOCOMMIT=0就可以使MYSQL允許在非autocommit模式,在非autocommit模式下,你必須使用COMMIT來提交你的更改,或者用ROLLBACK來回滾你的更改。示例如下:START TRANSACTION;SELECT A:=SUM(salary) FROM table1 WHERE

2、 type=1;UPDATE table2 SET summmary=A WHERE type=1;COMMIT;MYSQL相比于其他數(shù)據(jù)庫有哪些特點?MySQL是一個小型關系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司,現(xiàn)在已經(jīng)被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統(tǒng)與其他的大型數(shù)據(jù)庫例如Oracle、DB2、SQL Server等相比功能稍弱一些1、可以處理擁有上千萬條記錄的大型數(shù)據(jù)2、支持常見的SQL語句規(guī)范3、可移植行高,安裝簡單小巧4、良好的運行效率,有豐富信息的網(wǎng)絡支持5、調試、管理,優(yōu)化簡單(相對其他大型數(shù)據(jù)庫)介紹一下mysq

3、l的日期和時間函數(shù)這里是一個使用日期函數(shù)的例子。下面的查詢選擇所有 date_col 值在最后 30 天內的記錄。mysql> SELECT something FROM tbl_nameWHERE TO_DAYS(NOW() TO_DAYS(date_col) <= 30;DAYOFWEEK(date)返回 date 的星期索引(1 = Sunday, 2 = Monday, . 7 = Saturday)。索引值符合 ODBC 的標準。mysql> SELECT DAYOFWEEK(1998-02-03);-> 3WEEKDAY(date)返回 date 的星期索引

4、(0 = Monday, 1 = Tuesday, 6 = Sunday):mysql> SELECT WEEKDAY(1998-02-03 22:23:00);-> 1mysql> SELECT WEEKDAY(1997-11-05);-> 2DAYOFMONTH(date)返回 date 是一月中的第幾天,范圍為 1 到 31:mysql> SELECT DAYOFMONTH(1998-02-03);-> 3DAYOFYEAR(date)返回 date 是一年中的第幾天,范圍為 1 到 366:mysql> SELECT DAYOFYEAR(199

5、8-02-03);-> 34MONTH(date)返回 date 中的月份,范圍為 1 到 12:mysql> SELECT MONTH(1998-02-03);-> 2DAYNAME(date)返回 date 的星期名:mysql> SELECT DAYNAME(”1998-02-05);-> ThursdayMONTHNAME(date)返回 date 的月份名:mysql> SELECT MONTHNAME(”1998-02-05);-> FebruaryQUARTER(date)返回 date 在一年中的季度,范圍為 1 到 4:mysql&g

6、t; SELECT QUARTER(98-04-01);-> 2WEEK(date)WEEK(date,first)對于星期日是一周中的第一天的場合,如果函數(shù)只有一個參數(shù)調用,返回 date 為一年的第幾周,返回值范圍為 0 到 53 (是的,可能有第 53 周的開始)。兩個參數(shù)形式的 WEEK() 允許你指定一周是否以星期日或星期一開始,以及返回值為 0-53 還是 1-52。這里的一個表顯示第二個參數(shù)是如何工作的: 值 含義0 一周以星期日開始,返回值范圍為 0-531 一周以星期一開始,返回值范圍為 0-532 一周以星期日開始,返回值范圍為 1-533 一周以星期一開始,返回值范

7、圍為 1-53 (ISO 8601) mysql> SELECT WEEK(1998-02-20);-> 7mysql> SELECT WEEK(1998-02-20,0);-> 7mysql> SELECT WEEK(1998-02-20,1);-> 8mysql> SELECT WEEK(1998-12-31,1);-> 53注意,在版本 4.0 中,WEEK(#,0) 被更改為匹配 USA 歷法。 注意,如果一周是上一年的最后一周,當你沒有使用 2 或 3 做為可選參數(shù)時,MySQL 將返回 0:mysql> SELECT YEAR(

8、2000-01-01), WEEK(2000-01-01,0);-> 2000, 0mysql> SELECT WEEK(2000-01-01,2);-> 52你可能會爭辯說,當給定的日期值實際上是 1999 年的第 52 周的一部分時,MySQL 對 WEEK() 函數(shù)應該返回 52。我們決定返回 0 ,是因為我們希望該函數(shù)返回“在指定年份中是第幾周”。當與其它的提取日期值中的月日值的函數(shù)結合使用時,這使得 WEEK() 函數(shù)的用法可靠。如果你更希望能得到恰當?shù)哪?周值,那么你應該使用參數(shù) 2 或 3 做為可選參數(shù),或者使用函數(shù) YEARWEEK() :mysql>

9、SELECT YEARWEEK(2000-01-01);-> 199952mysql> SELECT MID(YEARWEEK(2000-01-01),5,2);-> 52YEAR(date)返回 date 的年份,范圍為 1000 到 9999:mysql> SELECT YEAR(98-02-03);-> 1998YEARWEEK(date)YEARWEEK(date,first)返回一個日期值是的哪一年的哪一周。第二個參數(shù)的形式與作用完全與 WEEK() 的第二個參數(shù)一致。注意,對于給定的日期參數(shù)是一年的第一周或最后一周的,返回的年份值可能與日期參數(shù)給出的年

10、份不一致:mysql> SELECT YEARWEEK(1987-01-01);-> 198653注意,對于可選參數(shù) 0 或 1,周值的返回值不同于 WEEK() 函數(shù)所返回值(0), WEEK() 根據(jù)給定的年語境返回周值。HOUR(time)返回 time 的小時值,范圍為 0 到 23:mysql> SELECT HOUR(10:05:03);-> 10MINUTE(time)返回 time 的分鐘值,范圍為 0 到 59:mysql> SELECT MINUTE(98-02-03 10:05:03);-> 5SECOND(time)返回 time 的

11、秒值,范圍為 0 到 59:mysql> SELECT SECOND(10:05:03);-> 3PERIOD_ADD(P,N)增加 N 個月到時期 P(格式為 YYMM 或 YYYYMM)中。以 YYYYMM 格式返回值。 注意,期間參數(shù) P 不是 一個日期值:mysql> SELECT PERIOD_ADD(9801,2);-> 199803PERIOD_DIFF(P1,P2)返回時期 P1 和 P2 之間的月數(shù)。P1 和 P2 應該以 YYMM 或 YYYYMM 指定。 注意,時期參數(shù) P1 和 P2 不是 日期值:mysql> SELECT PERIOD_

12、DIFF(9802,199703);-> 11DATE_ADD(date,INTERVAL expr type)DATE_SUB(date,INTERVAL expr type)ADDDATE(date,INTERVAL expr type)SUBDATE(date,INTERVAL expr type)這些函數(shù)執(zhí)行日期的算術運算。ADDDATE() 和 SUBDATE() 分別是 DATE_ADD() 和 DATE_SUB() 的同義詞。 在 MySQL 3.23 中,如果表達式的右邊是一個日期值或一個日期時間型字段,你可以使用 + 和 代替 DATE_ADD() 和 DATE_SUB

13、()(示例如下)。 參數(shù) date 是一個 DATETIME 或 DATE 值,指定一個日期的開始。expr 是一個表達式,指定從開始日期上增加還是減去間隔值。expr 是一個字符串;它可以以一個 “-” 領頭表示一個負的間隔值。type 是一個關鍵詞,它標志著表達式以何格式被解釋。 下表顯示 type 和 expr 參數(shù)是如何關聯(lián)的: type 值 expr 期望的格式SECOND SECONDSMINUTE MINUTESHOUR HOURSDAY DAYSMONTH MONTHSYEAR YEARSMINUTE_SECOND “MINUTES:SECONDS”HOUR_MINUTE “H

14、OURS:MINUTES”DAY_HOUR “DAYS HOURS”YEAR_MONTH “YEARS-MONTHS”HOUR_SECOND “HOURS:MINUTES:SECONDS”DAY_MINUTE “DAYS HOURS:MINUTES”DAY_SECOND “DAYS HOURS:MINUTES:SECONDS”在 expr 的格式中,MySQL 允許任何字符作為定界符。表中所顯示的是建議的定界字符。如果 date 參數(shù)是一個 DATE 值,并且計算的間隔僅僅有 YEAR、MONTH 和 DAY 部分(沒有時間部分),那么返回值也是一個 DATE 值。否則返回值是一個 DATET

15、IME 值:mysql> SELECT “1997-12-31 23:59:59 + INTERVAL 1 SECOND;-> 1998-01-01 00:00:00mysql> SELECT INTERVAL 1 DAY + “1997-12-31;-> 1998-01-01mysql> SELECT “1998-01-01 INTERVAL 1 SECOND;-> 1997-12-31 23:59:59mysql> SELECT DATE_ADD(”1997-12-31 23:59:59,-> INTERVAL 1 SECOND);->

16、 1998-01-01 00:00:00mysql> SELECT DATE_ADD(”1997-12-31 23:59:59,-> INTERVAL 1 DAY);-> 1998-01-01 23:59:59mysql> SELECT DATE_ADD(”1997-12-31 23:59:59,-> INTERVAL “1:1 MINUTE_SECOND);-> 1998-01-01 00:01:00mysql> SELECT DATE_SUB(”1998-01-01 00:00:00,-> INTERVAL “1 1:1:1 DAY_SECO

17、ND);-> 1997-12-30 22:58:59mysql> SELECT DATE_ADD(”1998-01-01 00:00:00,-> INTERVAL “-1 10 DAY_HOUR);-> 1997-12-30 14:00:00mysql> SELECT DATE_SUB(”1998-01-02, INTERVAL 31 DAY);-> 1997-12-02如果你指定了一個太短的間隔值(沒有包括 type 關鍵詞所期望的所有間隔部分),MySQL 假設你遺漏了間隔值的最左邊部分。例如,如果指定一個 type 為 DAY_SECOND,那么 ex

18、pr 值被期望包含天、小時、分鐘和秒部分。如果你象 “1:10 樣指定一個值,MySQL 假設天和小時部分被遺漏了,指定的值代表分鐘和秒。換句話說,”1:10 DAY_SECOND 被解釋為等價于 “1:10 MINUTE_SECOND。這類似于 MySQL 解釋 TIME 值為經(jīng)過的時間而不是一天的時刻。注意,如果依著包含一個時間部分的間隔增加或減少一個日期值,該日期值將被自動地轉換到一個日期時間值:mysql> SELECT DATE_ADD(”1999-01-01, INTERVAL 1 DAY);-> 1999-01-02mysql> SELECT DATE_ADD(

19、”1999-01-01, INTERVAL 1 HOUR);-> 1999-01-01 01:00:00如果你使用了確定不正確的日期,返回結果將是 NULL。如果你增加 MONTH、YEAR_MONTH 或 YEAR,并且結果日期的天比新月份的最大天數(shù)還大,那么它將被調整到新月份的最大天數(shù):mysql> SELECT DATE_ADD(1998-01-30, INTERVAL 1 MONTH);-> 1998-02-28注意,上面的例子中,單詞 INTERVAL 和關鍵詞 type 是不區(qū)分字母大小寫的。EXTRACT(type FROM date)EXTRACT() 函數(shù)使

20、用與 DATE_ADD() 或 DATE_SUB() 一致的間隔類型,但是它用于指定從日期中提取的部分,而不是進行日期算術運算。mysql> SELECT EXTRACT(YEAR FROM “1999-07-02);-> 1999mysql> SELECT EXTRACT(YEAR_MONTH FROM “1999-07-02 01:02:03);-> 199907mysql> SELECT EXTRACT(DAY_MINUTE FROM “1999-07-02 01:02:03);-> 20102TO_DAYS(date)給出一個日期 date,返回一個

21、天數(shù)(從 0 年開始的天數(shù)):mysql> SELECT TO_DAYS(950501);-> 728779mysql> SELECT TO_DAYS(1997-10-07);-> 729669TO_DAYS() 無意于使用先于格里高里歷法(即現(xiàn)行的陽歷)(1582)出現(xiàn)的值,因為它不考慮當歷法改變時所遺失的天數(shù)。FROM_DAYS(N)給出一個天數(shù) N,返回一個 DATE 值:mysql> SELECT FROM_DAYS(729669);-> 1997-10-07FROM_DAYS() 無意于使用先于格里高里歷法(1582)出現(xiàn)的值,因為它不考慮當歷法改

22、變時所遺失的天數(shù)。DATE_FORMAT(date,format)依照 format 字符串格式化 date 值。下面的修飾符可被用于 format 字符串中: 修飾符 含義%M 月的名字 (January.December)%W 星期的名字 (Sunday.Saturday)%D 有英文后綴的某月的第幾天 (0th, 1st, 2nd, 3rd, etc.)%Y 年份,數(shù)字的,4 位%y 年份,數(shù)字的,2 位%X 周值的年份,星期日是一個星期的第一天,數(shù)字的,4 位,與 %V 一同使用%x 周值的年份,星期一是一個星期的第一天,數(shù)字的,4 位,與 %v 一同使用%a 縮寫的星期名 (Sun.

23、Sat)%d 月份中的天數(shù),數(shù)字的 (00.31)%e 月份中的天數(shù),數(shù)字的 (0.31)%m 月,數(shù)字的 (00.12)%c 月,數(shù)字的 (0.12)%b 縮寫的月份名 (Jan.Dec)%j 一年中的天數(shù) (001.366)%H 小時 (00.23)%k 小時 (0.23)%h 小時 (01.12)%I 小時 (01.12)%l 小時 (1.12)%i 分鐘,數(shù)字的 (00.59)%r 時間,12 小時 (hh:mm:ss APM)%T 時間,24 小時 (hh:mm:ss)%S 秒 (00.59)%s 秒 (00.59)%p AM 或 PM%w 一周中的天數(shù) (0=Sunday.6=Sa

24、turday)%U 星期 (00.53),星期日是一個星期的第一天%u 星期 (00.53),星期一是一個星期的第一天%V 星期 (01.53),星期日是一個星期的第一天。與 %X 一起使用%v 星期 (01.53),星期一是一個星期的第一天。與 %x 一起使用% 一個字母 “%”所有其它的字符不經(jīng)過解釋,直接復制到結果中:mysql> SELECT DATE_FORMAT(1997-10-04 22:23:00, %W %M %Y);-> Saturday October 1997mysql> SELECT DATE_FORMAT(1997-10-04 22:23:00,

25、%H:%i:%s);-> 22:23:00mysql> SELECT DATE_FORMAT(1997-10-04 22:23:00,%D %y %a %d %m %b %j);-> 4th 97 Sat 04 10 Oct 277mysql> SELECT DATE_FORMAT(1997-10-04 22:23:00,%H %k %I %r %T %S %w);-> 22 22 10 10:23:00 PM 22:23:00 00 6mysql> SELECT DATE_FORMAT(1999-01-01, %X %V);-> 1998 52在 M

26、ySQL 3.23 中,在格式修飾符前需要字符 %。在更早的 MySQL 版本中,% 是可選的。 月份與天修飾符的范圍從零開始的原因是,在 MySQL 3.23 中,它允許存儲不完善的日期值(例如 2004-00-00)。TIME_FORMAT(time,format)它的使用方法與上面的 DATE_FORMAT() 函數(shù)相似,但是 format 字符串只包含處理小時、分和秒的那些格式修飾符。使用其它的修飾符會產(chǎn)生一個 NULL 值或 0。CURDATE()CURRENT_DATE以 YYYY-MM-DD 或 YYYYMMDD 格式返回當前的日期值,返回的格式取決于該函數(shù)是用于字符串還是數(shù)字語

27、境中:mysql> SELECT CURDATE();-> 1997-12-15mysql> SELECT CURDATE() + 0;-> 19971215CURTIME()CURRENT_TIME以 HH:MM:SS 或 HHMMSS 格式返回當前的時間值,返回的格式取決于該函數(shù)是用于字符串還是數(shù)字語境中:mysql> SELECT CURTIME();-> 23:50:26mysql> SELECT CURTIME() + 0;-> 235026NOW()SYSDATE()CURRENT_TIMESTAMP以 YYYY-MM-DD HH:M

28、M:SS 或 YYYYMMDDHHMMSS 格式返回當前的日期時間值,返回的格式取決于該函數(shù)是用于字符串還是數(shù)字語境中:mysql> SELECT NOW();-> 1997-12-15 23:50:26mysql> SELECT NOW() + 0;-> 19971215235026注意,函數(shù) NOW() 在每個查詢中只計算一次,也就是在查詢開始執(zhí)行時。這就是說,如果在一個單獨的查詢中多次引用了 NOW(),它只會給出值都是一個相同的時間。UNIX_TIMESTAMP()UNIX_TIMESTAMP(date)如果調用時沒有參數(shù),以無符號的整數(shù)形式返回一個 Unix

29、時間戳(從 1970-01-01 00:00:00 GMT 開始的秒數(shù))。如果以一個參數(shù) date 調用 UNIX_TIMESTAMP(),它將返回該參數(shù)值從 1970-01-01 00:00:00 GMT 開始經(jīng)過的秒數(shù)值。date 可以是一個 DATE 字符串,一個 DATETIME 字符串,一個 TIMESTAMP,或者以一個 YYMMDD 或 YYYYMMDD 顯示的本地時間:mysql> SELECT UNIX_TIMESTAMP();-> 882226357mysql> SELECT UNIX_TIMESTAMP(1997-10-04 22:23:00);->

30、; 875996580當 UNIX_TIMESTAMP 被用于一個 TIMESTAMP 列時,函數(shù)直接返回一個內部的時間戳值,而不進行一個隱含地 “string-to-unix-timestamp” 轉換。如果你傳遞一個超出范圍的日期參數(shù)給 UNIX_TIMESTAMP() ,它將返回 0,但是請注意,MySQL 對其僅僅進行基本的檢驗(年范圍 1970-2037,月份 01-12,日期 01-31)。 如果你希望減去 UNIX_TIMESTAMP() 列,你應該需要將結果強制轉換為一有符號整數(shù)。查看章節(jié) 6.3.5 Cast 函數(shù)。FROM_UNIXTIME(unix_timestamp ,

31、format)以 YYYY-MM-DD HH:MM:SS 或 YYYYMMDDHHMMSS 格式返回一個 unix_timestamp 參數(shù)值,返回值的形式取決于該函數(shù)使用于字符串還是數(shù)字語境。 如果 format 給出,返回值依 format 字符串被格式。format 可以包含與 DATE_FORMAT() 函數(shù)同樣的修飾符。mysql> SELECT FROM_UNIXTIME(875996580);-> 1997-10-04 22:23:00mysql> SELECT FROM_UNIXTIME(875996580) + 0;-> 19971004222300m

32、ysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),%Y %D %M %h:%i:%s %x);-> 1997 23rd December 03:43:30 1997SEC_TO_TIME(seconds)以 HH:MM:SS 或 HHMMSS 格式返回參數(shù) seconds 被轉換到時分秒后的值,返回值的形式取決于該函數(shù)使用于字符串還是數(shù)字語境:mysql> SELECT SEC_TO_TIME(2378);-> 00:39:38mysql> SELECT SEC_TO_TIME(2378) + 0;-> 3938TIME

33、_TO_SEC(time)將參數(shù) time 轉換為秒數(shù)后返回:mysql> SELECT TIME_TO_SEC(22:23:00);-> 80580mysql> SELECT TIME_TO_SEC(00:39:38);-> 2378如何解決MYSQL數(shù)據(jù)庫中文亂碼問題?在數(shù)據(jù)庫安的時候指定字符集如果在安完了以后可以更改以下文件:C:Program FilesMySQLMySQL Server 5.0my.ini里的所有的 default-character-set=gbkC:Program FilesMySQLMySQL Server 5.0datadepot_de

34、velopmentdb.optdefault-character-set=gbkdefault-collation=gbk_chinese_ci建立數(shù)據(jù)庫時候:指定字符集類型CREATE DATABASE haichenCHARACTER SET gbkCOLLATE gbk_chinese_ci;2.建表的時候 也指定字符集CREATE TABLE student (ID varchar(40) NOT NULL default ”,UserID varchar(40) NOT NULL default ”,) ENGINE=InnoDB DEFAULT CHARSET=gbk;-1。創(chuàng)建數(shù)

35、據(jù)庫的時候:CREATE DATABASE databaseCHARACTER SET utf8COLLATE utf8_general_ci;2.建表的時候 CREATE TABLE database_user (ID varchar(40) NOT NULL default ”,UserID varchar(40) NOT NULL default ”,) ENGINE=InnoDB DEFAULT CHARSET=utf8;3.設置URL的時候 jdbc:mysql:/localhost:3306/database?useUnicode=true&characterEncodin

36、g=UTF-8如何提高MySql的安全性?1.如果MYSQL客戶端和服務器端的連接需要跨越并通過不可信任的網(wǎng)絡,那么需要使用ssh隧道來加密該連接的通信。2.使用set password語句來修改用戶的密碼,先“mysql -u root”登陸數(shù)據(jù)庫系統(tǒng),然后“mysql> update mysql.user set password=password(newpwd)”,最后執(zhí)行“flush privileges”就可以了。3.Mysql需要提防的攻擊有,防偷聽、篡改、回放、拒絕服務等,不涉及可用性和容錯方面。對所有的連接、查詢、其他操作使用基于acl即訪問控制列表的安全措施來完成。也有

37、一些對ssl連接的支持。4.設置除了root用戶外的其他任何用戶不允許訪問mysql主數(shù)據(jù)庫中的user表;加密后存放在user表中的加密后的用戶密碼一旦泄露,其他人可以隨意用該用戶名/密碼相應的數(shù)據(jù)庫;5.使用grant和revoke語句來進行用戶訪問控制的工作;6.不要使用明文密碼,而是使用md5()和sha1()等單向的哈系函數(shù)來設置密碼;7.不要選用字典中的字來做密碼;8.采用防火墻可以去掉50%的外部危險,讓數(shù)據(jù)庫系統(tǒng)躲在防火墻后面工作,或放置在dmz區(qū)域中;9.從因特網(wǎng)上用nmap來掃描3306端口,也可用telnet server_host 3306的方法測試,不允許從非信任網(wǎng)絡

38、中訪問數(shù)據(jù)庫服務器的3306號tcp端口,需要在防火墻或路由器上做設定;10.為了防止被惡意傳入非法參數(shù),例如where id=234,別人卻輸入where id=234 or 1=1導致全部顯示,所以在web的表單中使用”或”"來用字符串,在動態(tài)url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql數(shù)據(jù)庫是非常危險的;11.在傳遞數(shù)據(jù)給mysql時檢查一下大小;12.應用程序需要連接到數(shù)據(jù)庫應該使用一般的用戶帳號,開放少數(shù)必要的權限給該用戶;$page_devide$13.在各編程接口(c c+ php perl java jdbc等)中使用特

39、定逃脫字符函數(shù);在因特網(wǎng)上使用mysql數(shù)據(jù)庫時一定少用傳輸明文的數(shù)據(jù),而用ssl和ssh的加密方式數(shù)據(jù)來傳輸;14.學會使用tcpdump和strings工具來查看傳輸數(shù)據(jù)的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通用戶來啟動mysql數(shù)據(jù)庫服務;15.不使用到表的聯(lián)結符號,選用的參數(shù) skip-symbolic-links;16.確信在mysql目錄中只有啟動數(shù)據(jù)庫服務的用戶才可以對文件有讀和寫的權限;17.不許將process或super權限付給非管理用戶,該mysqladmin processlist可以列

40、舉出當前執(zhí)行的查詢文本;super權限可用于切斷客戶端連接、改變服務器運行參數(shù)狀態(tài)、控制拷貝復制數(shù)據(jù)庫的服務器;18.file權限不付給管理員以外的用戶,防止出現(xiàn)load data /etc/passwd到表中再用select 顯示出來的問題;19.如果不相信dns服務公司的服務,可以在主機名稱允許表中只設置ip數(shù)字地址;20.使用max_user_connections變量來使mysqld服務進程,對一個指定帳戶限定連接數(shù);21.grant語句也支持資源控制選項;22.啟動mysqld服務進程的安全選項開關,local-infile=0或1 若是0則客戶端程序就無法使用local load

41、data了,賦權的一個例子grant insert(user) on mysql.user to user_name'host_name;若使用skip-grant-tables系統(tǒng)將對任何用戶的訪問不做任何訪問控制,但可以用 mysqladmin flush-privileges或mysqladmin reload來開啟訪問控制;默認情況是show databases語句對所有用戶開放,可以用skip-show-databases來關閉掉。23.碰到error 1045(28000) access denied for user root'localhost (using p

42、assword:no)錯誤時,你需要重新設置密碼,具體方法是:先用skip-grant-tables參數(shù)啟動mysqld,然后執(zhí)行 mysql -u root mysql,mysql>update user set password=password(newpassword) where user=root;mysql>flush privileges;,最后重新啟動mysql就可以了。MySQL面試題1、MySQL取得當前時間的函數(shù)是?,格式化日期的函數(shù)是2、寫出 SQL語句的格式 : 插入 ,更新 ,刪除表名UserName Tel Content Date張三 1333366

43、3366 大專畢業(yè) 2006-10-11張三本科畢業(yè) 2006-10-15張四中專畢業(yè) 2006-10-15(a) 有一新記錄(小王高中畢業(yè) 2007-05-06)請用SQL語句新增至表中(b) 請用sql語句把張三的時間更新成為當前系統(tǒng)時間(c) 請寫出刪除名為張四的全部記錄3、請寫出數(shù)據(jù)類型(int char varchar datetime text)的意思; 請問varchar和char有什么區(qū)別4、MySQL自增類型(通常為表ID字段)必需將其設為(?)字段5、以下請用PHPMYADMIN完成(一)創(chuàng)建新

44、聞發(fā)布系統(tǒng),表名為message有如下字段id 文章idtitle 文章標題content 文章內容category_id 文章分類idhits 點擊量(二)同樣上述新聞發(fā)布系統(tǒng):表comment記錄用戶回復內容,字段如下comment_id 回復idid 文章id,關聯(lián)message表中的idcomment_content 回復內容現(xiàn)通過查詢數(shù)據(jù)庫需要得到以下格式的文章標題列表,并按照回復數(shù)量排序,回復最高的排在最前面文章id 文章標題 點擊量 回復數(shù)量用一個SQL語句完成上述查詢,如果文章沒有回復則回復數(shù)量顯示為0(三)上述內容管理系統(tǒng),表category保存分類信息,字段如下catego

45、ry_id int(4) not null auto_increment;categroy_name varchar(40) not null;用戶輸入文章時,通過選擇下拉菜單選定文章分類寫出如何實現(xiàn)這個下拉菜單MYSQL面試題:十一個高級MySql 面試題1. Explain MySQL architecture. The front layer takes care of network connections and security authentications, the middle layer does the SQL query parsing, and then the qu

46、ery is handled off to the storage engine. A storage engine could be either a default one supplied with MySQL (MyISAM) or a commercial one supplied by a third-party vendor (ScaleDB, InnoDB, etc.)2. Explain MySQL locks. Table-level locks allow the user to lock the entire table, page-level locks allow

47、locking of certain portions of the tables (those portions are referred to as tables), row-level locks are the most granular and allow locking of specific rows.3. Explain multi-version concurrency control in MySQL. Each row has two additional columns associated with it creation time and deletion time

48、, but instead of storing timestamps, MySQL stores version numbers.4. What are MySQL transactions? A set of instructions/queries that should be executed or rolled back as a single atomic unit.5. Whats ACID? Automicity transactions are atomic and should be treated as one in case of rollback. Consisten

49、cy the database should be in consistent state between multiple states in transaction. Isolation no other queries can access the data modified by a running transaction. Durability system crashes should not lose the data.6. Which storage engines support transactions in MySQL? Berkeley DB and InnoDB.7.

50、 How do you convert to a different table type? ALTER TABLE customers TYPE = InnoDB8. How do you index just the first four bytes of the column? ALTER TABLE customers ADD INDEX (business_name(4)9. Whats the difference between PRIMARY KEY and UNIQUE in MyISAM? PRIMARY KEY cannot be null, so essentially

51、 PRIMARY KEY is equivalent to UNIQUE NOT NULL.10. How do you prevent MySQL from caching a query? SELECT SQL_NO_CACHE 11. Whats the difference between query_cache_type 1 and 2? The second one is on-demand and can be retrieved via SELECT SQL_CACHE If youre worried about the SQL portability to other se

52、rvers, you can use SELECT /* SQL_CACHE */ id FROM MySQL will interpret the code inside comments, while other servers will ignore it.MYSQL面試題:簡單敘述一下MYSQL的優(yōu)化1.數(shù)據(jù)庫的設計盡量把數(shù)據(jù)庫設計的更小的占磁盤空間.1).盡可能使用更小的整數(shù)類型.(mediumint就比int更合適).2).盡可能的定義字段為not null,除非這個字段需要null.3).如果沒有用到變長字段的話比如varchar,那就采用固定大小的紀錄格式比如char.4).表

53、的主索引應該盡可能的短.這樣的話每條紀錄都有名字標志且更高效.5).只創(chuàng)建確實需要的索引。索引有利于檢索記錄,但是不利于快速保存記錄。如果總是要在表的組合字段上做搜索,那么就在這些字段上創(chuàng)建索引。索引的第一部分必須是最常使用的字段.如果總是需要用到很多字段,首先就應該多復制這些字段,使索引更好的壓縮。6).所有數(shù)據(jù)都得在保存到數(shù)據(jù)庫前進行處理。7).所有字段都得有默認值。8).在某些情況下,把一個頻繁掃描的表分成兩個速度會快好多。在對動態(tài)格式表掃描以取得相關記錄時,它可能使用更小的靜態(tài)格式表的情況下更是如此。2.系統(tǒng)的用途1).盡量使用長連接.2).explain 復雜的SQL語句。3).如果

54、兩個關聯(lián)表要做比較話,做比較的字段必須類型和長度都一致.4).LIMIT語句盡量要跟order by或者 distinct.這樣可以避免做一次full table scan.5).如果想要清空表的所有紀錄,建議用truncate table tablename而不是delete from tablename.6).能使用STORE PROCEDURE 或者 USER FUNCTION的時候.7).在一條insert語句中采用多重紀錄插入格式.而且使用load data infile來導入大量數(shù)據(jù),這比單純的indert快好多.8).經(jīng)常OPTIMIZE TABLE 來整理碎片.9).還有就是d

55、ate 類型的數(shù)據(jù)如果頻繁要做比較的話盡量保存在unsigned int 類型比較快。3.系統(tǒng)的瓶頸1).磁盤搜索.并行搜索,把數(shù)據(jù)分開存放到多個磁盤中,這樣能加快搜索時間.2).磁盤讀寫(IO)可以從多個媒介中并行的讀取數(shù)據(jù)。3).CPU周期數(shù)據(jù)存放在主內存中.這樣就得增加CPU的個數(shù)來處理這些數(shù)據(jù)。4).內存帶寬當CPU要將更多的數(shù)據(jù)存放到CPU的緩存中來的話,內存的帶寬就成了瓶頸.介紹一下如何優(yōu)化MySql一、在編譯時優(yōu)化MySQL如果你從源代碼分發(fā)安裝MySQL,要注意,編譯過程對以后的目標程序性能有重要的影響,不同的編譯方式可能得到類似的目標文件,但性能可能相差很大,因此,在編譯安裝MySQL適應仔細根據(jù)你的應用類型選擇最可能好的編譯選項。這種定制的MySQL可以為你的應用提供最佳性能。技巧:選用較好的編譯器和較好的編譯器選項,這樣應用可提高性能10-30%。(MySQL文檔如是說)1.1、使用pgcc(Pentium GCC)編譯器該編譯器(1.2、僅使用你想使用的字符集編譯MySQLMySQL目前提供多達24種不同的字符集,為全球用戶以他們自己的語言插入或查看表中的數(shù)據(jù)。卻省情況下,MyS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論