MySQl基本命令行语句

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43054397/article/details/90708989

MySQl基本命令行语句

mysql 语句规范:

  • 关键字与函数名称全部大写
  • 数据库名称, 表名称, 字段名称 全部小写
  • SQL 语句 必须以分号结尾

注: 因为mysql 默认大小写是不敏感的, 所以下面的语句用小写也是不会有错的。 只是在我们创建数据库的过程中, 使用这个规范能让我们更好的区分;

  • mysql 登陆:

      mysql -uusername -ppassword
      注:
      username 是用户名  
      password 是密码
    

    :-p后可以直接加上密码,就可以直接连接上,但在安全前提下,不建议这写
    lchh
    建议如上面图片上写法直接写

    mysql -uusername -p
    

    就会弹出Enter password : 这里输入的密码会隐藏
    假如忘记了密码,则可以参考 MySQl 忘记密码怎么办?

  • mysql退出 (三种方式):

    quit  exit  \q 
    

  • 显示当前服务器版本

    SELECT VERSION();
    
  • 显示当前时间

    SELECT NOW();
    
  • 显示当前用户

    SELECT USER();
    
  • 查看数据库

    SHOW DATABASES;
    

    MySQL 5.7版本 下默认会有4个数据库 information_schema、mysql、performance_schema、sys;

  • 创建数据库

    CREATE DATABASE 库名 CHARACTER SET utf8;
    

    注:后面的 CHARACTER SET utf8 也可以不写,也可以写为 ”CHARSET utf8 “ 但建议写上去,因为 MySQL 默认 不是 utf8 编码,所以不写这个插入中文字符会因为字符集不兼容报错;
    这里可以参考 MySQL 插入中文报错
    lchh

  • 删除数据库

    DROP DATABASE 库名;
    
  • 选择数据库

    USE 库名
    

    lxhh
    当如上图一般则选中成功

  • 查看当前选择的数据库

    SELECT DATABASE()

    lchh

  • 查看数据库中的表

    SHOW TABLES;
    

    lchh
    一般新建的数据库初始为空表

  • 创建表

    CREATE TABLE 表名 (
    字段 数据类型  其他,
    ......
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
     CREATE TABLE user(
     id int(11) NOT NULL AUTO_INCREMENT,
     username varchar(16) DEFAULT NULL,
     password varchar(16) DEFAULT NULL,
     PRIMARY KEY (id)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    在这里插入图片描述

    • auto_increment 表示自增长
    • primary key 为主键约束
    • default 为默认值约束
    • engine 是指表存储引擎
    • charset 表示默认字符集,与上述数据库创建相同,数据库内每张表都要建成charset utf8,才能保证每张表都不会插入中文报错,这里同样可以参考 MySQL 插入中文报错 当然这两个也都可以不写,不过需要去my.ini配置文件中更改默认字符集;
  • 删除表

    DROP TABLE 表名;
    
  • 查看表结构(2个方法

    DESC 表名;
    

    lchh

    SHOW COLUMNS FROM 表名;
    

    lchh

SELECT 查询:
  • 基本语法:

    SELECT 字段1,字段2, ...
    FROM1
    [INNER | LEFT |RIGHT] JOIN2 ON 连接条件
    WHERE 查询条件
    GROUP BY 字段1
    HAVING 分组条件
    ORDER BY 字段1 [DESC|ASC]
    LIMIT [开始位置,] length;
    
  • SELECT语句由以下列表中所述的几个子句组成:

    • SELECT 之后是逗号分隔列 或 星号(*) 的列表,逗号分隔列表示要返回对应的列, ’ * ’ 则表示返回所有列。
    • FROM 指定要查询数据的表或视图。
    • JOIN 根据某些连接条件从其他表中获取数据。 连接分为:
      • INNER JOIN(内连接)
      • LEFT JOIN(左外连接)
      • RIGHT JOIN (右外连接)
      • CROSS JOIN(交叉连接)
      • FULL JOIN (全连接,但是这个MySQl 没有直接实现, 可以用其他方法实现,具体可参考 MySQl 如何实现 FULL JOIN?
      • 自连接
    • ON 后面跟上连接条件,这个只有表连接时才能用,当然这个可以用WHERE 来替换,
    • WHERE 后跟上查询条件,过滤结果集中的行。
    • GROUP BY 将一组行组合成小分组,并对每个小分组应用聚合函数。
      聚合函数例如:COUNT(),SUM(),MAX(),MIN() …
    • HAVING 跟上分组条件,过滤基于 GROUP BY 子句定义的小分组。
    • ORDER BY 指定用于排序的列的列表,DESC降序,ASC 升序(默认)。
    • LIMIT 限制返回行的数量,[ ] 中的开始位置可以省略,省略的话就默认查询从最开始的前length行,否则查询从开始位置开始的length行。
      注:这里开始位置的查询如数组下标一样,当开始位置为0时,则从数据第1行开始length行;
    • 注: 语句中的 SELECTFROM 语句是必须的,其他部分是可选的。
例如:
  • 不带条件的查询

    SELECT * FROM 表名 ;  -- 查询所有行,显示的结果为字段顺序
    
    SELECT 字段1,字段2 FROM 表名 ; -- 查询对应字段的行,顺序为所列顺序
    
    SELECT 聚合函数 FROM 表名 ; 
    


    聚合函数:

    数名称 作用
    COUNT() 返回某列的行数
    SUM() 返回某列值的和
    AVG() 返回某列的平均值
    MAX() 返回某列的最大值
    MIN() 返回某列的最小值
  • WHERE 基本用法

    SELECT * FROM 表名 [WHERE 字段 = 'XXX'];
    
    • ’ * ’ 表示查询所有数据

    • [ ]内的where可以不写,不写就是查整张表的,写了就是查符合条件的那几行;

    • where 后跟一个条件, =‘ 也可以更换为其他的比较运算符,如: > ,< …

    • where 后可以跟上子查询,具体可以参考 MySQl 子查询

    • where 后 跟上 like 运算符

      SELECT * FROM 表名 WHERE 字段名 LIKE '%XXX%'
      SELECT * FROM 表名 WHERE 字段名 LIKE '_XXX_',
      
    • where 带 IN 关键字的查询
      IN关键字用于判断某个字段的值是否在指定集合中,若在,则该字段所在的记录将会被查询出来.

      SELECT * FROM 表名 WHERE 字段名 IN (元素1,元素2,…);
      

    • where 带 BETWEEN AND 关键字的查询
      BETWEEN AND 用于判断某个字段的值是否在指定范围之内,若在,则该字段所在的记录会被查询出来,反之不会。

      SELECT * FROM 表名 WHERE 字段名 BETWEEN1 AND2;
      

    • 带 AND ,OR 关键字的多条件查询

      SELECT * FROM 表名 WHERE 条件1 AND 条件 2;
      


      这里 AND, OR 可以交替使用,逻辑判断类似于C 语言的 && 与 ||;

  • JOIN 连接:

    SELECT *FROM1
    [INNER | LEFT | RIGHT] JOIN2 ON 连接条件
    

    以此来实现表之间的连接,具体可查询 MySQL 多表查询;

  • 分组查询:

    SELECT * FROM 表名 [WHERE 字段 = 'XXX'] 
    [GROUP BY 字段名] [ HAVING 条件];
    


    这里根据username 分组,分组条件为每组行数大于0由于数据没有username 重复的,所以每行数据为一组,从而全部都查询出来了;

  • ORDER BY 排序:

    SELECT * FROM 表名 [WHERE 字段 = 'XXX'] [GROUP BY 字段名] [ HAVING 条件] 
    ORDER BY 字段名[DESC|ASC];
    

  • LIMIT 限制查询行

    SELECT * FROM 表名 [WHERE 字段 = 'XXX'] [GROUP BY 字段名] [ HAVING 条件] ORDER BY 字段名[DESC|ASC]
    [LIMIT [开始位置,] length];
    



    这里会发现默认从第一行开始查,给定开始位置,则从(开始位置+1)行开始查;

  • 插入数据

    INSERT [INTO] 表名 (字段1, 字段2,...) VALUES ('XXX','XXX',...);
    
    • 这里 [ ] 的 INTO 可以省略;
    • VALUES 可以写成 VALUE ,也就是不加S;
    • 不写插入哪些字段的话,就默认values 后面要跟上表中全部字段的值;

    lchh
    这个时候在查询表中数据,就会有数据了
    lchh

  • (删除)清空表中数据

    DELETE FROM 表名;
    
    TRUNCATE TABLE 表名;
    

    lchh
    lchh
    进行这两个操作中任意一个后,表会为空
    lchh
    上面两种都可以清空表, 但区别在于
    delete 是像橡皮擦一样擦除表中数据,而truncate 则是 复制建表语句, 然后删除表,再以这个数据重新建一张新表,所以当删除表中全部数据时, truncate 效率会更高

    而 delete可以where 条件选择性的删除数据,会更灵活

    DELETE FROM 表名 (WHERE 字段 = 'XXX') ;
    

    lchh

  • 更新表内容

    UPDATE 表名 SET 字段1 = 'XXX' (WHERE 字段2 = 'XXX'); 
    

    lchh

ALTER 修改数据表:
  • 添加单列

     ALTER TABLE tbl_name(表名)  ADD [COLUMN] col_name(字段名) column_definition(字段定义)  [FIRST|AFTER col_name];
    

    注:

    • [ ]内可省略;
    • 这里的[FIRST|AFTER col_name]是指增加列所处的位置,如果不写,则默认置于所有列之后;
    • FIRST 指置于所有字段之前, AFTER col_name 则是指定位于哪个字段之后;

    查询当前所有列:
    lchh
    使用ALTER 增加一列

    ALTER TABLE user ADD name varchar(16) NOT NULL;
    

    lchh
    查询增加后所有列:
    lchh
    这里增加时不指定位置,就会默认放置在最后;
    指定位置增加:

     ALTER TABLE user ADD name1 varchar(16) NOT NULL FIRST;
    

    lchh
    如图所示,指定 FIRST 则字段位于最前;

  • 添加多列

     ALTER TABLE tbl_name(表名)  ADD [COLUMN] (col_name1(字段1) 	column1_definition(字段1定义) ,col_name2(字段2) 	column2_definition(字段2定义) ,...);
    

    注:

    • [ ]内可省略;
    • 添加多个字段时,需用括号把每个字段扩起来;
    • 添加多个字段时, 不能指定字段放置的位置,自动放置于最后;
  • 删除列

     ALTER TABLE tbl_name(表名)  DROP [COLUMN] (col_name1(字段1) ;l
    

    lchh

  • 添加主键约束 ( PRIMARY KEY ):

     ALTER TABLE tbl_name ADD [CONSTRAINT 主键名] PRIMARY KEY [index_type](col_name);
    
  • 删除主键约束:

      ALTER TABLE 表名 DROP PRIMARY KEY;
    

    注: 这里如果使用主键的字段使用了 auto_increment ,主键则不能直接删除;

  • 添加唯一约束 ( UNIQUE KEY ):

     ALTER TABLE tbl_name ADD [CONSTRAINT 索引名] UNIQUE [INDEXE|KEY] [index_type](col_name1,col_name2,...);
    

    注:唯一约束不止一个,所以这里可以同时增加几个;
    lchh

  • 删除唯一约束 :
    方法与下面删除索引一样;

  • 添加外键约束 ( FOREIGN KEY ):

      ALTER TABLE 子表名 ADD [CONSTRAINT 外键名] FOREIGN KEY(外键字段名) REFERENCES 父表名(参照字段名);
    
  • 删除外键键约束:

     ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
    

具体可参考 MySQl 外键约束

  • 添加/删除默认约束

     ALTER TABLE tbl_name ALTER col_name {SET DEFAULT 默认值|DROP DEFAULT}
    

    注:

    • { }中表示为任选其一;
    • SET DEFAULT 默认值 为设置默认值;
    • DROP DEFAULT 为删除默认值;
      lchh
       lchh
      这里看name 行的 Default 的变化;
  • 查看索引

    SHOW INDEXES FROM 表名 [\G];
    
    注: 这里\G 表示以网格方式显示;
    

    lchh

  • 删除索引(或 unique key) (在这之前先通过上面的方法查看到index_name)

     ALTER TABLE tbl_name DROP index index_name;
    

    lchh

  • MODIFY修改

      ALTER TABLE tbl_name MODIFY [COLUMN] col_name(字段名) column_definition(字段定义)  [FIRST|AFTER col_name];
    

    这里的 [FIRST|AFTER col_name] 用法与作用和上述增加列一样;
    注:使用MODIFY 不能改变字段的名字;也不能删除掉约束,但可以增加约束;

  • CHANGE 修改

    ALTER TABLE tbl_name CHANGE  [COLUMN] old_col_name(旧字段名) new_col_name(新字段名) column_definition(字段定义)  [FIRST|AFTER col_name];
    

    CHANGE 功能比较强大,它既可以改列名,也可以更改列定义;但也不能删除掉约束,但可以增加约束;

修改表名称:
方法一:
ALTER TABLE tbl_name RENAME [TO|AS] new_col_name;

方法二:
RENAME tbl_name [TO|AS] new_col_name [,tbl_name [TO|AS] new_col_name),...];

方法一 一次只能改一个表名称 方法二则可以同时改多个,只需用 ‘,’ 隔开;

猜你喜欢

转载自blog.csdn.net/weixin_43054397/article/details/90708989