MySQL语法

发布时间 2023-11-24 22:58:36作者: 尹少欣

MySQL介绍

  1. 数据库(DataBase,简称DB):据库是存放数据的仓库,它的存储空间很大,可以存放百万条、千万条、上亿条数据。因此,开发中只要涉及到数据,就一定会用到数据库;

  2. 数据库管理系统(Data Base Manage System,简称DBMS):数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。在很多地方,数据库管理系统被简称为数据库,实际上是两个不同的概念,不要混淆。因此,使用缩写会更好。

  3. 关系型DBMS的分类

    • 市面上使用的DBMS主要分为两类:关系型(SQL)、非关系型(NoSQL),关系型数据库的市场份额远大于非关系型;
    • Oracle:Oracle是一种企业级的关系型数据库管理系统,具有强大的数据处理能力和高可靠性,适用于大型企业和关键业务系统;
    • MySQL:MySQL是由瑞典MySQL AB公司开发(后来被Oracle公司收购)的一种开源SQL数据库管理系统,它提供了丰富的功能和良好的性能,并且支持大量的操作系统和编程语言,因此广受开发者的欢迎;
    • Microsoft SQL Server:Microsoft SQL Server是微软公司出品的一款关系型数据库管理系统,它集成了高效的数据处理引擎和强大的商业智能功能,广泛应用于各种规模的企业级应用中;
    • PostgreSQL:PostgreSQL是一款开源的对象-关系型数据库管理系统,它具有高度的可扩展性和灵活性,并且支持复杂的查询语言和存储过程;
    • DB2:DB2则是一种面向企业级应用的关系型数据库管理系统,它拥有强大的数据安全性和稳定性,常被用于处理大量的关键业务数据;
    • 目前,个人及中小型企业大部分使用MySQL(免费、功能强大)。
  4. MySQL结构:MySQL和其他关系型数据库一样,由二维表格模型组成,每张数据表都由若干行和列组成,一行成为一个记录,一列称为一个字段(或者属性)

    image-20231122090319030

  5. MySQL安装

    • 下载MySQL社区版安装程序(https://dev.mysql.com/downloads/installer/)

      image-20231122130221425

      image-20231122130335753

    • 选择安装类型

      image-20231122130813285

    • 选择安装路径

      image-20231122131405758

    • 默认选择所有组件(点击Execute,稍等片刻)

      image-20231122131525921

      image-20231122131646962

    • 配置信息,直接next

      image-20231122131740883

    • 网络配置,直接next

      image-20231122131943635

    • 选择默认的,直接next

      image-20231122132038309

    • 为默认用户root创建密码,输入之后check成功,点击next

      image-20231122132254534

    • 在windows上注册MySQL服务

      image-20231122132602671

    • 直接next

      image-20231122132715392

    • 直接Execute

      image-20231122132746260

    • 点击Cancel

      image-20231122132910275

    • 在命令行中,启动和停止MySQL服务

      - 启动:net start mysql80
      - 停止:net stop mysql80
      
    • 在命令行中,连接上MySQL

      - mysql -u root -p
      - 回车之后输入root用户的密码
      

      image-20231122133705103

  6. MySQL规范

    • MySQL不区分大小写,但是关键字建议使用大写;
    • MySQL语句以分号结尾

基础

  1. SQL语言是一种结构化查询语言,用于存取数据以及查询、更新和管理关系数据库系统 。SQL语言包括数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)等部分。
  2. use db_name; 进入db_name数据库(在操作表/数据之前,必须进入数据库
  3. MySQL的数据类型与其他编程语言类似有很多,最常用的有两个:整型(int )、字符型(varchar(length))
  4. 注释:单行注释(# 或者 --空格),多行注释(/**/)
  5. 点号:A数据库中的B数据表中的C字段,可表示为 A.B.C

DDL

Data Defination Language,数据定义语言。主要用于数据库结构和表结构的定义,有四个关键字:create、drop、alter、truncate。

查询

show databases;                   #查询MySQL管理的所有数据库
show tables;                      #查询当前数据库中的所有表
select database();                #查询当前使用的数据库
desc tb_name;                     #查询当前表的表结构
show create table tb_name;        #查询当前表的建表语句

CREATE

  1. 作用:用于创建结构(创建一个数据库、创建一张表);

  2. 语法

    - 创建数据库
    create database [if not exists] db_name; 如果不存在,则创建数据库
    
    - 创建表结构
    create table [if not exists] tb_name(字段1 类型 [约束], 字段2 类型 [约束], ..., 字段n 类型 [约束]);
    
  3. 演示

    # 创建一个数据库,名称为 School
    create database if not exists School;
    
    # 创建一张表,名称为 Students,字段为id, name, age, sex
    create table if not exists Students(id int, name varchar(20), age int, sex varchar(1));
    
    /*
    if not exists 的作用在于,如果这个东西(数据库/表)已经存在,再次创建不会报错,只会警告;如果省略了if not exists语句,就会报错,因此使用create创建结构时,推荐加上 if not exists
    */
    # 再次创建Students表,感受 if not exists作用
    create table if not exists Students; #不会报错
    create table Students; #报错
    

    image-20231122163353106

    image-20231122165129319

    image-20231122170308856

DROP

  1. 作用:删除数据库或表

  2. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    # 删除表
    drop table [if not exists] tb_name;
    drop table if not exists infos;
    
    # 删除数据库
    drop database [if not exists] db_nmae;
    drop database if not exists users;
    

TRUNCATE

  1. 作用:清空表中的所有数据(只作用于表

  2. 语法

    truncate table tb_name;
    

ALTER

  1. 作用:修改表结构

  2. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    #重命名表
    alter table tb_name rename to new_tb_name;
    alter table infos rename to informations;
    
    #添加一个新的字段
    alter table tb_name add column_name type [comment] [约束条件];
    alter table informations add salaries int [comment"工资"];
    
    #删除字段
    alter table tb_name drop column_name;
    alter table informations drop salaries;
    
    #修改字段类型
    alter table tb_name modify column_name type;
    alter table informations modify name varchar(15);
    
    #修改字段的名称及类型
    alter table tb_name change old_column_name new_column_name type;
    alter table informations change sex gender varchar(1);
    

DML

  1. Data Manipulation Language,数据操纵语言。对表中的数据进行增删改的操作。

  2. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    #增加:value后面的一个括号表示一个记录
    insert into tb_name(字段1,字段2, ..., 字段n) value (value1,value2, ..., valuen), (value1,value2, ..., valuen), ..., (value1,value2, ..., valuen);
    insert into infos(name,age,sex) value ("BrankYeen",20,"男"),("尹少欣",21,"男"),("李雪",22,"女");#添加了三个记录
    
    #删除
    delete from tb_name where条件
    delete from infos where name="尹少欣"; #删除name="尹少欣"这行记录
    
    #修改
    update infos set column_name=value [where条件];
    update infos set age=18 where name="李雪";
    

DQL

  1. Data Query Language,数据查询语言。用于查询表中的数据。

  2. 语法

    select column_name from table_name [where条件] [group by分组 having条件] [order by排序] [limit分页]
    

条件查询

  1. select column_name from tb_name where条件:从表中搜索数据,且要满足条件

  2. 比较运算符:>、>=、<、<=、<>/!=、between...and...、in、like、is null。如果为真,返回1;如果为假,返回0。

  3. 逻辑运算符:and/&&、or/||、not/!。如果为真,返回1;如果为假,返回0。

  4. 演示

    select 1>2;
    select 3<>4;
    select id between 4 and 10 from students; #查询[4,10]的id字段
    select name from students where id in (1,2,3,5,7); #在students表中,从id为1或2或3或5或7的记录中,查询name字段
    select name from students where name like '%e%'; #在students表中,搜索name字段中含有字母"e"的记录,其中%表示任意多个字符
    

别名

  1. 如果在一个SQL语句中,多次使用表名或,且名称较长,此时可以使用别名进行简化;

  2. 注意,起别名之后,只能使用该别名,不能再使用原来的名字

  3. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    select column_name from tb_name [as] xx where xx.id=1;
    select name from infos as i where i.sex='女';
    

分组

  1. 配合聚合函数,利用分组信息进行统计,后面可以通过having条件进行筛选过滤;

  2. 聚合函数

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    #sum():求和
    select sum(id) from infos;
    
    #avg():求平均
    select avg(id) from infos;
    
    #max():最大值
    select max(id) from infos;
    
    #min():最小值
    select min(id) from infos;
    
    #count():求个数
    select count(id) from infos;
    

排序

  1. 对表中的某一字段进行升序或降序后,搜索数据数据;

  2. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    #升序
    select column_name from tb_name order by x [asc];
    select name from infos order by age asc;
    
    #降序
    select column_name from tb_name order by x desc;
    select nmae from infos order by id desc;
    

分页

  1. 如果查询到的结果很多,可以进行分页展示,一次只展示某几个数据;

  2. 语法

    /*
    DB: Users
    Table: infos
    Column: id, name, age, sex
    */
    
    select column_name from tb_name from limit start,length #范围是[start,start+length),索引从0开始
    select name from infos limit 0,3;
    select name from infos limit 3,3;
    

DCL

  1. Data Control Language,数据控制语言。用于管理数据库的用户,DBA(数据库管理员)用的较多;

  2. 语法

    #查询用户
    select * from mysql.users;
    
    #创建用户
    create user '用户名'@'主机名' identified by '密码';
    create user 'brankyeen'@'localhost' identified by '123.com';
    
    #修改密码
    alter user '用户名'@'主机名' identified with '旧密码' by '新密码';
    alter user 'brankyeen'@'lccalhost' identified with '123.com' by 'administrator';
    
    #删除用户
    drop user '用户名'@'主机名';
    drop user 'brankyeen'@'localhost';
    
  3. 权限控制

    all/all privileges    #所有权限
    select                #查询权限
    insert                #添加数据权限
    update                #修改数据权限
    delete                #删除数据权限
    alter                 #修改结构权限
    drop                  #删除结构权限
    create                #创建结构权限
    
    #查询用户的权限信息
    show grants for '用户名'@'主机名';
    show grants for 'brankyeen'@'localhost';
    
    #授予权限
    grant 权限列表 on 数据库.表 to '用户名'@'主机名';
    grant select,insert on *.* to 'brankyeen'@'localhost';
    
    #撤销权限
    revoke 权限列表 on 数据库.表 from '用户名'@'主机名';
    revoke all on *.* from 'brankyeen'@'localhost';
    

函数

字符串函数

# concat(str1, str2, ..., strn) 将多个字符串拼接成一个字符串
select concat('Hello', 'MySQL', 'DataBase');

#lower(str)将字符串全部转为小写,upper(str)将字符串全部转为大写
select lower('HElL0');
select upper('MySQL');

#lpad(str,n,character)左填充character字符,rpad(str,n,character)又填充character
select lapd('BrankYeen', 10, '@');
select rpad('尹少欣', 10, '#');

#trim(str)去除字符串前后的空格
select strim('    Hello Mysql         ');

#substring(str,start,len) 从start位置开始往后截取len个字符
select substring("I Love BrankYeen", 3, 5);

数值函数

#ceil()向上取整  floor()向下取整
select ceil(1.2);
select floor(2.1);

#mod(x,y) x%y
select mod(11,2);

#rand() 0~1之间的随机数
select floor(rand()*2);

#round() 四舍五入并保留小数位数
select round(3.1415926,3);

日期函数

#curdate()当前日期  curtime()当前时间   noe()当前日期及时间
select curdate();
select curtime();
select now();

#year()年份  month()月份  day()天数
select year(curdate());
select month(curdate());
select day(curdate());

#date_add()
select date_add(curdate(),interval 30 day);

#datediff() 间隔时间
select datediff(curdate(),'1945-10-1');

流程函数

#if(exp, v1, v2) 如果exp的值为真,返回v1,否则返回v2
select if(1+1=2, '真', '假');

#ifnull(exp, v) 如果exp的值为null,返回v,否则返回exp
select ifnull(id, "有空值") from students;

#case [exp]  when v1 then r1 else r2 end; 如果exp的值为v1,返回r1,否则返回r2
select case name when "BrankYeen" then "好帅" else "还行" end from students;

进阶

运维