数据库(mysql)常用命令

打印 上一主题 下一主题

主题 1018|帖子 1018|积分 3054

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一.常见的数据库端口号

Mysql默认端口:3306
oracle 默认端口:1521
Sql server 默认端口:1433
注:Mysql接纳 的是C/S(客户端/服务器端)架构
二.sql 语法底子

服务器,数据库,数据表,记录,字段之间的关系:

一台Mysql服务器可以管理多个数据库
一个数据库可以存在多张二维表,
一张表可以存在多条记录,
一条记录由多个字段组成,
字段是终极的元数据.
注:# 为解释,不会被以为sql语句,每一条 sql语句以;(英文分号结尾)
数据库中常用的数据类型

整数:

int 有符号范围(-2147483648 ~2147483647),无符号范围(0 ~ 4294967295),
可以不用设置长度
小数;decimal, decimal(6,2)表示整数部分加小数部分
字符串:  

字符串是一个或多个字符的序列,这些字符可以是字母、数字、标点符号等。在数据库中,字符
勾通常用于存储文本数据,如姓名、地点、形貌等。
在 SQL 语句中,使用引号可以明确告诉数据库该值是一个字符串,而不是其他类型(如整数或
浮点数)。如果不使用引号,某些字符或字符序列大概会被误以为是 SQL 命令或特殊字符,从而导
致错误。引号内的内容会被当作一个整体处理,包括其中的空格和特殊字符。
带引号的数据都是字符串,单引号、双引号都可以:
中文字符串:'文字信息'
英文字符串:'abc'
数字字符串:'123
变长字符串 :varchar  定长字符串 char
   区别分析
  1.都是用来存储字符串的,只是他们的生存方式不一样,并非是指对字符串长度的限定,字符串
  长度的限定通过(数字)来限定长度。
  2.char 有固定的长度,而 varchar 属于可变长的字符类型
       日期时间 ;datetime       dete 只有日期   
         扩展知识 :       整数型,tinyint,int
   拥有差异长度的整型
   支持整数型,但是支持差异巨细的整数型。
   尺度的整型,4 个字节!
   支持 1,2,3,4,8 种类型的长度!长度的差异,意味着整型的范围是不相同的!
          小数型,

    floatdoubledecimal
    MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M 表示该值的总共长度,D 表示
    小数点后面的长度,M D 又称为精度和标度。
        浮点数

    浮点数按小数位数分为:单精度和双精度
    float,占用 4 个字节,32bit,数值范围为-3.4E38~3.4E38(7 个有效位)
    double,占用 8 个字节,64bit,数值范围-1.7E308~1.7E308(15 个有效位)
        定点数

    decimal,数字型,128bit,不存在精度损失
    MySQL DECIMAL 数据类型用于在数据库中存储精确的数值。我们经常将 DECIMAL 数据类型用于
    保存准确精确度的数据,例如货币数据。
       sql 语句最常报错原因:

  表名重复,字母输错, 中午输入法下输如逗号,该空格的地方没空格,
  navicat 闪退

  原因多是由于屏幕取词功能没有开启
  创建表 

  数据库中 列与字段的区别:

  现实存在表中的就是列
  在运行时创建的,表中现实不存在的就是字段,例如聚合函数的查询效果
  表名默认转换成小写,列名(字段)不区分巨细写
  语法:
  create table 表名( 列名 类型(长度) 约束1 约束2 , 列名2  类型(长度) 约束1 约束2, ....... );
          常见约束:

  primary key (主键约束) :表中唯一的标识符,主键不允许重复,不允许为空,
  not null (非空) :此列不允许写空值
  auto_increment (自动递增):此列的值会自动递增填充
  unsigned 无符号数 : 
  default 默认值 :当不填写时会使用默认值
  unique 唯一:此字段不允许重复
  check 查抄约束: 确保列中的值满足特定的条件
  foreign key ;维护两个表之间的关联关系
  comment :备
  主键与唯一约束的区别 
  1.同一张表中只能有一个主键,但可以有多个unique 
  2.主键的字段值不能为nul,唯一约束的字段值可以为null
  3. 主键字段可以作为其他表的外键,唯一约束不能做其他表的外键
  注意:列名内里不能有空格
     例    1   :创建门生表    students    字段    1   :姓名    name(   变长字符串,长度为    10)   ,并编写备注   
  create table students ( name varchar(10) comment '姓名') comment '门生表';
  
  例 2:创建门生表 student2,
  字段 1:id(整数类型,不能有符号、主键、自动递增),
  字段 2:姓名 name(变长字符串长度为 20、默认值为刘德华),
  -字段 3:年事 age(整数类型、不能有符号、默认值为 20),
  字段 4:身高 high(小数类型,一共 5 位数字,保存小数点后两位)
  create table student2(
  id  int unsigned primary key auto_increment,
  name varchar(20) default '刘德华',
  age int unsigned default 20,
  high decimal(5,2)
  );
  字段都已经限定是 int 了,有必要还搞一个 unsigned 吗?
  如果只限定 int,那么是可以输入、生存负数的
  如果是 int+unsigned,那么只能输入、生存 正整数。
  插入一列

  alter  table 表名 add 列名  类型(长度) 约束 1 约束 2
     例:给表    students    增加一列地点    address   ,类型:变长字符串,长度    20   
  alter table students add address varchar(20);
  关于反引号(``)的使用:

  反引号在 mysql 中是为了区分 mysql 中的保存字符与普通字符而引入的符号,例如在出现字段
  名与 SQL 关键字相同、标识中含空格等环境下就必要使用,否则大概出错,但反引号不是必须的,
  在确保不会导致歧义发生的环境下可以省略掉。
  删除一列 

  alter table 表名 drop 列名
  例:删除表 students 中的地点列 address
  alter table students drop address ;
  

  删除表 

  1. drop table 表名  若表不存在,报错,制止实验
  2.drop table if exists 表名 若表不存在,不报错继续实验
     一次性删除多张表,用逗号隔开表名即可   
  添加行信息

  一.添加多行信息
  insert into 表名 values (值 1, 值2 ,....),(值 1, 值2 ,....),...;
  二.跨行添加信息 
  insert into 表名 (列名1,列名2,列名3) values(值1,值2,值3);
     例:在    student3    表中,新增一行,添加几个单元格的信息:姓名    name   :王五;性别    sex   :男         insert into student3 (name ,sex )values('王五','男');          删除行数据

  delete from 表名 where 列名 =列值 ;
         例     1    :删除     student3     表中     id     为     6     的行数据      delete from student3 where id=6 
   注意:仅实验delete from 表名; 将会删除表格中的所有行信息
   
   update 修改数据 

   update 是对已经存在的数据进行修改
   修改一列的值

   格式:
   update 表名 set列名=新值
   例:给表 student 增加一列 idcord,类型:整数,然后,设置 idcord列的值为3
   alter table student add idcord int; 
   update student set idcord =3;
   修改行中多个单元格的值

   格式:
   update 表名 set 列1=值1,列2=值2 ....where 列名=列值;
       例:将表     student     中,    id     为     5     的门生,姓名     name     修改为 狄仁杰,年事     age     修改为     20         update student set name='狄仁杰',age=20 where id=5;
   将一列值增加

   格式:
    update 表名 set 列名=列名+i;
       例:    将     student     表中,年事列都增加     1          update student set age=age+1;      

   select 查询语句

   查询表格全部信息 

   格式:
   select * from 表名
   查询某一列的信息 

   格式:
   select 列名 from 表名
   查询某几列的内容

   格式:
   select 列1 ,列2 from 表名
   where ●难点

   当必要缩小范围、限定条件的时候,可以通过 where……语句实现。
   每条语句只能有一条where语句
       查询行信息
    在表名之后,使用 where 对表中的数据筛选,符合条件的数据会出现在效果中
    语法:
    select * from 表名 where 列名=列值
   
    where 后面支持多种运算符,对条件进行处理
    小于等于 <=
    大于等于 >=
    不是 xx 的所有效果 !=
    比较运算、逻辑运算、模糊查询、范围查询、空判断
    别名 as (多表联查经常使用)

    给表名起一个别名 ,不会实质性修改表的内容,目的是为了使语句写起来更加简单
    select * from 表名 as 别名
    注意:别名可以为中文,为中文时,加不加引号都可以,仅在这一次查询中起作用
     在等值连接,子查询中表名一旦起了别名,除了起别名的地方,其他地方,都只能使用别名
    一旦使用原名,就会生存
    distinct 消除重复行(效果展示一个)

    在 select 后面 列名 前使用distinct 可以消除重复的行
    语法:
    select  distinct  列名 from  表名
    例:查询 student 表中,门生家乡 hometown 分布环境,效果去除重复
    select  distinct  hometown form student ;
    比较运算符

         等于      =              大于      >              大于等于      >=              小于      <              小于等于      <=              不等于      !=      或      <>            逻辑运算符

    在 sql语句中:当必要 缩小范围,限定条件时,起首思量使用where,如果sql 语句中已经有了
    where ,则使用 and ,where 只能有一个,and可以有多个
    having 只能用于group by 之后, 对内容进行 进一步的过滤
   
    and (而且):

    显示效果是多个条件(多个and)必须同时满足的效果
         例      1     :     在      student      表中,查询      2      班的男同学的信息        select * from  student where class='2班'and sex='男';
    or 或者:

    多个条件中,哪个条件能满足,就显示他的查询效果,
    如果都满足,都显示
         在      student      表中,查询      studentno      是      5     ,或 名字为王昭君的门生信息                 select * from student where name=5 or studentno='王昭君';                 Not 取反

     效果跟 != 一样
           例:      在       student       表中,查询家乡不是天津的门生信息                     select * from student where  not hometown='天津';                    模糊查询 like

     % 表示任意多个字符,或 什么字符都没有, 主要适用字数不限定的场景
     _表示一个任意字符,适用字数限定的场景
     % 表示任意多个字符
     like '李%' 模糊查询以 百字开头的内容
     like '% 飞'模糊查询以飞字结尾的内容
     like'%白%'表示内容中包罗白的内容(无论第几个字)
     like_表示 一个 任意字符,'李_'表示内容有 2 个字,第一个字是李

     like'_亮'表示内容有 2 个字,内容第二个字是亮

     like'_尚_'表示内容是 3 个字,中心的字是尚

     范围查询 in

           in : 在一个 非连续范围内的值,跟or效果一样                     格式:                select * from 表名 where 列名 in (值1,值2,......);                     not in 表示不在这个范围之中               between...and....在一个连续则范围中

     只适用于连续的范围内的数字
     效果等同于 >= xx and <== xx 
     格式:
     select * from 表名 where 列名 between 值1 and 值2
     空判断

     注意:null 与''''是差异的
     null 是没有任何数据的''''是空字符串
           判空       is null                 例       1      :在       students       表中,查询没有填写       card       信息的门生信息                select * from students where card is null               
     order by 排序
     语法:
     升序 (从小到大): select * from 表名 order by 列名 asc (asc 可省略)
     降序 (从大到小):select * from 表名 order by 列名 desc: 
                  将行数据按照列        1        进行排序,如果某些行列        1        的值相同时,按照列        2        排序,以此类推                    语法:                         select * from 表名 order by 列1 asc/desc ,列2 asc/desc,......                   排序语法一般放 sql 语句的末了面,当表的范围已经确定,已经过滤了之后,末了排序                                 例         2        :在         students         表中,查询所有门生信息,年事从大到小排序,年事相同时,按学号升序排序                       select * from student order by age desc,sno asc;              

            聚合函数

      为了快速得到统计数据,常会用到聚合函数,常在select之后使用,from之前使用
      注意:聚合函数不能在where中使用,常在group by中使用 
      注意:使用聚合函数查询时,不能编辑代码并显示其他的列名,行信息是不对应的
      分组+聚合 除外
      count(*) 统计表格的行数

      格式:
      select count(*) from 表名
      
         
           max() 最大值

      格式:
      select max(列名) from 表名
      阐明:聚合函数从此处开始,括号内的内容是筛选数据范围的列名,寄义与 count(*)差异。
      例:在 students 表中,查询女生的最大年事
      select max(age) from students
      

            

       min() 最小值

       格式:
       select min(列名) from 表名
       例:在 students 表中,查询 1 班门生的最小年事
       select min(age) from students
      
               
        sum() 求此列的和

        注意:使用 sum(列)时,不能编辑代码并列显示其它的列名,行信息是不对应的,分组 + 聚合
        除外。
        格式:
        select sum(列名) from 表名
        例:查询北京门生的年事总和
        select sum(age) from students where hometown='北京'
        
                 
         avg() 求此列的平均值
         注意:使用 avg(列)时,不能编辑代码并列显示其它的列名,行信息是不对应的,分组 + 聚合除
         外
         格式:
         select avg(列名) from 表名
         例:查询女生的平均年事
          select avg(age) from students where sex='女'
         
         等值连接,内连接,左连接,右连接查询

         当查询效果的列来源于多张表时,要将多张表连接成一个大的数据集,选择合适的列返回
         等值连接查询和内连接查询: 查询的效果为连个表匹配的到的数据
         左连接查询:查询效果为两个表匹配得到的数据加左表特有的数据
         ,于右表的数据用null填充
         右连接查询:查询效果为两个表匹配得到的数据加右表特有的数据
         ,于左表的数据用null填充
         
         等值连接:

         等值连接语法:
         select * form 表1,表2 where 表1.列名=表2.列名
         (等值连接是通过值相等,来连接的,列名差异,也可以等值连接)
         多表联查时,表示某一列时:要以表名.列名的格式来表示
         3表联查的等值连接语法:
         sleect * form 表1,表2 where 表1.列名=表2.列名 and 表2.列名=表3.列名
         内链接

         语法:
         select * from 表1 inner join 表2 on 表1.列=表2.列
         3表联查
         select * form 表1 inner join 表2 on 表1.相同列=表2.相同列
         inner join 表3 on 表2.相同列=表3.相同列
         (inner join 语法中,inner 可以省略)
         
         左连接
         语法注:左表是主表,主表的名字放在 left join 的左边)
         select* form表1 left join 表2 on 表1.列=表2.列
         三表联查
         select * from 表1 left join 表2 on 表1.相同列=表2.相同列 
         left join 表3 on 表2.相同列=表3.相同列
         
         右连接 

         语法:
         select* from表1 right join 表2 on 表1.相同列=表2.相同列
         三表联查
         select * from 表1 right join 表2 on 表1.相同列=表2.相同列 
         right join 表3 on 表2.相同列=表3.相同列
         on和using的区别

         多表联查,也可以试用using,效果有肯定的区别
         使用 using 进行多表联查的语法:
         select * from 表 1 join 表 2 using(列名)
         using ,是通过列名将表格连接到一起的,列名必须一致
         区别 1. 语法不一样
         2.使用on,效果会显示2个字段,使用using,效果只会显示1个字段
         3.使用on,字段名称可以不一样,是通过等值进行的连接,使用using
         字段名必须一致
         
         union团结查询

         union all  
         连接数据集关键字,可以将两个查询效果集拼接为一个,不会过滤掉相同的记录
         union 
         连接数据集关键字,可以把两个查询效果拼接为一个,会过滤掉相同的记录
                   例:                             (          students           的           studentno           列是主键,不允许重复,未设置自动递增,需手动指定值)                  
         select name,age,class from student3
         union
         select name,age,class from students;
         相同的查询记录会被过滤掉,只显示一次
         select name,age,class from student3
         union all
         select name,age,class from students;
         相同的查询记录不会被过滤掉,有多少条记录,就显示多少条记录
         
         group by 分组

         按照字段分组显示,此字段相同的数据会被放到分组后的一个组中,显示的效果是组名
         ,并不意味着该组中只有一行数据
         分组之后可以使用having+聚合函数进行过滤 
          分组(group by )依据的列名,要出现在select之后,from之前的位置,否则逻辑错误,
         查询可以成功,但是查询的效果并非逐一对应
         格式:
         select 列 from 表名 group by 列
         例:在student表中查询 按照 家乡分组
         select hometown from student where hometown
         
         having 使用

         关于 where ,and having的使用方法:
         当要缩小范围,限定条件,起首要思量where ,如果SQL语句中已经有了where 了
         那就使用and ,一条SQL语句只能有一个where ,可以有多个and,
         having 只用 在group by 的 分组后的效果进行筛选,having后面的运算条件
         跟 where 的相同
         分组并统计
         格式select列 from 表名 group by 列 having count(*) ......
         例:统计student 表中,生源地门生的数量大于1的生源地名称
         select hometown form student group by hometown having count(*)>1
         分组,聚合运算

         子查询中如果括号中select语句中出现分组+聚合函数,必须在括号里的select之后,from之前的聚合函数名称字后起别名 ,以供括号外的select语句调用,如果不起别名,命令就会生存!
                   如果括号外的           select           语句无需调用该聚合函数列的话,则不用起别名。                  语法:
         select 列,聚合 ...from 表名 group by 列
         
         扩展)使用第一个分组条件分组后,再使用第二个分组条件进行分组
         语法:
         select 条件 1,条件 2 from 表名 group by 条件 1,条件 2
         例:在 students 表中,统计每个班的每种性别的人数
         select class ,sex  count(*)  from  student group by class sex 
         limit 获取部分行

         语法: 
         select * from 表名 limit x, y 
         x 表示 从第?行开始,y表示一共显示的行数 ,x为零时
         可以省略
         计算机的索引从0开始
         
         子查询

         在一个select语句中,嵌入另外一个select 语句,那么被嵌入的select
         语句称之为子查询
         主查询和子查询的关系:
         子查询前后加括号,嵌入到主查询中,子查询是辅助主查询的,要么充当条件(值),要么充当
         数据源,子查询是可以独立存在的语句,是一条完整的 select 语句
         子查询分类:
         标量子查询、列级子查询、行级子查询、表级子查询
         

         标量子查询 

         标量子查询的界说:
         子查询返回的效果是表中1个单元格的数据,供外部查询语句查询
         例1:查询班级门生的平均年事
         select avg(age)from student
         例2,查询门生表中年事大于平均年事的门生信息
         select * from student where age>(select avg(age) from studetnt)
         

列级子查询


         子查询的效果是一列(一列多行) ,供外 外部查询语句查询
                   如果子查询的效果是一列一行,由于数据外边有括号,外部查询语句仍然可以通过           in           来调用。                  
         例 1: 根据18岁门生的学号,查询其成绩
         门生表中查询18岁的门生的学号
         select studentno form students where age=18
         通过学号查询查成绩
         select * from scores where studentno in('002','006');
         通过列级子查询一部到位:
         select * from scores where studentno in(select studentno form students where age=18)
         
         行级子查询

         行级子查询界说:
         返回的效果是一行(一行多列),供外部查询语句其中的几个数据进行匹配
         注意:
         行级子查询,只能使用 = ,若使用!=连接,查询效果不准确,想要用!=的场景必要使用标量子查
         询,使用 and 连接。
         例 1:查询与百里玄策同性别、同班的门生信息
         标量子查询:
         select * from students where sex =
         (select sex from students where name = '百里玄策')
         and class =
         (select class from students where name = '百里玄策')
         行级子查询:
         select * from students where (sex,class) =
         (select sex,class from students where name = '百里玄策')
         
         
         例 2:查询与百里玄策性别、班级都不相同的门生信息
         只能使用标量子查询
         select * from students where sex != (select sex from students where name = '百里玄策') and
         class != (select class from students where name = '百里玄策')
         
         表级子查询
         表级子查询的界说:
         内部查询效果是两行两列以上 (就可以明确为是一张表),供外部查询语句使用
         当使用 select * from 表 1 a,(表级子查询) b where a.列名 = b.列名 这个表级子查询语法时,
         必须给第二张表起别名,否则会报错。
         子查询中的聚合函数查询效果,如果必要被主查询调用时,必要给聚合函数起别名,否则报错。
         例 1:查询每个班级中比本身班级平均年事低的门生的姓名、年事、班级
         (2 表联查,表级子查询)
         第一步,按照班级分组,查询每个班级的平均年事,得到一张表
         select class,avg(age) from students group by class
         第二步,2 表联查,表级子查询,限定条件
         select * from
         students a,(select class,avg(age) b1 from students group by class) b
         where a.class = b.class and a.age < b.b1
         子查询中特定关键字使用
         in : (相当于多个 and)
         主查询 where 条件 in (列子查询)
         any | some : (相当于多个 or)
         主查询 where 列 = any (列子查询)在条件查询的效果中匹配任意一个即可,
         all:
         主查询 where 列 = all(列子查询) : 等于内里所有格式,等价于 in
         主查询 where 列 <>all(列子查询) : 不等于其中所有,等价于 not in
         

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表