您好,欢迎访问三七文档
登录mysql–uroot–proot退出exit第一章安装、操作数据库创建数据库CREATEDATABASEt1;查看警告SHOWWARNINGS;查看所有数据库SHOWDATABASES;修改数据库ALTERDATABASEt1CHARACTERSETutf8;查看数据库信息SHOWCREATEDATABASEt1;删除数据库DROPDATABSEt1;CREATEDATABASEt1CHARACTERSETutf8;第二章数据类型与操作数据表INTEnum,如,性别:男、女、保密SET,集合:可以对其中的值进行排列组合:A,B,C,AB,AC,BC,ABCUSEt1;注意,t1前面不加DATABASESELECTDATABASE();查看正在使用的DATABASE注意:前后小括号、只有最后一列没有逗号行:记录列:字段SHOWTABLES显示的是当前数据库中的数据表SHOWCREATETABLESHOWCOLUMNSFROMtb1;INSERT王点的工资输入的是999999.99输出的工资多了一分钱无法使用比较运算符来测试NULL值,比如=,,或者。我们必须使用ISNULL和ISNOTNULL操作符。INSERTtb1VALUES(‘napkin’,23,null);等效于INSERTINTOtb1(name,age)VALUES(‘napkin’,23);注意,是AUTO_INCREMENT,不是两个单词如果输入的记录符合语法要求,技术输入重复,AUTO_INCREMENT的数字也会增加如果7之后赋了一个100的值那么下次自动赋值的结果是101我验证之后发现:如果FLOAT小数位数不为0也可以只是你不知道它会变成什么!!!老师说:自动编号必须为数值型,如果为浮点的话,小数位数一定为0PRIMARYKEY可以简写为KEY对比AUTO_INCREMENT的写法,不要写错了AUTO_INCREMENT和PRIMARYKEY的输入先后可以交换可以有多个为空值的记录CREATETABLEusers(idTINYINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(20)NOTNULL,genderENUM(‘1’,’2’,’3’)DEFAULT‘3’);ALTERTABLE之后,NULL变成了可以为空(默认值),但是Key仍然保持UNIQUE不变!PS:之前定义的PRIMARYKEY也会保持不变第三章约束以及修改数据表回顾本章内容预告CREATETABLEprovinces(idINTAUTO_INCREMENTPRIMARYKEY,name_of_provinceVARCHAR(20)NOTNULL);CREATETABLEusers(user_idvarchar(20)PRIMARYKEYAUTO_INCREMENT,user_nameVARCHAR(20)NOTNULL,p_idINT,FOREIGNKEY(p_id)REFERENCESprovinces(id));注意:REFERENCES要加SSHOWINDEXESFROMprovinces;SHOWINDEXESFROMusers\G;注意,这个地方G一定要大写可以看到外键列被自动创建了索引SHOWCREATETABLEusers;可以看到索引,以及所创建的外键约束实际开发中很少使用物理的外键约束而是用逻辑的外键约束,在数据表的结构上按照存在的某种逻辑方式去定义而不使用FOREIGNKEY关键词,CREATETABLEuser2(user_idINTAUTO_INCREMENTKEY,user_nameVARCHAR(20)NOTNULL,p_idINT,FOREIGNKEY(p_id)REFERENCESprovinces(id)ONDELETECASCADE);必须先在父表中插入记录,然后再到子表中插入记录CREATETABLEuser3(user_idINTAUTO_INCREMENTKEY,user_nameVARCHAR(20)NOTNULL,p_idINT,FOREIGNKEY(p_id)REFERENCESprovinces(id)ONUPDATECASCADE);了解FIRST表示位于所有列之前AFTER表示位于所选列之后ALTERTABLEusersADDidINTAUTO_INCREMENTPRIMARYKEY;添加多列的时候,无法指定位置,只能位于所有数据表之后添加多列的时候,需要加小括号可以用两个DROP来删除两列,用一个DROP+一个ADD:删除一列的同时也添加一列例如:ALTERTABLEusersDROPage,ADDgenderINTAFTERname;ALTERTABLEusersADDPRIMARYKEY(id);注意,如果写成ALTERTABLEusersADDKEY(id);的话,就会是下图这样可以有多个唯一约束ALTERTABLEADDUNIQUE(users);ALTERTABLEusersADDFOREIGNKEY(p_id)REFERENCESprovinces(id);ALTERTABLEprovincesALTERnameSETDEFAULT‘wangdian’;ALTERTABLEprovincesALTERnameDROPDEFAULT;ALTERTABLEusersDROPPRIMARYKEY;不用指定列的名字,因为一张数据表里面只有一个主键ALTERTABLEusersDROPINDEXp_id;注意:这里是DROPindex_name,一般来说index_name跟列名字一样,但也有例外可以通过SHOWINDEXESFROMusers;来查看索引index_nameALTERTABLEusersDROPFOREIGNKEYusers_ibfk_1;注意:这里FOREIGNKEY的名字是users_ibfk_1,比较奇葩可以通过SHOWCREATETABLEusers;来查看FOREIGNKEY的名字ALTERTABLEusersMODIFYp_idINTNOTNULLAFTERid;注意,如果不改变数据类型的话,黄色部分也必须写,且需要跟创建的时候写得一样注意:由SMALLINT改到TINYINT的话,可能会造成数据丢失CHANGE语句包含了MODIFY语句的所有功能,并且可以同时修改列名称ALTERTABLEusersRENAMEuserssssssss;RENAMETABLEusersTOusers2,userssTOuserss2;注意:修改表名或者列名可能导致视图或存储过程出现错误,一般不建议修改第四章操作数据表中的记录回顾约束中:非空约束、默认约束只能是列级约束,而其他的可以是列or表级约束INSERTusersVALUES(DEFAULT,’wangdian’);INSERTusersVALUES(3*4-1,’wangdian’);还可以一次插入多条记录INSERTusersVALUES(1,MD5(‘1a23’),(2,’wangdian’);INSERT语句只能一次性插入一条记录INSERTusersSETid=1,name=‘wangdian’;UPDATEusersSETage=age+5;UPDATEusersSETage=age-id,gender=0;可以更新多个字段UPDATEusersSETage=age+100whereid%2=0;DELETEFROMusersWHEREid=1;说SELECT语句占到MySQL操作的80%以上也不为过SELECTVERSIOIN();SELECTNOW();SELECT3+8;SELECTid,passwordFROMusers;SELECTusers.id,users.passwordFROMusers;这个在多表连接中会用到SELECTidASidddddddd,passwordASpaaaaaFROMusers;AS可以省略,但是为了不造成误解,老师强烈要求保留AS如果在UPDATE或者DELETE后面不用WHERE语句,则会更新或删除全部记录SELECTgenderFROMusersgroupbyage;SELECTSUM(gender)FROMusersGROUPBYage;SELECTgender,idFROMusersGROUPBYageHAVINGid1;HAVING后面直接使用的字段,必须出现在SELECT语句后面思考:为什么id2,结果会是这样。是因为没有包含所有的age?HAVING后面的字段(id)如果出现在聚合函数count(id)里面,则不必出现在查找字段(SELECT)内对于出现的这个结果,我已经完全凌乱了!!!!!!!!学到后面再说吧默认为升序SELECT*FROMusersORDERBYidDESC;SELECT*FROMusersORDERBYage,idDESC;SELECT*FROMusersLIMIT2;等价于SELECT*FROMusersLIMIT0,2;SELECT*FROMusersLIMIT4,1;表示从第5(4+1)开始,返回一条,因为SELECT语句的记录是从0开始编号的,所以返回第5个SELECT*FROMusersLIMIT4,2;返回第5、6个特别注意:所谓SELECT语句从0开始编号的意思是,LIMIT所针对的是SELECT之后的结果,跟原表中的排列顺序无关如:id为11和10的两条记录,在SELECT结果中排在第1、2条所以LIMIT2出现的是这两条结果还需要注意的是,LIMIT2必须放到ORDERBYidDESC的后面INSERTtest(u_name)SELECTnameFROMusersWHEREid10;第五章子查询与连接上节回顾数据准备SETNAMESgbk;以gbk的形式显示,只影响客户端的显示,不影响数据库的显示SELECT*FROMtdb_good\G;SELECTAVG(goods_price)FROMgoods;SELECTROUND(AVG(goods_price),2)FROMgoods;对平均值进行四舍五入,保留2位小数SELECTgoods_id,goods_name,goods_price,FROMgoodsWHEREgoods_price=(SELECTROUND(AVG(goods_price),2)FROMgoods)特别注意:子查询要被括在下括号中,即等号后面的口号不能省略SELECT之后,ROUND之前不能有括号SELECTgoods_priceFROMgoodsWHEREgood_cate=‘超级本’;ANY,比任意一个大就行,取值范围最广SELECTgoods_priceFROMgoodsWHEREgoods_priceANY(SELECTgoods_priceFROMgoodsWHEREgoods_cate=’超级本’);SELECTgoods_priceFROMgoodsWHEREgoods_priceSOME(SELECTgoods_priceFROMgoodsWHEREgoods_cate=’超级本’);可以看出SOME和ANY的结果是一样的SELECTgoods_priceFROMgoodsWHEREgoods_priceALL(SELECTgoods_priceFROMgoodsWHEREgoods_cate=’超级本’);SELECTgoods_priceFROMgoodsWHEREgoods_price=ANY(SELECTgoods_priceFROMgoodsWHEREgoods_cate=’超级本’);注意:ANY函数的参数为SELECT的结果而AVG、ROUND函数的参数却不是SELECT的结果对比以下两个语句:SELECTgoods_priceFROMgoodsWHEREgoods_price(SELECTAVG(goods_price
本文标题:MySQL教程
链接地址:https://www.777doc.com/doc-3610629 .html