美文网首页
Mysql 的日常命令

Mysql 的日常命令

作者: Jason_风筝 | 来源:发表于2020-01-10 14:26 被阅读0次

    此篇文章是简单整理, 参考

    数据库

    1.进入根的数据库

    mysql -u root -p
    * 输入你的密码
    * 如初始密码太长, 想改密码: 
        - set password for root@localhost = password('yourpass');
        - FLUSH PRIVILEGES;
    
    

    2.进入远程数据库

    假设远程主机的IP为:23.106.134.88,用户名为root,密码为123456
    打开终端,输入如下命令:
    mysql -h 23.106.134.88 -u root -p 123456
    

    3.退出

    exit
    

    3.数据库

    创建一个名字为mydatabase数据库:  
        - create database mydatabase;
    显示所有的数据库:
        - show databases;
    更改数据库名字: 
        - alter databases Hdatabase;
    更改数据库mydatabase的字符集:
        - alter database mydatabase charset GBK;
    进入数据库:
        - use mydatabase;
    删除名为xhkdb的数据库:
        - drop database xhkdb;
    

    进入数据库后,查看该数据库中的表:  
        - show tables;
    创建表:
        - CREATE TABLE table_name (column_name column_type);
    
    
    • 数据库中创建数据表runoob_tbl:
       CREATE TABLE IF NOT EXISTS runoob_tbl(
       runoob_id INT UNSIGNED AUTO_INCREMENT,
       runoob_title VARCHAR(100) NOT NULL,
       runoob_author VARCHAR(40) NOT NULL,
       submission_date DATE,
       PRIMARY KEY ( runoob_id )
       )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    • 实例解析:
    * 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
    * AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
    * PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
    * ENGINE 设置存储引擎,CHARSET 设置编码。
    
    • 具体
    获取表结构:
        - desc 表名
        - 或者show columns from 表名
    删除表:
        - drop table <表名>
    
    • 插入数据
    INSERT INTO table_name ( field1, field2,...fieldN )
                           VALUES
                           ( value1, value2,...valueN );
    * 如果数据是字符型,必须使用单引号或者双引号,如:"value"。
    
    insert into test (name,sex) values("name1",1);
    * 注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;
    
    • 查询所有行
    SELECT column_name,column_name
    FROM table_name
    [WHERE Clause]
    [LIMIT N][ OFFSET M]
    
    * 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
    * SELECT 命令可以读取一条或者多条记录。
    * 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
    * 你可以使用 WHERE 语句来包含任何条件。
    * 你可以使用 LIMIT 属性来设定返回的记录数, [起始位置,长度]。
    * 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
    
    SELECT * from test WHERE BINARY name='name1';
    
    * 使用了 BINARY 关键字,是区分大小写的意思
    
    *查看表 test 中前行数据
    - select  * from test order by id limit 0,2;   
    - 或者: select * from test limit 0,2; 
    
    • 删除表中数据
    DELETE FROM table_name [WHERE Clause]
    * 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
    * 你可以在 WHERE 子句中指定任何条件
    * 您可以在单个表中一次性删除记录。
    * 当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
    
    delete from account where name="dd";
    
    • 修改表中数据
    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause]
    
    * 你可以同时更新一个或多个字段。
    * 你可以在 WHERE 子句中指定任何条件。
    * 你可以在一个单独表中同时更新数据。
    update account set name="官人2",balance="10000" where id=2;
    
    • 在表中增加/删除/修改字段
    - 增加
     ALTER TABLE 表名 ADD 字段名字 INT DEFAULT ; 
    * 在表account中添加了一个字段sex,类型为int(4),默认值为 1 
      - alter table test1 add age int(4) default 0;
    
    - 删除
    ALTER TABLE 表名  DROP 字段名字;
    * 如果数据表中只剩余一个字段则无法使用DROP来删除字段
      - alter table test1 DROP age;
    
    - 修改字段类型及名称
    * 把字段 age 的类型从 int(4) 改为 int(2),可以执行以下命令
    ALTER TABLE 表名 MODIFY age  int(2);
      - alter table test1 modify age int(2);
      - 修改名字
        - CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。
        - ALTER TABLE 表名 CHANGE 要改的字段 改成什么名字 类型;
        - alter table test1 change age age1 int(2);
    
    • 更改表名
    ALTER TABLE testalter_tbl RENAME TO alter_tbl;
    

    WHERE 子句

    SELECT field1, field2,...fieldN FROM table_name1, table_name2...
    [WHERE condition1 [AND [OR]] condition2.....
    * 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
    * 你可以在 WHERE 子句中指定任何条件。
    * 你可以使用 AND 或者 OR 指定一个或多个条件。
    * WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
    * WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
    

    LIKE 子句

    • 如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的
    SELECT field1, field2,...fieldN 
    FROM table_name
    WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
    * 你可以在 WHERE 子句中指定任何条件。
    * 你可以在 WHERE 子句中使用LIKE子句。
    * 你可以使用LIKE子句代替等号 =。
    * LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
    * 你可以使用 AND 或者 OR 指定一个或多个条件。
    * 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
    
    SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';
    将 runoob_tbl 表中获取 runoob_author 字段中以 COM 为结尾的的所有记录
    

    UNION 操作符

    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions]
    UNION [ALL | DISTINCT]
    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions];
    
    expression1, expression2, ... expression_n: 要检索的列。
    tables: 要检索的数据表。
    WHERE conditions: 可选, 检索条件。
    DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
    ALL: 可选,返回所有结果集,包含重复数据。
    
    UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
    UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
    同时,每条 SELECT 语句中的列的顺序必须相同.
    默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
    当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行
    
    注意:
    1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
    2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同
    

    排序

    SELECT field1, field2,...fieldN FROM table_name1, table_name2...
    ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
    
    你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
    你可以设定多个字段来排序。
    你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
    你可以添加 WHERE...LIKE 子句来设置条件。
    * SELECT * from test ORDER BY submission_date ASC;
    

    GROUP BY 语句

    • 分组 根据某个字段进行分组,相同的放一组,不同的分到不同的组。统计的是数据,不是记录
    group by 字段 [asc/desc];   
    SQL提供了一系列统计函数
    
    Count();  统计分组后的记录数,每一相同的组有多少行记录
    Max();   统计每组最大的值
    Min();   统计每组最小的值
    Avg();   统计每组的平均值
    Sum();   统计每组的和
    select salePrice,count(*),max(cutoff),min(cutoff),avg(cutoff),sum(cutoff) from product group by salePrice;
    
    having , 用于操作查询后的结果
    select salePrice,count(*) from product group by salePrice having salePrice>100;
    

    NULL 值处理

    IS NULL: 当列的值是 NULL,此运算符返回 true。
    IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
    <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
    关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
    在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。
    MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
    

    连接的使用

    * INNER JOIN(内连接,或等值连接):从左表中取出每一条记录,和右表中所有的记录进行匹配,匹配必须是左表中与右表中某个条件相同,最终会保留结果,否则不保留。
      - 基本语法:  左表 [inner] join 右表  on 左表.字段 = 右表.字段;
      - SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
      - 等价于: SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
    
    * LEFT JOIN(左连接):左表为主,然后每条记录与右表进行连接,不管能不能匹配的上,左表都会保留。能匹配,右表某条记录保留,不能匹配,某条记录置为NULL,最终记录数至少不少于左表已有的记录。
      - 基本语法:  SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
    
    * RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
      - SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
    

    相关文章

      网友评论

          本文标题:Mysql 的日常命令

          本文链接:https://www.haomeiwen.com/subject/ofjpactx.html