zoukankan      html  css  js  c++  java
  • mysql 相关知识与操作

    账号:mysql8登陆root账号,初始密码在/var/log/mysqld.log

      建立账号:create user 用户名@'所有者' identified mysql_native_password by '密码';

      授权: grant 权限 on 作用域 to 用户;
      grant all privileges on *.* to linux;
      grant select name on db.student to admin;

      撤权: revoke 权限 on 作用域 from 用户;
      revoke select on students.* from linux;

      权限:select、insert、drop、update、grant、create、revoke、alter 等
      作用域:数据库.表
      *代表所有

      改密码:mysql5.7以前密码有加密函数:password('密码')

      set password='密码';     --默认为root账户

      set password for 用户名='密码';

      查看权限:desc mysql.user;

      show grants for 用户;

      select * from mysql.user where user='用户名' and host='所有者'G;

    导入、还原数据库:1、工具导入(SQLyog):导入→执行SQL脚本(ctrl+shift+Q)

                2、在mysql中导入:mysql>source d:/db.sql;

                3、在mysql外导入:mysql -uroot <d:/db.sql

    导出、备份数据库:  1、工具导出(SQLyog):导出/备份→备份数据库,转储到SQL(ctrl+shift+E)

                    2、在mysql外导出:①导出多个数据库:mysqldump -uroot --databases db1 ab2 db3 > d:/db.sql

                             ②导出一个数据库中多个表的数据与结构:mysqldump -uroot -p db t1 t2 > d:/m.sql

                          说明:>前面加-t是只要表的数据、加-d只要表结构(操作)

          全部数据库表示为-A

    数据类型
      1、数字:  整数 tinyint、smallint、int、bigint
            小数 decimal(p,s):p为总字数限制,s为小数限制 如:decimal(3,2) 9.9

      2、字符串 :char(18) 18个字节
            varchar(50) 50个字符
            text
            longtext

      3、日期时间: datetime 时间与日期 2019-08-20 15:59:30
             date 日期 2019-08-20


      4、二进制
      5、复合类型

           enum() 枚举:  gender enum('男','女','保密');
          set()集合 :set('java','php','python');
              'java' 'php,python' 'python,php,java' 'html,php'
      6、JSON 类型 (NoSQL 特性)

    操作:(table后面可接if判断条件以是否执行 如:drop table if exists student;)

      导入数据库:source 文件名;

      一、建立表(先use 数据库;)
        create table 表名(
          `列名` 数据类型 约束,
          ...
        )engine=innodb charset=utf8;

        如:create table if not exists student(
          sno int unsigned auto_increment primary key,
          sname varchar(30),
          sgender enum('男','女'),
          sbrithday datetime,
          smoney decimal(8,1),
          sdept varchar(50)default '计算机科学',
          sinfo text
        )engine=innodb charset =utf8 auto_increment = 201601;

      二、 查看表数据:select * from 表名;
      查看表结构:desc 表名;
      修改表:
      -- 修改表名
      alter table 表名 rename to 新名;
      rename table 表名 to 新名;

      -- 增加一列
      alter table 表名 add `列名` 数据类型;
      alter table 表名 add `列名` 数据类型 after;
      alter table 表名 add `列名` 数据类型 first;

      -- 修改列名及类型(缺一不可)
      alter table 表名 change 列名 新名 数据类型;

      -- 删除一列
      alter table 表名 drop `列名`;

      -- 删除表
      drop table 表名;
      drop table if exists 表名;

      三、增删改(where后面用索引信息定位,一般用主键的值)

        增: 插入一条:insert 表名 values(以逗号隔开,字符串用'',空则填null,不可不填)
        插入多条: insert 表名 values(),(),();
        插入部分字段:insert 表名(`列名`,`列名`) values(值,值);
        insert没有插入指定位置之说,因为一般主键是int类型,而表是按主键排列的,若要‘指定’,注意插入条的主键序号

        删: delete from 表名 where `某列名`=值;

        改: update 表名 set `列名`=值 where 用字段定位;
        update 表名 set `列名`=值,`列名`=值 where 用字段定位,用字段定位;

      四、查:(重点,若语句多,可换行区分)

        普通计算:select 函数;
        如:此时:now()、往时:date_add(now(),interval 10 day)、来时:date_add(now(),interval -10 day)、小时:hour(now())、唯一字符串:uuid()

        查询数据:select 查看的字段 from 表名 条件;
        别名格式:select 查看的字段 别名 from 表名 条件;

        ①查看的字段:就是查看的内容以列名或函数计算、并以字段形式显示,写一个就显示一列,查看多个就用逗号隔开。(*表示表中所有字段)     

          1、对查看的内容消去重复:distinct+字段名,如:

            select distinct address ...

          2、普通函数:  ·计行函数:count(*)
                  ·int函数:max()、min()、avg()、sum()、round()、floor()、abs()、ceil()、sqrt()
                  ·字符串(时间)函数:char_length()、length()、now()、 from_unixtime(时间戳)、unix_timestamp('2006-11-04 12:23:00')、concat(连接函数)、concat_ws(分隔符写在第一个位置)、

                            repeat(重复函数)、upper()、lower()、left(字符串,取用个数)、right(str,length)、mid(截取)

                这些函数作为字段,不能直接当作值来用,若要用:如s=max(),可用子查询,用select的结果作为值,如:s=(select max(sno)...)


          3、子查询:将首先查看到的结果括起来作为 新表!用来再select
                如查看成绩最高的学生信息:select * from students where grate =(select max(grate) from student);

          4、if函数:以if()的返回值作为查看结果
                if( 条件,值1,值2)
                if(条件,值1,if(条件,值2,...))
                 如:
                   select 等级,count(*) 人数 from
                   (select sname 姓名,
                    sperformance 成绩,
                    if(sperformance>=90,'优秀',if(sperformance>=80,'良好',if(sperformance>=60,'及格','补考'))) 等级
                    from students
                    ) ss group by 等级;

          5、排序、排名
            5.1、新增一个排序字段:select row_number() over(order by 列名 desc) 序号 from...
            5.2、新增一个排名字段:
                跳号排名:select rank() over(order by 列名 asc) from 表名 order by 列名 asc;
                不跳号 排序:select dense_rank() over(order by 列名 desc) from 表名 order by 列名 asc;
                  select rank() over(order by `grate` asc) from students order by `grate` asc;

        ②条件:就是对前面字段进行要求、限制条件,从而筛选数据,好比为:前面查看的是哪些列(字段),而索引查看的就是哪些行(条),没有条件,所有条数据就全查看了

          1、指定查看哪些行:
            limit 行数;
            limit 开始行,行数;
              select * from students limit 0,10;

          2、查询语句where:where `列名` 如下+数据
                =、!=、>、<、>=、<=:判断值
                and:且
                or:或
                like、not like: 可以使用通配符:%(表示0,1或多个,如:'%为%','王%') _(表示一个字符,如:'__','李_')
                in()、not in()
                is、is not:表示`是非`,用于判断性质(而非判断值)!如:select * from students where name is not null;
                regrep:正则表达式,如:'^[0-9a-zA-Z]+$'
                between .. and .. :用于日期,数字等有序数据,如:select * from stu where `birthday` between '1990-1-1' and '2000-1-1';
                not between .. and ..
          3:分组语句group by :根据后面,相同的分为一组having
              select left(sname,1) 姓,count(*) 人数 from students group by left(sname,1) having count(*)>=5 order by count(*) desc;

          4:排序语句order by:
              升序(默认):order by `列名` asc
              降序:order by `列名` desc

        ③union:连接两个查询语句一并显示,前提是两者表结构相同

        ④外键(关联另外一个表,跨表查看):constraint fk foreign key(列名) references 表名(列名)
          外键必须都是唯一索引(一般是其他表的主键)
          在表中设立一个外键:alter table student add foreign key (tid) references class(id);

                    constraint fk foreign key(tid) references teacher(id)
            

        如果建立外键时遇到foreign key constraint fails 错误,检查两者数据类型即值是否一致,检查引擎是否一致,检查值是否匹配

    还有注意一点,外键必须要对应上另一个表的值或者为null,否则报错,即不能选择别的‘老师’,要么没有

    #所以一般不建议用外键,直接连表查询就好

            select s.`id`,s.`name`,s.`grate`,t.`name` from student s,teacher t where t.`id`=s.`id`;
            select s.`id`,s.`name`,s.`grate`,t.`name` from student s,teacher t from student left join teacher on t.`id`=s.`id`;

      、复制表(备份):
        复制表结构:create table 新表名 like 表名;
        复制表数据:insert 新表 select * from 表名;

        仅复制表数据:create table 新表 as select * from 表名;
        也可以部分复制:create table 新表 as select 列名,列名 from 表名;

    说明
    0、 用户尽量用像 root@%、linux@'192.168.10.11' 这样的格式
    列名最好用``包住
    1、一列称为一个字段(field),其名叫做列名
    2、建立字段的约束条件有: ①auto_increment primary key(主键:唯一索引)
    ②注释:comment,默认:default,无负号:unsigned
    3、表名用->可用数据库.表名<- 实现跨库操作表
    4、单元格内容不可啥都不填,若想表示‘无数据’填null ,若想表示‘空数据’,填0或''
    5、drop 删除:数据库 、表、账号,delete删除数据
    6、查看多个表:select *from stu1,stu2,stu3;
    7、赋予权限后及时刷新权限:flush privileges
    8、普及:角色是权限的集合

    异国有风雪,天涯莫思君 分享一些学Java开发路上的疑难疑点,希望关注方便采纳
  • 相关阅读:
    设计模式基本原则及实例
    Springboot中发送邮件util
    mysql表关联查询索引不生效问题
    个人读书清单整理
    mysql 显示每条记录行号
    Axure教程
    Tomcat配置及原理文章
    HTTPS 简单学习
    Python实现二叉树的非递归先序遍历
    和HTTP相关的web服务器内容
  • 原文地址:https://www.cnblogs.com/shuangfeike/p/11443395.html
Copyright © 2011-2022 走看看