数据库程序员面试分类真题24.docx
数据库程序员面试分类真题24简答题1. 如何确定MySQ1.是否处于运行状态?如何开启MySQ1.服务?正确答案:分为1.inux和Windows来讨论。1)在1.inUX卜启动MySQ1.服务:(江南博哥)Irooigtesdb,pJaViamysqlSUmSERROR!tm,sqlisno<turningInX)电屿曲FWVkeInySqIstmStamcgmy¼lSUCCESS!roottcsd)办SaviCCmysqlSQIuSSUCCESS!11yslMning(WI)rort««fo午PJ-crepIn)S)Inxx2938IO1930,0CKMttOO恤处.tabinmyjqldsifeTjttfiKvarihinysq)-PiHk=>ys'5tttdb.pidmysqlJMI29384319:30网)0).flO09'rSbininysqldteso=-srdiBdir=,vjr1ib,'mysql-p)upn(fr-,MHbysqa-USElysqlTogtrra=Hr现却1«血).6-pid-filr=r,ar.1ib'mysqlits41.pdroot30%234201%OP(So0000X0gripmyl在1.inUX下,也可以通过netstat-nipIgrepInySqId”来查看MySQ1.服务的状态:ErootQtestdb/#netstat-nipgrepmysqldtcp00:3306:*1.ISTEN13853/mysqldunix2CCSTREM1.ISTENING3851113853/mysqldvar1ib/mysq157/mysq1.sock也可以使用mysqld_safe命令启动MySQ1.数据库,通过mysqladmin来关闭MySQ1.数据库:nxxiMib#哂IaiInnUrOevPlhrSh岫Wnm)5lid11三NimingUsi球aPMsWOnian&axnnmJ辰i11rtxeOBbeMCUre.roo(gtdb牛帅qld_sfc&I4rooic5idb胪2017-Ce-23TlftQ2;38.?MWmysqld_safe1.oggingu>'1,s57'11nsl5719.llog11yjqldi3g,.20l7-08-2JT1WE38.726(C9ZmysqldsafcStansgmjnqld(bnceWiIhduas(resHarli)M57,ysql57l9fdw在数据库启动的时候可以加上从指定参数文件进行启动,如下:mysqldsafe-defaults-file=etcf&2)在Windows下启动MySQ1.服务:D:MySQ1.MySQI-advanced-5.6.21-win32bin>nctstartmysqlMySQ1.服务正在启动.MySQ1.服务已经启动成功。进入Windows的服务可以看到:fWaMV)Mc(三)8*'©5-Q>H»SSfttM155tt三MkroioftSharePcntWo*kx>cAudH-手动McrotohSowa<ShdwCopyProw1.2S.李司考点启动2. 创建GBK字符集的数据库NEW1.HR,并查看已建库的完整语句。正确答案:mysq>CREATEDATABASENEW1.HRCHARACTERSETGBK;QuenOK.ITOW就xta!(0.13see)哪ql>SHOWCREATEDATABASENEWURIteUbaSeCreateEabasenet!hrC三1ENTA三'nelhr'*!401W三UCIwWCIHl三gfekI11y*insd(2sa)考点创建数据库3. 如何查看当前数据库里有哪些用户?正确答案:可以通过查询mysql.user表来查询数据库的用户。考点创建数据库4. 如何查看数据库的版本、当前登录用户和当前的数据库名称?正确答案:通过VERSION()函数可以查询版本,通过USERo函数可以杳询当前登录数据库的用户,通过DATABASEo函数可以获取当前连接的数据库名称,如下:mysql>SE1.ECTVERSIONOgVERSloNUSERoDXrABASE(XT3SICK()IWVEKIm1.SfflO;阳邮E()i6l21-cnte!prisrcBfrcial-adranced-'og;5.6.21-rterprisrco三rciai-advand!ogrtlloltostaj-sqllr*inrootSd6ftr-pmjq-Vm河r14.14½trib5.621,for1.inux(x86_M)usingEM三e*11pp考点创建数据库5. 如何连接到MySQ1.数据库?正确答案:连接到MySQ1.数据库有多种写法,假设MySQ1.服务器的地址为192.168.59.130,可以通过如下几种方式来连接VySQ1.数据库:1)mysql-p02)nysql-uroot-Po3)mysql-uroot-hl92.168.59.130-po考点连接数据库6. 哪个命令可以查看所有数据库?也确答案:运行命令:showdatabases;4.考点连接数据库7. 如何切换到某个特定的数据库?正确答案:运行命令:usedatabase_name;<.考点连接数据库一8. 列出数据库内所有的表。正确答案:在当前数据库运行命令:showtables:考点连接数据库9. 在MySQ1.中,VARCHAR与CHAR的区别是什么?VARCHAR(50)中的50代表的含义是什么?正确答案:CHAR是一种固定长度的类型,VARCHAR则是一种可变长度的类型。CHR列的长度固定为创建表时声明的长度。长度可以为O255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。VARCHAR列中的值为可变长字符串。长度可以指定为O65535之间的值。VRCUR的最大有效长度由最大行大d,-11使用的字符集确定。MySQ1.4.1之前的版本,VARCHAR(50)的“50”指的是50字节(Byte)O如果存放UTF8汉字时,那么最多只能存放16个(每个汉字3字节).从MySQ1.4.1版本开始,VARCHAR(50)的“50”指的是50字符(CharaCter),无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。CHAR和VARCHAR类型声明的长度表示保存的最大字符数。例如,CHAR(30)可以占用30个字符。对于MyISAV衣,推荐CHAR类型:对于InnODB表,推荐VARCHAR类型。另外,在进行检索的时候,若列值的尾部含有空格,则CHAR列会删除其尾部的空格,而VRCHR则会保留空格。考点数据类型10. MySQ1.中运算符“V=>”的作用是什么?正确答案:比较运算符“V=>”表示安全的等于,这个运算符和“=”类似,都执行相同的比较操作,不过“<=>"可以用来判断NU1.1.值,在两个操作数均为NU1.1.时,其返回值为1而不为NU1.1.,而当一个操作数为NU1.1.时,其返回值为0而不为NU1.1.。示例如下:m>5ql>slttll<=X),Z<>2,NU1.1.<>MJ1.kl<->0I,2,<=>2:三i<三>WU1.1.I考点数据类型H.MySQ1.数据类型有哪些属性?正确答案:数据类型的属性包括auto_increment、binary、default-,index,notnull、null、primarykey.UniqUe和ZerOfi11,具体见下表。属性列l)auto_increment能为新插入的行赋予一个唯一的整数标识auto_increment符,该属性只用于整数类型2)auto_increment一般从1开始,每行增加1«可以通过binarydefaultindexnotnullnul1primarykey“A1.TERTAB1.ETBNAMEAUTOINCREMENT=n;"语句强制设置H动增长列的初始值,但是该强制的默认值是保留在内存中的。如果该值在使用之前数据库重新启动,那么这个强制的默认值就会丢失,需要在数据库启动以后重新设置3)可以使用1.ASTNSERTID()查洵当前线程最后插入记录使用的值。如果次相入了多条记录,那么返回的是第一条记录使用的自动增长值4)MySQ1.要求将auto_increment属性用于作为主键的列5)每个表只允许有一个auto_increment列6)自动增长列可以手工插入,但是插入的值如果是空或者0,那么实际插入的将是自动增长后的值7)对于InnODB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MylSAM表,H动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前几列进行排序后递增的binary属性只用于CHAR和VRCHR值。当为列指定了该属性时,将以区分大小写的方式排序和比较default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQ1.不允许插入函数或表达式值。此外,此属性无法用于B1.OB或TEXT列。如果已经为此列指定/NU1.1.属性,那么当没有指定默认值时默认值将为讹1.1.,否则默认值将依赖于字段的数据类型如果所有其他因素都相同,要加速数据库查询,那么使用索引通常是最重要的一个步骤。索引一个列会为该列创建一个有序的键数组,每个键指向其相应的表行。以后针对输入条件可以搜索这个有序的键数组,与搜索整个未索引的表相比,这将在性能方面得到极大的提升如果将一个列定义为notnull,那么将不允许向该列插入nul1值。建议在重要情况下始终使用notnull属性,因为它提供了一个基本验证,确保已经向奁洵传递了所有必要的值为列指定null属性时,该列可以保持为空,而不论行中其他列是否已经被填充。null精确的说法是“无”,而不是空字符串或0primarykey属性用于确保指定行的唯一性。指定为主健的列中,值不能重复,也不能为空。为指定为主键的列赋予auto_increment属性是很常见的,因为此列不必与行数据有任何关系,而只是作为一个唯一标识符。主健又分为以下两种:1)单字段主键.如果输入数据库中的每行都已经有不可修改的唯一标识符,一般会使用单字段主键。注意,此主键一旦设置就不能再修改2)多字段主键。如果记录中任何一个字段都不可能保证唯一性,那么就可以使用多字段主键。这时,多个字段联合起来确保唯一性。如果出现这种情况,那么指定一个auto_increment整数作为主键是更好的办法被赋予unique属性的列将确保所有值都有不同的值,只是uniquenull值可以重复。一般会指定一个列为UniqUe,以确保该列的所有值都不同Zerofill属性可用于任何数值类型,用0填充所有剩余字段空zerofill间。例如,无符号ini的默认宽度是10;因此,当“零填充”的int值为4时,将表示它为OooOoOoo04考点数据类型12. UySQI.如何实现插入时,如果不存在则插入,如果存在则更新的操作?正确答案:在Oracle中由MERGEINTO来实现记录已存在就更新的操作,mysql没有MERGEINTo语法,但是有REP1.ACEIT0的写法,同样实现记录已存在就更新的操作。SQ1.Server中的实现方法是ifnotexists(select1fromtwhereid=l)insertintot(id,update_time)values(1,getdate()elseupdatetsetupdate_time=getdateOwhereid=lMySQ1.的REP1.ACEINTO有3种形式:1. REP1.ACEINTOTB1._NAUE(CO1.NAME)VA1.UES(,)2. REP1.ACEINTOTBI._NAME(CO1._NAME)SE1.ECT'3. REP1.ACEINTOTBl-NAMESETCO1._NAME=VA1.UE'其中,“INTO”关键2可以省略,不过最好加上“IT0”,这样意思更加直观。另外,对于那些没有给予值的列,MySQ1.将自动为这些列赋上默认值。13. 用哪些命令可以查看MySQ1.数据库中的表结构?正确答案:查看MySQ1.表结构的命令有如下几种:I)DESC表名。2) SHOWCO1.UMNSFROM表名。3) DESCRlBE表名。4) SHOWCREATETAB1.E表名。5)USEINFORMATION-SCHEMo14. 如何创建TABB表,完整拷贝TABA表的结构和索引,而且不要数据?正确答案:CRETETAB1.ETABB1.IKETABj15. 如何查看某一用户的权限?正确答案:SHOWGRANTSFORUSERNAME;16. 如何得知当前BINARY1.OG文件和POSITION值?正确答案:SHOWMASTERSTATUS;017. 用什么命令切换BlNARY1.oG?正确答案:F1.USH1.OGS;o18. 用什么命令整理表数据文件的碎片?正确答案:OPTIMIZETAB1.ETAB1.ENAME;19. 如何得到TA_1.HR表的建表语句?正确答案:SHOWCREATETAB1.ETA_1.HR;。20. MySQ1.和Oracle如何修改命令提示符?正确答案:MySQ1.的默认提示符为“mysql",可以使用prompt命令来修改,如F:全局:exportMYSQ1._PSl="(uh)d>"兰前会话:PromPt(u0h)dR:m:s>_其中,“u”代表用户名,“h”代表服务器地址,“d”代表当前数据库,”代表时分秒,例如,23:10:10«OraCle的默认命令提示符为“SQ1.”,可以使用“SETSQ1.PRoMPT”命令来修改,如下:sql>showSqlpromptsqlprompt"SQ1.>"SQ1.>setsqlprompt"_usew'_CONNECt_iDENTlFIEr>"SYSlhrdb>SYSlhrdb>SH0WSQ1.PROVPTsqlprompt"_user'0_connect_identifier>w在以上结果SYS表示用户,Ihrdb表示数据库。注意,以上提示符的后有一个空格。如果想全局生效,那么可以修改文件:$0RAC1.E-H0ME/sqlplusadminglogin.sql.在glogin.sql文件中添加如下的内容:setSqlprombtuser'.connectidentifier”这样,每次登录SQ1.*I>lusM时候,SQ1.提示符就会变为设置的内容。