MySQL

发布时间 2023-12-03 22:20:28作者: 小柴cyl

基础篇

通用语法及分类

  • DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)
  • DML: 数据操作语言,用来对数据库表中的数据进行增删改
  • DQL: 数据查询语言,用来查询数据库中表的记录
  • DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限

DDL(数据定义语言)

数据库操作

  • 查询所有数据库:

    show databases;
    
  • 查询当前数据库

    select database();
    
  • 创建数据库

    create database [if not exists] 数据库名;
    
  • 删除数据库

    drop database [if exists] 数据库名;
    
  • 使用数据库

    use 数据库名;
    

表操作

  • 查询当前数据库的所有表

    show tables;
    
  • 查询表结构

    desc 表名;   # 但是不会显示出来注释信息,需要查询建表语句才能显示出来
    
  • 查询指定表的建表语句

    show create table 表名;
    
  • 创建表

    CREATE TABLE 表名(
        字段1 字段1类型 [COMMENT 字段1注释],
        字段2 字段2类型 [COMMENT 字段2注释],
        字段3 字段3类型 [COMMENT 字段3注释],
        ...
        字段n 字段n类型 [COMMENT 字段n注释]			# 注意逗号
    )[ COMMENT 表注释 ];
    
    create table test_age(
    	id int comment '编号',
    	name varchar(50) comment '姓名',
    	age int comment '年龄',
    	sex varchar(1) comment '性别'
    ) comment 'test_7';
    

数据类型

image-20231203160057894

image-20231203160637347

age tinyint unsigned	# 年龄 够用范围下的无符号数
score double(4, 1)		# 整体长度为4,小数长度为1

varchar(10)				# 超过10个字符串大小将报错
char(10)				# 即使1个字符,也会占用10个字符的存储空间   性能好
# 一个汉字占用3个字节,但是是算一个字符

image-20231203161121230

修改表

  • 添加字段

    alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
    
  • 修改数据类型

    alter table 表名 modify 字段名 新数据类型(长度);
    
  • 删除字段

    alter table 表名 drop 字段名;
    
  • 修改表名

    alter table 表名 rename to 新表名;
    
  • 删除表

    drop table 表名;
    
  • 删除表,并重新创建该表

    truncate table 表名;
    

DML(数据操作语言)

添加数据

  • 指定字段添加数据

    insert into 表名 (字段名1, 字段名2...) values (值1, 值2...);
    
  • 全部字段

    insert into 表名 values (值1, 值2...);
    
  • 批量添加数据

    insert into 表名 (字段名1, 字段名2...) values (值1, 值2...),(值1, 值2...)...(值1, 值2...);
    insert into 表名 values (值1, 值2...),(值1, 值2...)...;
    

修改数据

  • 修改数据

    update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... [ where 条件 ];
    # 没有where条件时就是修改表内所有的数据
    
    update test set name = 'ucas' where id = 1;
    
  • 删除表中数据

    drop table 是删除整张表(结构和数据)

    delete from 表名 [where 条件];	
    
    # 没有条件就是删除所有数据
    # delete不能删除某一个字段的值(可以使用update更新某个字段的值为NULL)
    

DQL(数据查询语言)

select
    字段列表
from
    表名字段
where
    条件列表
group by
    分组字段列表
having
    分组后的条件列表
order by
    排序字段列表
limit
    分页参数

基础查询

  • 查询字段

    select 字段1, 字段2, ... from 表名;
    # *为全部字段,但是在开发中尽量不要使用
    
  • 设置显示别名

    select 字段1 as '地址' from 表名;		# as可以省略
    
  • 去除重复记录

    select distinct 字段1 from 表名;
    

条件查询

select 字段 from 表名 where 条件列表;
比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between… and… 在某个范围内(含最小、最大值)
in(…) 在in之后的列表中的值,多选一
like占位符 模糊匹配:_匹配单个字符,%匹配任意个字符
is null 是NULL
逻辑运算符 功能
and 或 && 并且(多个条件同时成立)
or 或 || 或者(多个条件任意一个成立)
not 或 ! 非,不是
# 没有身份证
select * from employee where idcard is null ;
# 不等于
select * from employee where age != 30;		#<> 30
# 年龄在20到30之间
select * from employee where age between 20 and 30;
# 下面语句不报错,但查不到任何信息
select * from employee where age between 30 and 20;
# 年龄等于25或30或35
select * from employee where age = 25 or age = 30 or age = 35;
select * from employee where age in (25, 30, 35);
# 姓名为两个字
select * from employee where name like '__';
# 身份证最后为X
select * from employee where idcard like '%X';

聚合函数

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
select 聚合函数(字段列表) from 表名;

select count(*) from emp where age = 88;
# NULL值不参与所有聚合函数运算 但select*还是会显示,只是单独的字段时

分组查询