MySQL——数据库的基础操作

数据库基础操作

DDL:操作数据库,表

操作数据库:CRUD

C (create): 创建

create dabatase 数据库名称;  -- 创建数据库
​
create database if not exists 数据库名称;  -- 创建数据库,判断不存在再创建
​
create database 数据库名称 character set 字符集名; --创建数据库,指定字符集
​
create database if not exists DB character set gbk; -- 指定字符集gbk,判断是否存在再创建

R (retieve): 查询

show databases;  -- 查询数据库名称
​
show create database 数据库名称; -- 查询某个数据库的字符集:查询某个数据库的创建语句

U (update): 修改

alter database 数据库名称 character set 字符集名称;  --修改数据库的字符集

D (delete): 删除

drop database 数据库名称; -- 删除数据库
​
drop database if exists 数据库名称; -- 判断数据库存在,存在再删除

使用数据库

select database(); -- 查询正在使用的数据库
​
use 数据库名称; -- 使用数据库

操作表

增加

create table 表名(
        列名1 数据类型1,
        列名2 数据类型2,
        ...
        列名n 数据类型n  -- 最后一列不加逗号
);

常用mysql数据库类型:

int 整数类型
double 小数类型
date 日期,只包括年月日
timestamp 时间戳类型,包括年月日时分秒(如果不赋值,默认系统时间)
datetimp 日期,包括年月日时分秒
varchar 字符串,varchar(20)最大20个字符的意思

查询

show tables; -- 查询某个数据库中的所有表名称
​
desc 表名; -- 查询该表结构

修改

alter table 表名 remove to 新表名; -- 修改表名
​
alter table 表名 character set 新字符集名称; -- 修改该表字符集
​
alter table 表名 add 列名 数据类型; -- 添加一列
​
alter table 表名 change 列名 新列名 新数据类型; -- 修改列名称,类型
​
alter table 表名 drop 列名; -- 删除列

删除

drop table 表名; -- 删除表

drop table if exists 表名; -- 判断是否存在,再删除表

DML:增删改表中数据

添加数据

insert into 表名(列名1,列名2...列名n) values (值1,值2...值n);

删除数据

delete from 表名 where 条件;

注意:

1. 如果不加条件,则删除表中所有记录
2. 如果要删除所有记录:
 +   `delete from 表名; -- 不推荐,逐条删除,效率不高`
 +   `truncate table 表名; -- 推荐,先删除整张表,再建一个一样的表`

修改数据

update 表名 set 列名1 = 值1, 列名2 = 值2 ...where 条件;

注意:如果不加任何条件,则将表中该列所有数据全部修改

DQL:查询表中的记录

语法:

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

基础查询

  1. 多个字段查询:

    select 字段名1,字段名2...字段名n from 表名;

    注意:如果查询所有字段可以使用 * 来代替字段列表

  2. 去除重复:

    distinct

  3. 计算列:

    1. 可以使用四则运算计算一些列的值(一般只会进行数值型的计算)

    2. IFNULL(表达式1,表达式2):NULL参与运算,计算结果都为null

      表达式1:哪个字段需要判断是否为null

  4. 起别名:

    as: as也可省略

条件查询

  1. where 子句后跟条件

  2. 运算符:

    <, >, =, >=, <=, =, <>

    between..and..

    IN(集合)

    LIKE: 模糊查询==> 占位符" _"(下划线),"%" 例如:NAME LIKE '%陈%'

    IS NULL

    and 或 &&

    or 或 ||

    not 或 |

排序查询

  1. 语法:

    order by 子句;
    
    order by 排序字段1 排序方式1, 排序字段2 排序方式2...;
  2. 排序方式:

    ASC:升序,默认的

    DESC:降序

  3. 注意:如果多个条件,则前边条件值一样时,才会判断下一个条件

聚合函数

函数名 说明
count 计算个数;一般选择非空的列(主键);count(*)
max 计算最大值
min 计算最小值
sum 计算和
avg 计算平均值

聚合函数计算,排除null值

解决方案:

  1. 选择不包含非空列的计算

  2. IFNULL函数

分组查询

  1. 语法:group by 分组字段;

  2. 注意:

    1. 分组之后查询的字段:分组字段,聚合函数

    2. where 和 having 的区别:

      • where 在分组前进行限定,如果不满足条件,则不参与分组;

      • having 在分组后进行限定,如果不满足条件,则不会被查出来

      • where 后不可以接聚合函数,having 后可以接聚合函数判断

分页查询

  1. 语法:limit 开始索引, 每页查询的条数;

  2. 公式:开始索引 = (当前的页码 - 1) * 每页显示条数

  3. limit 是 mySQL 的"方言"

约束

非空约束:not null

创建表时添加约束:

create table 表名(
	列名1 数据类型1,
    列名2 数据类型2 not null
);

创建表完后,添加非空约束:

alter table 表名 modify 列名 数据类型 not null;

删除非空约束:

alter table 表名 modify 列名 数据类型;

唯一约束:unique

创建表时添加唯一约束:

create table 表名(
	列名1 数据类型1,
    列名2 数据类型2 unique
);

删除唯一约束:

alter table 表名 drop index 列名;

在创建表后,添加唯一约束:

alter table 表名 modify 列名 数据类型 unique;

主键约束:primary key

注意:

  1. 含义:非空且唯一

  2. 一张表中只能有一个字段为主键

  3. 主键就是表中记录的唯一标识

创建表时,添加主键约束:

create table 表名(
	列名1 数据类型1 primary key,
    列名2 数据类型2 
);

删除主键:

alter table 表名 drop primary key;

创建表后,添加主键:

alter table 表名 modify 列名 数据类型 primary key;

自主增长:auto_increment

概念:

如果某一列是数值类型的,使用auto_increment可以用来完成自动增长

创建表时添加主键约束,并完成主键自动增长

自动增长多用于主键,故以主键 id 为例

create table 表名 (
	id int primary key auto_increment
    name varchar(20)
);

删除自动增长

alter table 表名 modify id int;

创建表后,添加自动增长

alter table 表名 modify id int auto_increment;

外键约束:foreign key

创建表时,添加外键:

create table 表名(
	...
    外键列
    constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
)

删除外键:

alter table 表名 drop foreign key 外键名称;

创建表后,添加外键:

alter table 表名 add constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);

级联操作:

  • 添加级联操作:

    alter table 表名 add constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on update cascade;
  • 分类:

    on update cascade; -- 级联更新
    on delete cascade; -- 级联删除

猜你喜欢

转载自blog.csdn.net/aichijvzi/article/details/120694772