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 表名(列名)
      外键必须都是唯一索引(一般是其他表的主键)
      在表中设立一个外键:constraint fk foreign key(tid) references teacher(id)
        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、普及:角色是权限的集合

猜你喜欢

转载自www.cnblogs.com/shuangfeike/p/11443395.html