数据库基本操作和常用命令

这篇博客详细介绍了MySQL数据库的基本操作,包括SQL语句的四大分类:DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)和DQL(数据查询语言)。内容涵盖创建、查看和删除数据库,数据表的结构、数据类型以及数据的增删改查。此外,还讲解了如何进行条件查询、模糊查询、排序、聚合函数和分组查询,是数据库操作的学习宝典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库基本操作和常用命令

SQL语句分类

数据定义语言(DDL)

用来定数据库对象:数据库,表,列等。关键字create,alter,drop等

数据操作语言(DML)

用来对数据库中表的记录进行更新。关键字:insert,delete,update等

数据控制语言(DCL)

用来定义数据库的访问权限和安全级别,及创建用户。

数据查询语言(DQL)

用来查询数据库中表的记录。关键字:select,from,where等

SQL通用语法

SQL语句可以单行或多行书写,以分号结尾,可使用空格和缩进来增强语句的可读性

MySQL数据库的SQL语句不区分大小写

可以使用/**/的方式完成注释

数据表中的数据类型

MySQL中常使用的数据类型如下

整数类型

类型名称说明
tinyint很小的整数
smallint小的整数
mediumint中等大小的整数
int(integer)普通大小的整数

小数类型

类型名称说明
float单精度浮点数
double双精度浮点数
decimal(m,d)压缩严格的定点数

日期类型

类型名称说明
yearYYYY(1901~2155)
timeHH:MM:SS(-838:59:59~838:59:59)
dateYYYY-MM-DD(1000-01-01~9999-12-3)
datetimeYYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00~ 9999-12-31 23:59:59)
timestampYYYY-MM-DD HH:MM:SS(19700101 00:00:01 UTC~2038-01-19 03:14:07UTC)

文本、二进制类型

类型名称说明
CHAR(M)M为0~255之间的整数
VARCHAR(M)M为0~65535之间的整数
TINYBLOB允许长度0~255字节
BLOB允许长度0~65535字节
MEDIUMBLOB允许长度0~167772150字节
LONGBLOB允许长度0~4294967295字节
TINYTEXT允许长度0~255字节
TEXT允许长度0~65535字节
MEDIUMTEXT允许长度0~167772150字节
LONGTEXT允许长度0~4294967295字节
VARBINARY(M)允许长度0~M个字节的变长字节字符串
BINARY(M)允许长度0~M个字节的定长字节字符串

创建数据库操作

创建数据库

create database 数据库名 character set utf-8;

创建一个数据库名为“数据库名”的数据库并指定数据库中的数据编码为utf-8

查看数据库

show databases;/*查看数据库MySQL服务器中的所有数据库*/
show database 数据库名;/*查看某个数据库的定义信息*/

删除数据库

drop database 数据库名称;/*删除指定的数据库*/

其他的数据库操作命令

use 数据库名;/*切换其他数据库*/

查看正在使用的数据库

select database();

创建数据表格式

create table 表名(
	字段名	类型(长度)	约束,
    字段名	类型(长度)	约束
);

创建用户表

create table users(
	uid INT,
    uname varchar(20),
    uaddress varchar(200)
)

约束

限制每一列能写什么数据,不能写什么数据

约束分为:主键约束,非空约束,唯一约束,外键约束。

主键约束

主键是用于标记当前记录的字段。他的特点是非空,唯一的。

在开发中一般情况下主键是不具备任何含义,只是用于标识当前记录。

格式:

1.在创建表时创建主键,在字段后面加上 primary key。

create table tablename(
	id int primary key,
    ......
)

2.在创建表时创建主线,在表创建的最后来指定主键

create table tablename(
	id int,
    ......
    primary key (id)
)

3.删除主键:alter table 表名 drop primary key;

alter table sort drop primry key;

4.主键自动增长:一般主键是自增长的字段,不需要指定。

实现添加自增长语句,主键字段后加auto_increment(只适用MySQL)

常见表的操作

查看数据库中的所有的表

show tables;

查看表结构

desc table 表名;

删除表

drop table 表名;

修改表结构

修改表,添加列:

alter table 表名 add 列名 类型(长度)约束;

例如:为分类表添加一个新的字段为 分类描述 varchar(20)

alter table sort add sdesc varchar(20);

修改表,修改列的类型长度及约束:

alter table 表名 modify 列名 类型(长度) 约束;

例如:为分类表的分类名称字段进行修改,类型 varchar(50)添加约束 not null

alter table sort modify sname varchar(50) not null;

修改表,修改列名:

alter table 表名 change 就列名 新列名 类型(长度) 约束;

例如:为分类表的分类名称字段进行更换 更换为 snamesname varchar(30);

alter table sort change sname snamesname varchar(30);

修改表,删除列:

alter table 表名 drop 列名;

例如:删除分类表中snamesname这列

alter table sort drop snamesname;

修改表名

rename table 表名 drop 列名;

例如:为分类表sort改名成category

rename table sort to category;

修改表的字符集

salter table 表名 character set 字符集;

例如:为分类表category的编码表进行修改,修改成gbk

alter table category character set gbk;

数据表添加数据

基本语法:

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

例如:

insert into product (id,pname,price) values (1,'笔记本',5555.99);
insert into product (id,pname,price) values (2,'智能手机',99999);

添加数据格式,不考虑主键

insert into 表名(列名)values(值);

insert into product(pname,price) values('洗衣机',800);

添加数据格式,所有的值全给出

insert into 表名 values (值1,值2,值3···);-----向表中插入所有列

insert into product values (4,'微波炉',300.25) 

添加数据格式,批量写入

insert into product(列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3),(值1,值2,值3);

insert into product (pname,price) values ('智能机器人',25999.22),('彩色电视',1250.36),('沙发',58899.02);

更新数据

用来修改指定条件的数据,将满足条件的记录指定列修改为指定值

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;

注意:

列名的类型与修改的值要一致。

修改值的时候不能超过最大长度。

值如果是字符串或者日期需要加 ’ '。

例如:

将指定的sname字段中的值 修改成 日用品

update sort set sname = '日用品';

将sid为s002的记录中的 sname 改成 日用品

update sort set sname='日用品' where sid = 's002';

删除数据

语法:

  • delete from 表名 [where 条件];
    

    或者

  • delete from 表名;
    

面试题:

删除表中多有记录是使用delete from 表名;还是用truncate table 表名;

删除方式:delete 一条一条删除,不清空auto_increment记录数。

truncate 直接将表删除,重新建表,auto_increment将置为零,重新开始。

例如:

delete from sort where sname = '日用品';
/*表数据清空*/
delete from sort;

数据表和测试数据准备

创建账务表

create table zhangwu(
	id int primary key auto_increment, /*账务id*/
    name varchar(200),/*账务名称*/
    money double,
);

插入表记录

insert into zhangwu(id,name,money) values (1,'吃饭支出',247);
insert into zhangwu(id,name,money) values (2,'工资支出',12345);
insert into zhangwu(id,name,money) values (3,'服装支出',1000);
insert into zhangwu(id,name,money) values (4,'吃饭支出',325);
insert into zhangwu(id,name,money) values (5,'股票收入',8000);
insert into zhangwu(id,name,money) values (6,'打麻将支出',8000);
insert into zhangwu(id,name,money) values (7,null,5000);

数据的基本查询

查询指定字段信息

select 字段1,字段2,… from 表名;

select id,name from zhangwu;

查询表中所有字段

select * from 表名;

select * from zhangwu;

在实际的开发中,不推荐使用

原因:要查询的字段信息不明确,若字段数量较多,会导致查询速度很慢。

distinct用于去除重复记录

select distinct 字段 from 表名;

select distinct money from zhangwu;

别名查询,使用as关键字,as可以省略

别名可以给表中的字段,设置别名。当查询语句复杂时,使用别名可以极大的简便操作。

表别名格式:select * from 表名 as 别名; 或 select * from表名 别名;

列别名格式:select 字段名 as 别名 from 表名;或 select 字段名 别名 from 表名;

例如:

/*表别名:*/
select * from zhangwu zw;
select * from zhangwu as zw;
/*列别名*/
select money as m from zhangwu;
select money m from zhangwu;

在sql语句的操作中,可以直接对列进行运算

例如:将所有账务的金额+10000元显示

select pname,price+10000 from product;

数据的条件查询

条件查询

where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。

格式

select 字段 from 表名 where 条件;

where条件的种类如下

比较运算符
> < <= >= = <>				/*大于、小于、大于(小于)等于、不等于*/
between ... and ...			/*显示在某一区间的值(含头含尾)*/
in(set)						/*显示在in列表中的值,例如:in(100,200)*/
like 通配符				  /*模糊查询,Like语句中有两个通配符:
							  % 用来匹配多个字符;例first_name like ‘a%’;
							  _ 用来匹配一个字符。例first_name like ‘a_’;*/
is null 					/*判断是否为空
							is not null; 判断不为空*/                     
逻辑运算符
and							/*多个条件同时成立*/
or							/*多个条件任一成立*/
not							/*不成立,例:where not(salary>100);*/
应用
查询所有吃饭支出记录
select * from zhangwu where name = '吃饭支出';
查询出金额大于10000的信息
select * from zhangwu where money > 10000;
查询出金额在2000-5000之间的账务信息
select * from zhangwu where money >= 2000 and money <= 5000;

select * from zhangwu where money between 2000 and 5000;
查询出金额是1000或5000或3000的商品信息
select * from zhangwu where money = 1000 or money = 5000 or money = 3500;

select * from zhangwu where money in (1000,5000,3500);

模糊查询

查询出账务名称包含“支出”的账务信息
select * from zhangwu where name like "%支出%";
查询出账务名称中是五个字的账务信息
select * from zhangwu where name like "_____";
查询账务名称不为null账务信息
select * from zhangwu where name is not null;

select * from zhangwu where not (name is null);

排序查询

通过order by 语句,可以将查询出的结果进行排序。放置在select语句的最后。

select * from 表名 order by 字段 asc;		/*asc升序(默认),desc(降序)*/
查询账务表,价格进行升序(降序)
select * from zhangwu order by zmoney asc;

select * from zhangwu order by zmoney desc;
查询账务表,查询所有支出,对金额降序排列
/*先过滤条件where查询结果再排序*/
select * from zhangwu where zname like "%支出%" order by zmoney desc;

聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

count:统计指定列不为null的记录行数;

sum:计算指定列的数值和;

max:计算指定列的最大值;

min:计算指定列的最小值;

avg:计算指定列的平均值;

查询统计账务表中,一共有多少条数据
select count (*) as 'count' from zhangwu;
对账务表查询,对所有金额求和计算
select sum (zmoney) from zhangwu;
求和,统计所有支出的总金额
select sun (zname) from zhangwu where zname like "%收入%";
max函数,对某列数据,获取最大值
select max (zmoney) from zhangwu;
avg函数,计算一个列所有数据的平均数
select avg (zmoney) from zhangwu;

分组查询

分组查询是指使用group by字句对查询信息进行分组

例如:

我们要统计出zhanguw表中所有分类账务的总数量,这时就需要使用group by 来对zhangwu表中的账务信息根据parent进行分组操作。

select 字段1,字段2,字段3... from 表名 group by 字段 having 条件;

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

having和where的区别

having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having后面可以使用分组函数(统计函数)

where后面不可以使用分组函数。

对zname内容进行分组查询求和,但是只要支出
select sum (zmoney) as 'getsum',zname from zhangwu where zname like "%支出%" group by zname order by getsum desc;
对zname内容进行分组查询求和,但是只要支出, 显示金额大于5000
select sum (zmoney) as 'getsum',zname from zhangwu where zname like "%支出%" group by zname having getsum > 5000;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值