zoukankan      html  css  js  c++  java
  • day07_mysql基本操作

    1、数据存放目录
    datadir=/app/mysql/data

    2、从配置文件中过滤
    cat /etc/my.cnf |grep datadir


    3、Mysql分服务器端和客户端
    典型的 C/S结构

    mysql-server
    mysql-client

    4、连接服务器
    格式: mysql -h 服务器IP -u 用户名 -p密码

       1、服务器和客户端在一台机器,可以把-h省略
       2、默认会有root用户
          (1)mysql中的root用户和linux中的root用户,只是巧合同名。
          (2)它们存放用户名和密码的地方都不一样: 
          linux中的root用户 /etc/passwd   
          mysql中的root用户存放在库中系统表中
       3、密码默认为空
       4、默认拒绝远程登录



    例: 
       mysql -h 192.168.8.100 -u root -pmysql
       mysql -u root -pmysql  【如果是登录本机,可以省略 -h选项】


    5、退出服务器
    quit或ctrl+c(建议使用,更安全一些)




    ----------库操作----------

    在操作系统中往文本中写数据
    比如:vim /tmp/haha.txt
        
        

    在Mysql数据库中,组织数据用表来组织数据,mysql是关系型数据库。

    什么是关系呢?关系就是表。

    什么是数据库的表?可以把表想成咱们平时填写的纸质表格文件

    什么是数据库?
    平时纸质表格文件多了,就会存放在档案袋里,这个档案袋就是数据库。
    平时纸质表格文件多了,就会存放在箱子里,这个箱子就是数据库。
    平时纸质表格文件多了,就会存放在你包里,你包就是数据库。




    如何操作数据库?如何操作表?如何操作表内的数据?增 删 查 改



    mysql>show databases; 【查看当前有哪些数据库】
               information_schema库 【主要存放mysql运行中的一些状态】




    cd /app/mysql/data
    mkdir vfast
    mysql>show databases; 【在Mysql中:数据库就是一个目录】



    cd /app/mysql/data
    ll   查看【数据库目录的owner和group应该全是Mysql,否则无法正常使用】


    ls -ld /app/mysql/data 【此目录及其子目录,owner和group应该全是Mysql】



    cd /app/mysql/data
    rm -rf vfast

    mysql>show databases; 
    mysql>create database `vfast`; (增加数据库,如果名子以数字开头,加上``)
    mysql>show databases; 




    cd /app/mysql/data
    ll   查看【数据库目录的owner和group全是Mysql】



    mysql>show databases; 
    mysql>drop database vfast;(删除数据库,线上生产库不要轻易执行,非常危险,如果工作中非常执行,要有邮件证明)





    mysql>show databases; 
    mysql>create database `数据库名`; 

    cd /app/mysql/data
    mv vfast haha

    mysql>show databases;


    ----------表操作----------
    咱们要删除一个文件
    1、删除绝对路径      rm -rf /tmp/123.txt
    2、进入目录后,再删除   cd /tmp            rm -rf 123.txt


    咱们mysql的库就是一个目录,咱们创建表也和上面原理一样


    (1)create table 库名.表名(name char(10),age int);

    (2)use 库名
    create table 表名(name char(10),age int);

    (3)show tables

    (4)drop table 表名


    mysql>create table v1(name char(10),age int);
    ERROR 1046 (3D000):No database selected【你登录到Mysql后,没有选择任何库】
    mysql>

    mysql>show databases;
    mysql>create database vfast;
    mysql>show databases;
    (1)
    mysql>create table vfast.v1(name char(10),age int);【我要在vfast库中创建一个v1表】

    (2)
    mysql>use vfast
    mysql>create table v2(name char(10),age int);

    mysql>show tables;
    mysql>drop table v1;





    --------【数据类型】--------
    int 整形
    bigint 长整形


    float 浮点


    char 字符
    varchar 长度可变字符(比较消耗CPU)
    比如:你去酒店订房间,如果是char订了2个房间,只有1个房间你住了,另一个退不了款
          你去酒店订房间,如果是varchar订了2个房间,只有1个房间你住了,另一个能退款
          
    char(5) 不管你用多少,5个空间全分配给你
    varchar(5) 你用了几个,就给你分配几个空间 

    所以,从存放数据的角度看,varchar更经济一些。
    但是反事有一利就有一弊端,它得先计算吧,查一下,一涉及到计算就比较消耗cpu。    
    建议使用char类型      
          
          

    date 日期 20130101和'2013-01-01' 
    create table a6(dd date);
    insert into a6 values(20130101);
    insert into a6 values('2013-01-01');
    select * from a6;


    time 时间  
    datetime 具体日期时间



    enum 枚举   enum('M','F') 65535选1,单选

    mysql> create table a7(sex enum('NAN','NV'));【限制取值只能是'NAN','NV'】
    mysql> insert into a7 values('NAN');
    mysql> insert into a7 values('NV');
    mysql> insert into a7 values('WEIZHI');
    ERROR 1265 (01000): Data truncated for column 'sex' at row 1



    set 集合    set('NAN,NV') 可以64选多,多选

    mysql> create table a8(sex set('NAN','NV'));【限制取值只能是'NAN','NV'】
    mysql> insert into a8 values('NAN,NV');
    mysql> insert into a8 values('NAN');
    mysql> select * from a8;




    blob 二进制 存放图片
    text 大文本  65535个byte
    ----------------------------------------


    desc 表名

    alter table 表名 modify 列名 类型(长度),类型(长度)   【修改表的字段长度】

    alter table 表名 add 列名 类型(长度)    【为表增加新列及类型】
     
    alter table 表名 drop 列名 类型     【删除表的指定列】

    alter table 表名 change 列名 新列名 类型    【修改指定列的名字、类型】

    alter table 表名 rename 新表名   【修改表的名字】

    ? alter table 【使用系统帮助】


    举例:
    mysql> create table t1(a int,b int);
    mysql> alter table t1 modify a char(10);
    mysql> desc t1;
    mysql> alter table t1 add c int;
    mysql> desc t1;
    mysql> alter table t1 drop b;
    mysql> desc t1;
    mysql> alter table t1 change a aa int;
    mysql> desc t1;
    mysql> alter table t1 rename t2;
    mysql> desc t1;
    mysql> desc t2;


    --------------数据操作-------------
    create table b(a1 int,a2 char(10));
    insert into b values(1,'a');
    select * from b;

    insert into b values(2,'b'),(3,'c');
    select * from b;

    insert into b(a1) values(4);
    select * from b;


    delete from b where a1=1;
    select * from b;


    delete from b;【全删除,一行一行删除】 
    truncate b;【全删除,比较快】


    insert into b values(1,'a');
    insert into b values(2,'b');
    select * from b;
    update b set a1=100 where a2='a';
    select * from b;


    update b set a1=66;
    select * from b;



    select 1>=1; 【逻辑值1】
    select 1>=11;【逻辑值0】
    select 1+11; 【数据值12】
    select not 1>=11;【逻辑值1】
    select 1>=11 and 1>0;【逻辑值0】
    select 1>=11 or 1>0;【逻辑值1】
    select not(1>=11 or 1>0);【逻辑值0】
    select 5 between 1 and 10;【逻辑值1】




    输出美观,别名
    select name,shuxue+yuwen+yingyu as total from score;




    聚集函数
    sum
    max
    min
    avg
    count


    select count(*) from 表 一共多少行

    limit 1  取第1条记录


    1  语文
    2  Oracle


    create table score(sno int,cno int,chengji int);
    insert into score values(1,1,100),(1,2,100),(2,1,90),(2,2,100),(3,1,80),(3,2,60),(4,1,70),(4,2,50);


     语文成绩降序排列,取出第1行记录,详细信息
     select * from score where cno=1 order by 成绩 desc limit 1;【排序后,取1行记录】
     
     select * from score where cno=1 order by chengji desc limit 1;

     语文成绩降序排列,取出前3行记录,详细信息
     select * from score order by 语文成绩 desc limit 3;【排序后,取3行记录】

     select * from score where cno=1 order by chengji desc limit 3;

     语文成绩降序排列,取出前第2行和第3行记录,详细信息
     select * from score order by 语文成绩 desc limit 1,2;【排序后,从第1行之后,取2行,实际是第2和第3名】

    select * from score where cno=1 order by chengji desc limit 1,2;

    group by

    select sex,count(*) from student group by sex;
    select sex,count(*) from student group by sex having count(*) >1;

    不同数据库实现分页操作:
    oracle rownum
    mysql limit
    sqlserver top




  • 相关阅读:
    正在呢 webflux
    reactive reactor
    从早上5:30开始整理资料
    1
    ES基础(四十七)第二部分总结与测验
    ES基础(四十六)Elasticsearch 数据建模最佳实践
    ES基础(四十四)Ingest Pipeline & Painless Script
    ES基础(四十三)Update by Query & Reindex
    ES基础(四十二)文档的父子关系
    ES基础(四十一)对象及Nested对象
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/61b3843cd1b73ed6a00453d3e4c1cf87.html
Copyright © 2011-2022 走看看