mysql基本操作命令+高级操作

时间:2022-09-16 19:42:45

mysql基本操作命令+高级操作

(一)mysql基本操作命令

一、数据库操作

  1.新增数据库

  create  database 数据库名字 [数据库选项];

  数据库选项:规定数据库内部该用什么进行规范

             字符集:charset 具体字符集(utf8)

                     校对集:collate 具体校对集(依赖字符集)

 

     2.查看数据库

  2.1查看所有的数据库

  show databases;

    匹配查询:

      show databases like 'pattern';   #pattern可以使用通配符

              _:下划线匹配,表示匹配单个任意字符,如:_s,表示任意字符开始,但是以s结尾的数据库

      %:百分号匹配,表示匹配任意个数的任意字符,如:student%,表示以student开始的所有数据库

 

  2.2查看数据库的创建语句

  show create database 数据库名字;

  

    3.修改数据库

  数据库名字在mysql高版本中不允许修改,所以只能修改数据库的库选项(字符集和校对集)

    alter database 数据库名字 [数据库选项];

  eg:alter database stu charset utf8;

    4.删除数据库

  对于数据库的删除要谨慎考虑,是不可逆的。

     drop database 数据库名字;

   4.选择数据库

  use 数据库名字;

二、数据表操作(字段)

     1.新增数据表

  create table 表名(

  字段名1 数据类型 comment '备注...',

  字段名2 数据类型 comment '备注...',

     ....                       #最后一行不需要逗号

  )[表选项];

  表选项:

      1)字符集:charset/character set(可以不写,默认采用数据库的)

                2)校对集:collate

      3)存储引擎:engine = innodb(默认的):存储文件的格式(数据如何存储)

       注意:创建数据表的时候,需要指定要在哪个数据库下创建。创建方式有隐式创建和显式创建

      1)显式创建:create table 数据库名字.数据表名字

      2)隐式创建:use 数据库名字;

      

      2.查看数据表

      2.1查看所有的数据表

    show tables;

      2.2查看表使用匹配查询

          Show tables like ‘pattern’; #与数据库的pattern一样:_和%两个通配符

      2.3查看数据表的创建语句

     show create table 数据表名字;

   2.4查看数据表的结构

         desc 数据表名字;

     

      3.修改数据表

   3.1修改表名字

      rename table 旧表名 to 新表名;

      3.2修改表选项(存储引擎,字符集和校对集)

    alter table 表名 [表选项];

   3.3修改字段(新增字段,修改字段名字,修改西段类型,删除字段)

    新增字段:alter table  表名 add [column] 字段名字 数据库类型 [位置first/after];

          位置选项:first 在第一个字段

               after 在某个字段之后,默认就是在最后一个字段后面

          修改字段名称:alter table 表名 change 旧字段名字 新字段名字 字段数据类型 [位置];

                eg:alter table student name fullname varchar(30)  after id;

          修改字段的数据类型:alter table 表名 modify 字段名字 数据类型 [位置];

    删除字段:alter table 表名 drop 字段名字;

 

  4.删除数据表

   drop table 表名;

 

三、数据操作

  1. 新增数据

  inser into table 表名 [(字段列表)] values (值列表);

  2.查看数据

  select */字段列表 from 表名 [where条件];

  3.修改数据

  update 表名 set 字段名 = 值  where 条件;

  注意:使用update操作最好配合limit 1使用,避免操作大批量数据更新错误.

  4.删除数据

  delete from 表名 where 条件;

  注意:没有where 条件 就是默认删除全部数据.

 

四、列属性(字段)

  1.删除主键:alter table 表名 drop primary key;

  2.增加主键:alter table 表名 add primary key(字段列表); #可以是复合主键

  3.删除自增长:只能通过修改字段属性的方法操作.

  4.删除唯一键:alter table 表名 drop index 索引名字; #默认的唯一键名字就是字段的本身

  5.增加唯一键:alter table 表名 add unique key (字段列表);  #可以是复合唯一索引

 

五、外键约束

  1.创建表的时候增加外键

  constraint 外键名字 foreign key(外键字段) references 父表(主键字段);

  eg:

    -- 创建父表(班级表)

    create table class(
    id int primary key auto_increment,
    name varchar(10) not null comment '班级名字',
    room varchar(10) not null comment '教室号'
    )charset utf8;

    

    -- 创建子表(外键表)
    create table student(
    id int primary key auto_increment,
    number char(10) not null unique comment '学号:itcast + 四位数',
    name varchar(10) not null comment '姓名',
    c_id int comment '班级ID',
    -- 增加外键
    foreign key(c_id) references class(id)
    )charset utf8;

  2.创建表之后增加外键

  alter table 表名 add constraint 外键名字 foreign key(外键字段) references 父表(主键字段);

  eg: 

    -- 增加外键
    alter table student add constraint student_class_fk foreign key(c_id) references class(id);

  3.删除外键

  alter table 表名 drop foreign key 外键名字;  #查看外键名字需要通过表创建语句来查询.

  eg:

    -- 删除外键

    alter table student drop foreign key student_ibfk_1;

(二)mysql高级操作

 一、新增数据

  1.蠕虫复制:从已经存在的数据表中复制一份,重新插入到数据表中

  insert into 表名[(字段列表)] select 字段列表 from 表名;

  2.主键重复:

  2.1方法一:向一张表中插入数据,但又不确定对应的主键是否存在。如果没有冲突执行插入操作,发生冲突执行更新操作。

  insert into 表名[(字段列表)] values(值列表) on duplicate key  update 字段 = 值;

  2.2方法二:直接使用replace替换(先删除数据,然后执行插入数据)

  replace into 表名[(字段列表)] values(值列表);

  3.从已经存在的表创建表:复制原来的表结构

  create table 表名 like 表名; #可以复制在不同数据库下的数据表

二、更新数据 

  1.标准语法:

  update 表名 set 字段 = 值 where 条件;

  2.高级语法:

  update 表名 set 字段 = 值 where 条件 [limit 数量];

三、删除数据

  1.标准语法:

  delete from 表名 where 条件;

  2.高级语法:

  delete from 表名 where 条件 limit 长度;

  注意:delete 删除数据 不会充值自增长

  3.清空表数据,表结构依然存在

  truncate 表名;

四、查询数据

  1.标准语法:

  select */字段列表 from 表名 where 条件;

  2.完整语法:

  select [select选项] */字段列表[字段别名] from 表名 [where子句] [group by子句] [having子句] [order by 子句] [limit 子句];

   select选项:

        all:保留所有的记录(默认)

        distinct:去掉重复的记录

  字段别名:字段名字 as 别名

       eg:name as 姓名

  where子句:用来在数据进入内存之前筛选数据 

        1)比较表达式:=,>,>=,<,<=,!=,<>

        2)判断字段是否为空:is null/is not null

        3)区间范围:between A and B

        4)逻辑表达式:&& (与)  ||(或)  !(非、取反)

  where子句的筛选原理:从磁盘上读取一条记录,马上进行where条件判断,判断结果成立,存放在内存中,反之,不存放在内存中。等所有记录都读取结束之后,返回内存中的数据.

             where子句之后的所有操作都是基于内存中的数据操作。

  group by 子句:分组子句,按照某个字段,讲所有的结果进行分组存放,最终显示数据的时候,按组进行合并。

  group by 分组原理:先根据某个字段进行分组,但是在分组之后合并数据返回时,系统自动选取每组中的第一条记录。

  group by 常用的统计函数:

              count():统计记录数,参数可以是*或者某个字段名,不统计未null字段

              sum():求某个字段的和

              max():求某个字段的最大值

              min():求某个字段的最小值

              avg():求某个字段的平均值

  group by默认是升序:group by 字段名 [asc/desc];

  having 子句:用来筛选数据。

  注意:1)having 子句是对内存中的数据进行筛选,where子句是对磁盘的数据进行筛选。

     2)having 能够使用group by的统计结果,而where不能使用。

  order by 子句:order by 字段[asc/desc];默认asc升序

  limit 子句:

      1)单纯的限制数据:limit length;

      2) 可以限定获取数据的起始位置以及长度:limit offect length;默认的offect是0开始。

 

  3.联合查询:将多个的查询结果,联合起来横向的相加。

  select 语句1 union [联合查询选项] select 语句2;

  联合查询选项:1)all:保留所有的结果

         2)distinct:去重(默认)

  注意:1)联合查询只要求查询语句的字段数一样,并不要求任何数据类型。

     2)如果要在union联合查询中使用order by,那么必须给select语句使用()包裹,Order by不能生效:order by在union中使用必须搭配limit。

    eg:

      (select * from stu_student where c_id = 1 order by height asc limit 999999)

      union

               (select * from stu_student where c_id = 2 order by height desc limit 999999);