十八哥Mysql笔记之基础篇

连接Mysql服务器  

 

  注意 :-h指的是host地址 ; -u指的是user , 之所以打到-p回车再输入密码,是为了防止密码泄露

         如果-h 不写则默认是localhost

★服务器à数据库 database  à多张或一张表 table(建表的同时就是声明列)

 

★基本的语句  

(注意分号结束)

   1、查看当前服务器有什么数据库:show databases 

 2、创建数据库            :create database 

   3、删除数据库            :drop database 数据库名

      删除表                :drop table 表名

   4、选择要操作的数据库    : use 数据库名

   5、查一个数据库有什么表  : show tables

6、 修改表名 : rename table 旧表名 to 新表名    (不能修改数据库的名字)

7查看一个表的结构      : desc 表名   (仅是查看列的结构,不含数据)

8创建表并添加列        :  自定义表名,同时下面设置列名和类型

               Create  table 表名(

                  Num int 

                  Name char(10)

                  Age int ) ;

以上是实例 , 注意每个属性用逗号进行隔开,最后一分号结束

             Ps age int unsigned zerofill à zerofill 表示0填充并且默认unsigned

插入数据的语句 :

     Insert  into 表名

            (num,name,agevalues(1,’张三’,22),(2,’王四’,25;

  注意 :如果插入全部属性则前者可以省略 如果要选择插入某些属性则修改前者即可values 有个 s, 且必须有

注意values的拼写

    

   插入新列的语句 :

         Alter table 表名 add 列名 类型 限制 after 列名

         限制可以是 :(1)unsigned 无符号

         After 是为了声明在哪一列后面,默认在最后一列,如果要放在第一则替换为first

 修改表之修改列 :

     Alter table 表名 change 旧列名 新列名 新列的类型 限制 

          如果要修改原来列的属性可把新列名也写为旧列名即可

  

 修改表之删除列 :

       Alter table 表名 drop 列名

 

 修改表之增加列主键 :

    Alter table 表名 add  primary key (列名)

        如 : 令id列为主键

          

Alter table 表名 add  primary key (id)

  增加主键的时候如果出现duplicate entry错误, 就是因为主键有重复的值

 

修改表中某列的值 : 

          Update 表名 set

           name  =  ‘李四’ , age = 30

          Where 

           Num = 11   

    注意 : where 设置 修改的 条件

 

删除表中某行的数据  : 

      Delete from 表名 where  num = 1

     注 :如果要删除多行,则需要用or

 

查询语句

    查询全部数据   :  Select * from 表名 ;

    查询部分列的数据   : Select numname  from 表名 ; 

    条件查询 : select num,name 

from 表名

                 where num>1   

 

★★★所谓的建表就是 声明列的过程

 

★★★插入的时候整型类型讨论

 

 无符号和有符号分别表示不同的 能够取到的 取值范围 ,为了开发的速度合适的类型,默认是有符号存储范围也是在有符号的范围

    

★★属性进行初始化的赋值时 ,如果没有进行赋值则默认为 null  ,一般创建时可以用语句

          Name char(10)  not  null  default 自定义的默认值 , null不好比较一般都是自定义

    ★★浮点型 floatM,D) M代表精度即是总长度 ; D代表标度即是小数点  

如 :price float(6,2) 9999.99 ~ -9999.99 

       ★★字符型 (注意该类型的数据需要添加单引号)

           CharM  : 定长字符串 , 如果存的数据小于M也实占M个字符,内容不足部分补M代表可容纳的字符数  , 0<=M<=255  , 如 :nihao  五个字符

                            好   一个字符(三个字节

           VarcharM :不定长字符串,如果存的数据小于M个字符,则占数据实际的大小 

0<=M<=65535 (ascii),但是它会有1到2个字节被用于记录长度 

 

 速度上char比较快,varechar比较省资源

 

★★★decimal :高精度浮点数,常用于金融运算,不会出现浮点数计算的误差

 

★★★见识 history herstory  

 

★★★year 类型

 

★★★Date 类型

 


★★★实战建立106宿舍资料

create table ss106(

id int primary key auto_increment,    // 主键,递增

name char(4) not null default '',

age tinyint unsigned not null default 0,

email varchar(30) not null default '',

tel char(11) not null default '',             //电话号码设置为char

salary decimal(7,2) not null default 0,      //金钱的问题设置为decimal类型

intro varchar(1000) not null default ''     //此处结尾不能添加逗号!!

)charset utf8;                          //设置为utf8类型

    Ps :编写以上代码时 , 单词有的打错了 , 导致修改了几次才能运行!!!所以编写代码的时候一定要认真拼写,脑中一定要有印象

 

★★★使用delect的时候,有时候id不存在但也能够执行语句

        

★★★where :  理解为使表达式是否成立,成立则为真

               如 :取出数学比语文高20分的同学成绩

                Select * from students 

Where math-china>20   

 

★★selectwhere常用运算符

 


★  in   : 表示在某个集合内进行取值,

     如 取出学号为2,3,5的学生成绩

   Select * from students where id in(2,3,5);

                    

between : 表示在某个范围内进行取值 ,可以取边界值

     如 取出学号为2~5的学生成绩

      Select * from students where id between 2 and 5 

       这句等于

      Select * from students where id >= 2 and id <= 5 

 

not :Select * from students where id != 2 

Select * from students where not in (2,3)

 

like : 模糊查询 

 (1)取出以某文字开头的 :文字%

      如 :取出姓张的成绩

Select * from students where name like ‘张%’;

 Ps :不姓张则 not like

 

 (2)取出限定字数的 : 文字_ ,一个下划线一个字

  Select * from students where name like ‘张_’;

 

★★★select 之 group : 使用于统计,一般配合统计函数用

 

★      Max : 

如 :找出最高成绩

Select max(grade) from students 

            Sum :

             如 :求出所有商品库存总和

                           Select sum(goods_num) from goods ;

                        Avg :

                          如 :求出所有手机价格的平均价格

              Select avg(price) from goods ;

Conut : 

   如 :求出行数

     Select count(*) from goods ;

  

                    

          ★group by : 进行分组和按此列排序,并在分组中寻找和要求的 ,经常和集函数一起使用 , 如果不和集函数使用也是取出分组的排在第一位置的

             如 :寻找同分组,最高价格

                           Select cat_id , max(price) from goods group by type_id;

                           Ps :添加其他的选项没意义

★把列名当做变量名进行运算 (注:显示出来的栏目统计函数显示的时候会自己占列)

 

 Ps : 显示的名字可以用as 令命名 

 

 

★★ having 语句 : 

    Where 语句不能够 对查询的结果进行操作,需要进一步的操作必须受使用 having

         

如 :查询市场的手机价格和店铺手机价格之间差价为100元的手机

(1) 错误的

Select good_id,good_name,market_price-shop_price as chajia from goods where chajia>100;

(2)正确的

Select good_id,good_name,market_price-shop_price as chajia from goods where market_price-shop_price >100;

但计算了两次

(3)having语句 :

Select good_id,good_name,market_price-shop_price as chajia from goods having chajia>100;

havingwhere 同时使用

如 :查询栏目3的,市场的手机价格和店铺手机价格之间差价为100元的手机

Select good_id,good_name,market_price-shop_price as chajia from goods where good_id = 3 having chajia>100;

◇实战 :计算挂科数目在2科以上的同学的平均成绩

 

 Select name,sum(score<60) as shumu,avg(score) as pj from students group by name haing shumu>=2 ; 

 

★★★order by :改变排序的依据,一般默认升序 , 如果要改为降序则要添加desc

      Order by 列名1[desc/asc],列名2[desc/asc]

      如 :按照价格进行降序排列,在价格排序好之后,如果价格一样的再按照id

 select id,price from goods order by price,id desc

★limit  : 配合order by 使用,限制选出来的条数

         Limit 偏移的数目,限制的条数 à偏移的数目可以不写默认为0

如 :按照价格进行降序排列,在价格排序好之后,如果价格一样的再按照id排,且只取出4,5,6行的数据

 select id,price from goods order by price,id desc limit 3,3

 

 

 

★★★ 特殊的错误 : 

★★如果出现这个情况,分号在前面,就会使任何的语句都不能执行,需要输入;进行结束(即是一个分号和冒号)

 

  ★★版本不支持中文

 

  ★★我擦,用一个insert语句,错了这么多个地方,第一个地方就版本不支持中文,第二个坑爹的地方就是 输入的 字符中含有 中文的字符,特别是标点的问题 , 唉……

 

★★★where , group by , having , order by , limit 多个时,按照这个顺序进行抒写

★★★

★★复制一张表(只是复制表结构) : create  table 表名 like 被复制的表名

★★复制某张表的数据 :insert  into 表名 from被复制的表名(后能加order by等 )

★★清空一张表的数据 :truncated 表名

★★★巧妙的运用

★★查询(select)的结果一般都是一个表结构,所以可以把结果当做表使用,用括号区别

    

  如 :select * from (select id,cat_id,goods_name,shop_price from goods order by cat_id) as temp group by shop_price;

      括号内的查询结果当做一个已有的表进行处理,*表示括号内有的列,把括号内的表称为temp

★★把查询结果当做条件使用 : 

   如 :select goods_id , goods_name from goods where 

goods_id = (select max(goods_id ) from goods) ;

          ★★where 带入行中看是否成立来理解,列看做变量来理解可以运算,查询的结果当做临时表来理解

         ★★★where 型子查询 :把内层的查询结果作为外层查询的比较条件,用 in 来表示在里面

                 如 :取出每个栏目中价格最贵的商品

       Select id,cat_id,shop _price from goods where shop_price in (select max(shop_price) from goods group by cat_id);

                注意 :这里巧妙地把一个查询的结果组作为 外层的查询条件;内层不用cat_id也可以,因为那只是表示显示出来的栏目而已

 

       ★★★From 型子查询 : 把内层的查询结果当成临时表,供外层Sql再次查询

注意 :使用from型的子查询必须 添加别名 , 即是as

否则出现这个错误

 

           如 :取出每个栏目下最新的商品

      Select * from (select id,cat_id,goods_name from goods order by cat_id asc,id des) as temp group by cat_id ;

              先排序好,再按栏目进行取出来

★★★不允许这样操作

 

 

★★★找出挂科两门以上同学的平均成绩

  select name,avg(score) from students where name in (select name from(select name,count(*) as num from students where score < 60 group by name having num>= 2) as temp) group by name;

      把题目进行分解  两个以上,不及格,平均成绩

      所以先找出两科以上,不及格的学生

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值