04-mysql基本操作

MySQL数据库基本操作指南
本文介绍了MySQL数据库的基本操作,包括登录MySQL客户端、SQL语言的使用,重点讲述了DDL(数据库定义语言)、DML(数据库操作语言)的应用,如创建、修改和删除数据库与表,以及数据的插入、更新和删除。此外,还提到了DCL(数据库控制语言)用于用户权限的管理和数据备份恢复的方法。

数据库(db)

  • 数据库(db):存储数据的仓库。数据库将数据存储在磁盘
  • 数据库服务器:是指用来运行数据库服务的一台电脑。
  • 数据库管理系统(dbms):专门用来操作和管理数据库的系统。
  • 数据库管理系统的分类:
    • 关系型数据库:MySql,Oracle,Sql Server,db2…
    • 非关系型数据库:redis,MongoDB,NOSQL…
  • 数据管理员(dba):管理数据库。
  • 数据库的组成:数据表,对象,对象之间的关系组成。
  • 数据表:按照一定规则和数据类型来存储数据的表格。
  • 行=记录=实体:数据表中的一行数据。
  • 列=字段=域:数据表中的列

MySQL

  • MySQL:前Sun公司推出的一个数据库管理系统,现属于Oracle。开源,体积小,性能好

  • MySQL5.5及之前的版本免费,之后也要收费。MySQl默认用的是InnoDB存储引擎。

  • 使用MySQl之前一定要启动服务:

  • 手动启动服务:打开任务管理器-》服务-》MySQL-》启动服

  • 用命令启动/关闭服务:以管理员身份打开cmd->net start/stop mysql。

登录MySql客户端:
  • 直接打开MySql客户端,输入密码。
  • 用命令登录:
  • 进行MySQL安装目录的bin目录下-》mysql -u root -p 密码
  • 在环境变量的path中配置MySQL安装目录的bin目录-》mysql -u root -p 密码
  • 用第三方客户端登录:Navicat for MySQL登录。创建连接-》输入用户名和密码
SQL:结构化查询语言。

专门用来对数据库进行操作的语言。后缀名:.sql

  • sql语言的组成:
    • DDL(数据库定义语言)
    • DML(数据库操作语言)
    • DCL(数据库控制语言)
    • TCL(事务控制语言)
DDL:数据库定义语言。

数据定义语言(DDL ,Data Defintion Language)语句:
数据定义语句,用于定义不同的数据对象、数据库、表、列、索引等。常用的语句关键字包括create、drop、alter等

  • 查看数据库:show databases;
  • 创建数据库:create database 数据库名 [default charset utf8];
  • 查看数据库的创建语句:show create database 数据库名;
  • 删除数据库的语句:drop database 数据库名;
  • 查看数据库信息 进入数据库之后 输入 Status ;
  • 进入数据库:use 数据库名;
  • 创建表:
    • 创建表的操作属于DDL(数据库定义语言)操作,所以是由名要求的,对于表名称以及列名称的定义要求如下:
      • 必须字母开头
      • 长度为1~30个字符
      • 对于同一用户不能用相同的表名称
      • 不能使用保留字
       create table 表名(
       	列名1 数据类型 列的特征(primary key,null,not null,unique key...),
       	列名2 数据类型 列的特征,
       	......
       );
    
  • 查看当前数据库中所有的表:show tables;
  • 查看表的创建语句:show create table 表名;
  • 查看表的结构:desc 表名;
  • 修改表名:alter table 原表名 rename 新表名;
  • 修改表中的字段的类型:alter table 表名 modify 字段名 新数据类型;
  • 增加表字段:alter table 表名 add column 字段名 类型;
  • 删除表字段:alter table 表名 drop column 字段名;
  • 修改字段名:alter table 表名 change 字段原名 字段新名 字段类型;
  • 删除表:drop table 表名;
序号类型描述
----1CHAR(长度)表示字符串类型, 数字
2VARCHAR(长度)可以存放数字,字母
3INT(长度)表示INT类型
4DATE表示日期类型(不包含时分秒)
5datetime表示时间类型(包含时分秒)
6TEXT放大文本字符串
7FLOAT浮点类型
8BLOB用于存放二进制文件,例如图片,电影,音乐

char与varchar后面接的数据大小为存储的字符数,而不是字节数

char于varchar的区别
char定义的是固定长度,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中

varchar是变长长度,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格

DML(重点):数据库的控制语言。

数据操作语言(DML , Data Manipulation Language)语句:
数据操作语句,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。常用的语句关键字主要包括insert、delete、update和select等。(DML:添加,修改,删除,DQL:查询)

  • 向表中插入数据:
    • 表中所有字段必须都插入数据:insert into 表名 values(值列表);
    • 写入的列一定要插入数据,表中允许为null列或者有默认值的列可以不插入数据:
    • insert into 表名(列1,列2…) values(值1,值2…);
    • 值列表和列名列表要一一匹配(个数一样,位置一样,类型也要一样)。
    eg:insert into student2 values(1,'aa',18,'1',default,null);
    	insert into student2(sid,sname,sage,ssex) values(1,'bb',22,'0');
    
  • 修改表中的数据:记得要写修改条件,如果不写默认修改整张表。
    • update 表名 set 列名1=值1,列名2=值2…where 条件;
    eg: update from student2 set sname='cc' where sid=2;
    
  • 删除表中的数据:记得写条件,不写条件,整张表中的数据全删除了。
    sql delete from 表名 where 条件;
    • 注意:删除整张表:
      • drop table 表名; 删除表同时与表相关的所有东西都删除;删除最彻 底。
      • truncate table 表名;只删除表中数据,表中自增列也要从头开始, 一页一页删除;删除效率最高。
      • delete from 表名;只删除表中数据,表中自增列接着,一条一条删 除;
  • 查询表中数据:聚合列可以在select,group by,having,order by后面用。
select 列名列表
	  from 表名
	  [where 条件   (边查边筛选)]
	  [group by 分组列]
	  [having 条件   (查询完后分组之后再筛选,Having一定有group by]
	  [order by 排序列asc/desc;
	  (排序的列可以是多个,先以第一个列排序,当第一个列的值相同时,才会以第二个列排序)]
eg: select * from student where sid>1004;
		select count(sid),cid from student group by cid 
			order by count(sid) asc;
  • 栗子

    • 查询学生人数大于2个人的班级编号和班级总人数。-》查学生表,查班级编号 和班级总人数,条件班级人数大于2
    eg:select count(sid),cid from student group by cid 
    		order by count(sid) asc;
    
    • 查询表中所有的列:select * from 表名;(*代表表中所有的列,模 糊匹配)
    eg:select * from student;
    
    • 聚合函数:

      • count()求总记录数,
      • sum()求和,max()求最大值,
      • min()求最小值,
      • avg()求平均值。
    • 聚合函数一般不可以单独和普通列一起查询,除非普通列作为分组条件。

      eg:select count(sid) as 'count' from student;
      
      	select count(sid),sum(sid),avg(sid),max(sid),min(sid) 
      	from student;
      
    • 去除查询结果集中重复的值(MySql数据库支持)

      • select distinct 列名列表 from 表名;
      eg:select distinct sname,sage from student3;
      
    • 模糊查询:

      • 根据列值(字符类型)部分信息来查询:
        • %通配任意长度的字符,
        • _ 通配任意一个长度的字符,[a-zA-Z]通中括号中任意一个字符。
          select 列名列表 from 表名 where 列名 like '王%';
          eg:select * from student where sname like '%a%';
          
      • 根据数值类型的列查询在一个范围内的所有信息:
        between ...and...
        
        查询学号在10021004之间的所有的学生信息
        				eg:select * from student where sid between 1002 and 1004;
        
      • 根据列等于范围内任意一个值来查询 in
        • 查询学号等于1001或者学号等于1004或者学号等于1006的学

          eg:select * from student where sid in(1001,1004,1006);
          
    • 表连接查询:前提:表与表有相同的列,可以作为表之间连接的桥梁。

      • 内连接:表与表之间是平等-

        • 语法1:select 列名列表

          					   from1,表2,3
          					   where1中的列=2中的列 and2中的列=3中的列;
          
          ```sql
            eg:select sid,sname,sage,student.cid,cname 
            					from student,class1 where student.cid=class1.cid;
            						select s.sid,s.sname,sage,s.cid,c.cname 
            						from student s,class1 c where s.cid=c.cid;  
            ```
          
        • (推荐)语法2:select 列名列表

           	   from1
           	   inner join2 on1中的列=2中的列
           	   inner join3 on3中的列=2中的列
        
        eg:select s.sid,s.sname,sage,s.cid,c.cname 
        						from student s
        							inner join class1 c on s.cid=c.cid;
        
      • 外连接:表与表之间有主次之分,主表中的数据全显示,次表中的数据有与主表中对应的数据就显示,没有对应数据空值显示。

        • 左外连接:以左边的表为主;

          语法:select 列名列表 
          					   from1
          					   left join2 on1中的列=2中的列
          
          //查询所有班级的学生-》以班级表为主
          				eg: select s.sid,s.sname,sage,s.cid,c.cname 
          					from class1 c
          				    	left join student s on c.cid=s.cid;
          				//查询所有的学生信息和对应的班级-》以学生表为主,
          				eg:select s.sid,s.sname,sage,s.cid,c.cname 
          					from student s
          					    left join class1 c on c.cid=s.cid;
          
        • 右外连接:以右边的表为主;

          语法:select 列名列表 
          					   from1
          					   right join2 on1中的列=2中的列
          				//查询所有班级的学生-》以班级表为主
          
          eg: select s.sid,s.sname,sage,s.cid,c.cname 
          					from student s
          						right join class1 c on c.cid=s.cid;
          				//查询所有的学生信息和对应的班级-》以学生表为主,
          					select s.sid,s.sname,sage,s.cid,c.cname 
          					from class1 c
          						right join student s on s.cid=c.cid;
          
    • 子查询:一个查询语句中嵌套另一个完整查询语句。

      • 能用子查询解决的问题,都可以用连表查询解决;
      • 能用连表查询的问题,不一定能用子查询解决;
      • 解决同一个问题一般子查询的效率要高于边表查询,除非子 查询中用了模糊查询。
        • 子查询:由里到外执行。
          -子查询可以作为条件,还可以作为临时表。
          //查询Java1901班的所有学生信息。
          	select sid,sname,sage from student s
          	inner join class1 c on c.cid=s.cid
          	where c.cname='java1901';
          //用子查询分两步:先查询java1901班级名称所对应的班级编号,
          再根据班级编号查询所有的学生信息。
          	select sid,sname,sage from student
          	where cid=(select cid from class1 where cname='java1901');
          
    • 分页查询(MySql):

      • select 列名列表 from 表名 limit 当前页起始记录数,显示的条数;
      • MySql分页的总语法:
        -select 列名列表 from 表名 limit (页码-1)*显示的条数,显示的条数;
        • eg: select sid,sname,sage from student limit 0,2;

DCL:数据库的控制语言:

数据控制语言(DCL, Data Control Language)语句:
数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。

  • 创建用户:create user 用户名[@IP地址] identified by 密码;
eg:create user 'sx' identified by '321';
  • 给用户授权:grant 权限 on 数据库.表名 to 用户名@IP地址 identified by 密码;
eg:grant all on school.student to 'sx'@localhost identified by '321';
  • 给用户撤消权限:revoke 权限 on 数据库.表名 from 用户名@IP地址;
eg: revoke all on school.student from 'sx'@localhost;
  • 数据库备份:以管理员的身份进入cmd->进入SQL/bin->
mysqldump -u 用户名 -p 数据库>路径名+文件名.sql
			eg:mysqldump -u root -p user>D:user.sql
  • 恢复数据库的备份:创建数据库-》进入数据库-》source 路径名+文件名.sql;
eg:source D:school.sql;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值