zoukankan      html  css  js  c++  java
  • mysql


    1. 如何登陆mysql

    在linux下使用命令 mysql -u 'your username' -p 回车。输入密码即可登陆到mysql

    2. 显示mysql有哪些数据库

    在mysql命令行内使用show databses; 命令查看

    3. 如何选择一个数据库

    通过show databases显示出数据库之后,可通过命令 use 命令选择数据库.比如use test

    4.如何查看表结构

    通过desc 命令可以查看表结构

    5.显示当前登陆用户

    通过 select user(); 命令显示当前用户

    6. 显示当前正在使用的数据库

    通过 select database();命令显示当前正在使用哪个数据库

    7. sql 语气分类

    DDL:数据定义语言, CREATE,DROP,ALTER

    DML:数据操作语言 UPDATE, INSERT,DELETE,SELECT

    DCL:权限语言 GRANT REVOKE,COMMIT,ROLLBACK


    什么是索引,简单来说,就像是一本书,书里面记录着不同的章节和内容,如果你完全没有看过一本新书,想要你找某个章节,你会怎么找,肯定是找目录索引,目录索引记录了每个章节的标题,以及在书中的位置。索引也一样,给你一张数据库的表,如何在上百万行的内容里面快速找到你想找的内容。因此需要给表的字段创建索引

    在mysql的索引当中,主键索引的查询速度是最快的,因为主键字段是唯一的,每个表只有一个主键列。
    索引的分类大概有三种:
    1,主键索引 primary key
    2,普通索引(又分为唯一索引,普通索引)
     
    在创建表的时候为字段创建索引:
    mysql> create table student(
        -> id int(4) not null primary key,
        -> name varchar(20) not null,
        -> age tinyint(2) not null default '0',
        -> key index_name(name)
        -> );
    Query OK, 0 rows affected (0.02 sec)
     
    这样我们就为这个表创建了一个主键索引,primary key
    普通索引 key  index_name(这个代表索引名)
     
    查看表结构就可以看到KEY字段建立索引了 MUL代表普通索引
     
    建立表之后再通过alter 命令建立索引或者修改索引,但是不建议这样做。比如我们刚才创建的表的主键索引是id,我们想要修改使用其他键作为索引,就必须先将id的索引去掉
     
    删除主键索引:
    mysql>alter table student drop primary key;
     
    给已经创建好的表添加主键
    mysql> alter table student change id id int primary key auto_increment;
    Query OK, 0 rows affected (0.09 sec)
    Records: 0  Duplicates: 0  Warnings: 0
     
    这个是为我们已经创建好的student表的id字段添加主键
     
    修改普通索引,刚才我们的表为字段name 建立了普通索引。如果想要改到其他的字段上我们需要将普通索引删除,然后再为其他字段创建普通索引。
    删除普通索引
    mysql> alter table student drop index index_name;
    Query OK, 0 rows affected (0.16 sec)
    Records: 0  Duplicates: 0  Warnings: 0
     
    添加索引
    mysql> alter table student add index index_name(name);
    Query OK, 0 rows affected (0.39 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    如果一个表的某个列比较长,比如是一个博文的话,在上面创建索引,索引也会消耗较大的磁盘空间,因此如果确定了前几个字符是唯一的,就可以为这个列的几个字符创建索引
     
    mysql>create index index_name on student(name(8));
     
    这个语气表示为student表的name字段前8个字符创建索引
     
    查看索引:
    mysql>show index from studentG
     
    为表的字段创建联合索引:
    联合索引是什么意思?就是创建索引时候,同时指定几个字段创建索引,这样做是有时候我们可能同时列一起查询的,联合索引允许列上面已经存在索引的情况下再创建联合索引
    mysql>create index index_name on student(age,name);
     
    这个表示在age,name上创建普通索引
     
    创建唯一索引:
    唯一索引就是比如你在163邮箱申请一个账号时候,每个账号都是唯一 的,已经被使用的用户名,我们就无法使用
    mysql> create unique index uni_name on student(name);
    Query OK, 0 rows affected (0.10 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    数据库作为存储数据的仓库,查询可以说是日常操作数据库当中占的比例是最多的,而select语气也可以说是最复杂的。

    select 是DML语气中的一种,其他DML语气还包括。insert into ,delete,update

    select 语气一般用法为: select 字段名 from tb_name  where 条件 ;
     
    select 查询语气类型一般分为三种:
    单表查询,多表查询,子查询
     
    最简单的单表查询 : select * from tb_name;
    *表示,所有字段
     
    查询特定字段(投影):
    select 字段名1,字段名2, from tb_name;
     
    where 语句过滤查询(选择)
     
    select * from tb_name where 条件 ;
     
    select 后面还可以跟上 关键字 distinct 表示某个字段内重复的数据只显示一次。比如,如果有个表students的字段 gender(性别),里面无非就是男或者女,我们查看该字段,就需要显示每种类别一次就是要distinct 
    select distinct gender from  students;
    from 子句:
    from 后面可以跟上一个表,多个表,或者其他select 
     
    跟上一个表就是单表查询,跟上多个表就是多表查询,跟上select 就是嵌套查询(子查询
     
    因此from 就表示我们要查询的关系。
    where 子句:
    where 子句 :就是布尔关系表达式,一般 使用 >  <  >=  <= 
    where  子句 数值不需要加引号, 字字符需要加引号
    where 还可以跟上 逻辑 and or  not
    例如查询 students 表中字段age(年龄),在20-25期间的学生名字。
    select Name,age from students where age >=20 and age <=25;
     
    where 后面 跟上 like 关键词:
    like  :后面一般跟上 % 表示任意长度任意字符  __ 表示单个字符
     
    例如查找students 表中  Name 字段,以 y开头所有数据,就需要使用like 匹配。
    select Name from students where Name like 'y%';
     
    查找students 表中  Name 字段,以y开头后面跟上4个字符
     
    select Name from student where Name like 'y____'
     
    查找students 表中  Name 字段,包含了ing 的字段。
     
    select Name from students where Name like '%ing%';
     
    查找students 表中  Name 字段以大写 M,N,Y开头的用户
     
    selcet Name from students where Name like 'M%' or Name like 'N%' or Name like '%Y';
     
    或者使用 Rlike (正则表达式)。
     
    select Name from students where Name Rlike '^[MNY].*$';
     
    查找students 表中年龄为 18,20,25的用户
     
    第一种方法:
    select Name from students where age=18 or age=20 or age=25;
     
    第二种方法:使用 in  关键字,后面跟上一个列表
    select Name from student where age in (18,20,25);
     
    students 中有个字段课程(CID2)。查找出改字段,里面为空的字段的,学生姓名 Name
    select Name from students where CID2 is null ;
    查询不为空就是要 is not null
     
    is null  和 is not null可以实现判断字段是否为空 
     
    order by 子句:
    查询后的结果排序:
     
    就比如我们刚才的查询,students 中有个字段课程(CID2)。查找出改字段,里面为空的字段的,学生姓名 Name ,如果我们想对结果进行排序。默认是升序asc  使用关键字 order by  +需要排序的字段   desc (降序)
     
    select Name from students where CID2 is null order by Name desc;
     
    as 子句
     
    用于给字段或者表使用别名。如果某字段名称比较长,或者表名字比较长
     
    例如:
    selcet Name as Na from students as stu;
     
    limit 子句:
    用于显示 结果的前 N 行
    只显示前3行
    select * from students limit 3;
    只显示3行,从第5行开始计算
    select * from students limit 3,5;
     
    group  by 子句 :
     
    用于分组,比如把students 表的 学生 按照男女进行分组
     
    select  age,Gender from students  group by gender 
     
    这样分出的只有两个组,男的和女的
     
    students 表中的字段 有个课程的字段 CID 求出该字段中,需要将课程的人数,大于等于2的显示出来
     
    having 子句
     
    只能和group by 搭配使用,使用group by 分组之后,再用having 过滤
    select CID from students where  having CID >=2
     
    多表查询 :
     
    如果我们有两张表 students (学生表)和 course (课程表,该表显示了,每一个课程的编号(CID),名称(Cname))。现在我们希望查询,每一位学生,学习的第一门课程的,课程名称是什么。
     
     
    select  students.Name course.Cname from students ,courses where students.CID1=course.CID;
    这样的查询就叫自然查询。是建立在某两个字段建立起对应关系的基础上
     
    查询只有有同学选修了某个课程就显示出来,如果课程没有则显示为null
    这样就不能使用自然连接了,需要使用外连接
     
    外连接分为:左外连接  left join  tb_name  on   +连接条件
    右外连接 right jion tb_name  +连接条件
     
    比如我们查询每个同学选修的第一个课程名称,如果课程不存在显示null
     
    select students.Name,course.Cname from students left join course on students.CID1=course.CID 
     
    查询哪些课程有人选,显示出同学名称,没有人选的,显示null
     
    select students.Name,course.Cname from students right join course on students.CID1=course.CID
     
    子查询:(select 查询嵌套另外一个select)
     
    查找students表中,年龄大于平均年龄的同学
    select Name from students where age > (select  avg(age) from students);  
    其中 avg :是求平均值的函数
     
    在比较操作符中使用子查询:子查询只能返回单个词。
    在 in 中使用子查询

    insert 语气属于DML

    简单用法:
    insert into tb_name (字段1,字段2,.........) values(值1,值2,.....)
    注意,字段个数必须和值的个数一致。字符用引号引起来,数字不用,插入空值使用 null
    批量插入:
    insert into tb_name (字段1,字段2,.........) values(值1,值2,.....)[,(值n,值m,....),.............]注意逗号。
    插入的值,不一定用我们给的值,也可以使用表达式。例如你写 1+2 mysql会计算结果,插入字段中
    还可以使用 insert into tb_name set 
    set 语气类似于update 语气。
    例如 insert into text set a1=10,a2=11;
    这样就在字段,a1,a2插入了数据
    查询表中最后一个字段
    select * from tb_name order by 字段名 desc limit 1
    这个表示 将查询的结果降序显示。再使用limit 1 显示第一行
    将一个表中查询的结果,插入另外的表中,前提是字段要对应。
    比如我们将学生表students 中的年龄字段查询出来,大于20的学生名字,性别,年龄 插入 tutors表的字段,姓名,年龄,性别
    insert into tutors (Tname,gender,age) select Name,gender,age from students where age>20;
    插入数据,如果原来表中没有就插入,有就替换。使用replace into 
    和insert 一样的用法。

    update 属于DML语气

    使用update时必须要加上where指定条件,否则将会更新整张表。这是非常危险的。

    用法

    update  tb_name set 字段=值 where 条件;

  • 相关阅读:
    Http异常状态码解决方案。
    integer 面试题。
    int转换为String,常用的四种方法。
    Implicit super constructor Array() is undefined for default constructor. Must define an explicit constructor
    Eclipse的常用设置。
    构造方法详解。
    this关键字。
    面向对象--构造方法知识点。
    生成1-100之间的随机数。
    redis回顾
  • 原文地址:https://www.cnblogs.com/Curry-Coder/p/6810771.html
Copyright © 2011-2022 走看看