前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL学习-4种语言

MySQL学习-4种语言

原创
作者头像
皮大大
修改2020-12-09 17:38:48
1K0
修改2020-12-09 17:38:48
举报
文章被收录于专栏:机器学习/数据可视化

MySQL学习-4种语言

在MySQL数据库中存在4种常见的语言,它们分别是:

  1. 数据定义语言:DDL,data defination language
  2. 数据操作语言:DML,data manipulation language
  3. 数据控制语言:DCL,data control language
  4. 数据查询语言:DQL,data query language

在接下来的内容中,本文将会对这4种语言进行详细地讲解:

<!--MORE-->

进入数据库

在网上安装MySQL数据库的教程很多,不阐述安装过程。在讲解4种数据库之前,先看看怎么进入到数据库中,以macOS系统为例:

方式1

第一种是通过密码明文方式进入数据库中:

代码语言:txt
复制
mysql -uroot -p123456   # 假设用户名是root,密码是123456

这种方式的好处是我们能够看到自己的用户名和密码,方便检查;缺点就是在系统中暴露了我们的密码,不够安全

方式2

第二种是通过密码暗文方式进入数据库

代码语言:txt
复制
mysql -uroot -p   # 按下回车再输入密码

这种方式后面有跟上用户名,但是密码需要再输入,而且看不到我们用户的内容。

优点就是安全,保证密码不泄露;缺点就是看不到输入的内容,我们可能输入错误的密码也不方便检查,需要我们很有把握保证我们输入正确的密码。笔者一般使用的此种方式

数据定义语言

数据定义语言指的是:data defination language,简称是DDL

DDL的主要作用是创建数据库,以及对库和表的结构进行删除和修改等基本操作,下面是针对库表的操作命令进行解释

全部命令
代码语言:txt
复制
-- 1、数据库操作
show databases;    -- 查看全部的数据库
user test;   -- 使用test数据库(假设存在test)
create batabase school;   -- 创建school数据库
drop database school;    -- 删除school数据库

-- 2、表操作
-- 创建user表,同时指定多个字段
create table user(字段1,字段2,......,字段n);   

-- 查看创建表的语言
show create table user;   

-- 查看表的结构
desc user;

-- 删除表
drop table  user;   -- 删除user表(user为表名)
-- 修改表名
alter table user rename to users;   -- 将user改成users
创建表
代码语言:txt
复制
create table user( id int(10) unsigned not null auto_increment comment "user_id",   -- id作为主键
                  name varchar(20) not null comment "user_name", 
                  email varchar(50) not null comment "user_email", 
                  age tinyint unsigned not null comment "user_age", 
                  fee decimal(10,2) not null default 0.00 comment "user_fee", 
                  createTime timestamp not null comment "user_time", 
                  primary key(id)  
                 );    -- 末尾记得分号
查看表结构

查看上面创建的表结构

代码语言:txt
复制
desc user;    -- 查看创建表的结构
显示创建表的SQL语句
代码语言:txt
复制
show create table user;
字段操作

字段操作的关键词是alter,我们先选中需要操作的表,常见的操作有:

  • modify:修改
  • change:改变名字
  • add:添加字段,默认是在末尾添加,也可以指定位置
代码语言:txt
复制
--  修改字段信息
alter table user modify name varchar(50) not null;  -- 将字段name 从20改为50个字符

--  修改字段名字
alter table user change email user_email varchar(50) not null;  -- 将email改成user_email

-- 末尾添加字段
alter table user add password char(30) not null comment "user_password";   # 增加password字段

-- 指定位置添加字段
alter table user add password1 char(30) not null comment "user_password1" after user_name;   # 在name后面增加password1字段

-- 删除字段
alter table user drop password1;        #删除字段password1

比如我们添加了字段password之后的建表语句:

数据库操作语言

数据操作语言指的是DML,data manipulation language。主要是对数据库中的表记录进行操作的语言,包含往表中插入数据、表中数据的更新、表的删除

插入数据

我们往上面创建的user表中插入数据,我们可以只插入部分字段,未插入的则为NULL;如果是时间则默认为当前时间:

代码语言:txt
复制
-- 将字段名和字段的值一一对应起来,可以只插入部分字段
-- 省略了id和createtime字段
mysql> insert into user(name,email,age,fee,password) values("xiaoming","123456@qq.com",20,56.56,"1234");  

下面是插入全部的字段信息:

代码语言:txt
复制
-- 包含所有字段信息
insert into user values(10, "xiaohong", "78173828@qq.com", 38, 89.19, "2020-11-11 00:00:00", "2468");

几个需要注意的地方:

  • 字符串字段必须用引号括起来
  • 允许只插入部分字段,则未插入的字段显示为NULL
  • 可以省去字段名,直接插入数据的具体值,但是此时需要加上自增的id字段,而且必须填写所有的字段信息,不能只添加部分字段数据
数据更新

数据更新update使用最多的是where语句,指定某个条件下执行;如果不加where,则所有的字段都会被更改,需要慎重考虑此操作

  • 指定id
  • 指定字段的具体值
  • 字段允许有多个,用逗号隔开
代码语言:txt
复制
mysql> update user set name="nangying" where id=6;   --  通过id指定
mysql> update user set fee=88.76 where fee=56.90;   -- 通过字段名直接指定
mysql> update user set email="81847919@qq.com", age=54 where id=7;  -- 同时修改多个值
mysql> update user set fee=88.88 where id in(2,4,6);   -- in的用法
mysql> update user set fee=66.66 where id between 2 and 6;  -- between ... and ...
删除

表的删除有两种操作:

  • delete:删除表或者删除表中的某条记录,插入数据从上一次结束id号开始继续插入;删除的记录仍存在
  • truncate:清空表,重新插入数据id从1开始;不占内存空间

两种方式都可以直接删除表:

代码语言:txt
复制
delete table user;
truncate table user;

假设现在我们的表中存在如下的4条记录,来演示上面两种操作的区别:

1、首先是delete操作,我们删除其中id=8的记录:

代码语言:txt
复制
delete from user where id=8;   --  删除某条记录
image-20201209094152625
image-20201209094152625

接下来我们尝试插入新的数据(没有指定id号),生成新的数据之后我们发现:系统分配的id号是11,也就是说是从当前最大的id号开始往后生成的。

2、我们在看看truncate的操作

truncate是删除整个表,相当于是清空了整个表,之后生成的数据的编号是从id=1开始

再次插入数据之后id号默认从1开始:

image-20201209095335072
image-20201209095335072

数据控制语言

数据控制语言指的是data control language,简称是DCL。主要是对数据库中的登录和用户的权限进行控制的语言。

主要命令

下面是DCL语言中涉及到的主要命令:

代码语言:txt
复制
-- 1、查看数据库中的用户及信息
mysql -uroot -p  -- 暗文数据库
show databases;  
use mysql;   -- 自带的mysql库
show tables;
select user, host, passord from user;    # 所有的用户信息都在user表中

-- 2、创建新用户、授权、撤销权限和删除
-- 创建新用户:指定用户名test、ip和密码password
create user "test"@"192.168.2.10" identified by"password";    
flush privileges;  # 刷新权限
mysql -utest -h192.168.2.10 -p  # 用test用户登录

-- 3、授权
-- 给shop数据库中的全部信息授权,test是数据库中的一个表
grant select, insert, delete on shop.* to "test"@"192.168.2.10";   
flush privileges;  # 刷新权限
systemctl restart mysql;  # 重启mysql服务

-- 4、创建用户的同时进行授权
grant select, insert, delete on shop.* to "test"@"192.168.2.10" identified  by"password";

-- 5、查看权限
show grants for "test"@"192.168.2.10"\G   # \G参数是为了输出格式化

-- 6、撤销权限
-- 撤销shop数据库中test用户的delete权限:一定要通过root账户进入数据库
revoke delete on shop.* to "test"@"192.168.2.10";  
flush privileges;  # 刷新权限
systemctl restart mysql;  # 重启mysql服务

-- 7、删除用户
drop user "test"@"192.168.2.10";

-- 8、所有的权限给所有数据库(谨慎操作)
grant all privileges on *.* to "test"@"192.168.2.10"  

-- 9、修改用户密码
-- 用原来的用户和密码登陆再进行修改
mysql -uroot -p
show databases;
use mysql;
show tables;
select user, host, password from user;    # 所有的用户都在user表中
update user set password=PASSWORD("123456admin") where user="test";  # 将test用户的密码改成123456admin
flush privileges;

-- 10、忘记原来的密码:借助跳跃权限表,重启守护进程
mysql skip-grant-tables  # 跳跃权限表
mysql  # 重新进入mysql
show databases;
use mysql;
show tables;
select user, host, password from user;    # 所有的用户都在user表中
update user set password=PASSWORD("123456admin") where user="test";  # 将test用户的密码改成123456admin
flush privileges;   -- 刷新权限
注意点

在进行DCL语言操作的时候需要注意:

  1. MySQL服务默认的端口号是3306
  2. 撤销权限必须通过root账户来解决
  3. 将所有权限授权给某个数据库必须谨慎操作
  4. DCL语言修改之后都要刷新权限,重启MySQL服务才会生效

关于MySQL的相关权限和配置文件详细解析,请参考文章:https://www.cnblogs.com/langdashu/p/5889352.html

数据查询语言

数据查询语言指的是:data query language,简称是DQL。查询语言在工作中其实使用的是最为频繁,查询的方式多种多样,也有很多的技巧。在本文中主要讲解常见的DQL`语言操作。后续会针对具体的技巧进行详细讲解

基本查询

1、查询全部信息:

代码语言:txt
复制
select * from user;

2、通过指定的字段信息来查询

代码语言:txt
复制
select * from user where id=2;
select * from user where name=wangwu;
select * from user where age=20;

3、查询指定字段信息

代码语言:txt
复制
select name,age from user;
关键字in
代码语言:txt
复制
select * from user where id in (1,2,3);
关键词between…and….

关键词between…and…的作用是限定字段的取值,头尾两个取值都是包含的

代码语言:txt
复制
select * from user where age between 20 and 35;
关键词distinct

关键词distinct的作用是去重之后查出数据,相当于是过滤查询数据:

关键词concat

关键词语concat的作用是连接查询显示数据:

  • 直接使用系统默认的连接方式,将原来的字段通过下划线进行连接
  • 使用concat...as...as后面自己指定连接的新字段名
  • 带上连接符号的查询concat_ws("+", 列名1,列名2);其中"+"就是指定连接符

我们也是可以使用连接符:

代码语言:txt
复制
select concat_ws("+",name,age) as name_age from user;  -- 指定连接符,同时指定别名
模糊查询like

模糊查询的关键字是like,中文翻译成,使用的符号是%分为3种情况:

  • 左匹配
  • 右匹配
  • 左右匹配
排序查询

对表中的记录进行升序asc或者降序desc的排列,默认的是升序asc,同时需要使用order by关键字:

  • 升序:asc,默认情况
  • 降序:desc

查询年龄age字段,默认是升序的情况

指定降序的排列

聚合查询

聚合查询使用的是聚合函数:

  • avg():求均值
  • sum():求和
  • max():最大值
  • min():最小值
  • count():求个数,统计值
代码语言:txt
复制
select count(*) from user;    -- 总记录
select sum(age) from user;  -- 总和
select avg(age) from user;   -- 平均值
select max/min(age) from user;  -- 最大/小值
限制查询limit

有时候我们只想查询部分数据,防止查崩数据库,可以使用limit关键字来进行限制输出的数目:

  • 直接使用limit
  • 使用limit ... offset ...:指定从哪里开始显示,显示多少行
  • 简写:limit 3, 2:表示从第3行开始,显示2行数据
代码语言:txt
复制
select name, age from user limit 3;    -- 只显示3行数据
select name, age from user limit 3 offset 2;   -- 从第4(offset)行开始显示3(limit)行数据 
select name, age from user limit 2, 3 ;  -- 效果同上:逗号之前是offset的内容,逗号之后是limit内容

DQL语言是使用最为广泛的,本文中只是简单地介绍了基本查询语句,后续会介绍多种进阶的查询。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL学习-4种语言
  • 进入数据库
    • 方式1
      • 方式2
      • 数据定义语言
        • 全部命令
          • 创建表
            • 查看表结构
              • 显示创建表的SQL语句
                • 字段操作
                • 数据库操作语言
                  • 插入数据
                    • 数据更新
                      • 删除
                      • 数据控制语言
                        • 主要命令
                          • 注意点
                          • 数据查询语言
                            • 基本查询
                              • 关键字in
                                • 关键词between…and….
                                  • 关键词distinct
                                    • 关键词concat
                                      • 模糊查询like
                                        • 排序查询
                                          • 聚合查询
                                            • 限制查询limit
                                            相关产品与服务
                                            云数据库 SQL Server
                                            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                            领券
                                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档