MySQL数据库表的基础操作(增删改查)

Wesley13
• 阅读 606

前言:初始mysql,mysql应该是所有程序员都会接触的一门语言,它的重要性相信大家都知道,它是底层的底层,是后端的支柱,是程序中不可或缺的语言,假若你还没有下载安装mysql,please点击---MaraiDB下载安装--mysql


1.数据库概述

1.1 什么是数据库

数据库:存储和管理数据的仓库
数据库是一个专业的存储和管理数据的软件系统,比传统的人工或文件保存数据小路更高、更安全、更可靠。

数据库有哪些分类(了解)
早期:层次是数据库、网络型数据库
现在:关系型数据库和非关系型数据库

1.2什么是关系型数据库?

关系型数据库就是底层以二维表的形式保存数据的库就是关系型数据库
保存学生信息(student表)

编号

姓名

成绩

1

王二妮

88

2

李铁柱

74

3

陈翠花

97

常见的关系型数据库有哪些?(了解)

  • SqlServer: 微软提供、适用于中型、大型的项目中,收费,在Java中的使用占比不高(不超过10%) .NET
  • Oracle: 甲骨文公司提供、适用于大型、超大型的项目中,收费,在Java中使用占比非常高- 50%) 性能优异,功能强大。
  • Mysql:瑞典MYSQLAB公司提供,免费、开源,小巧轻量,在Java中占比约为20% 被甲骨文公司收购了。Mariadb
  • DB2: IBM公司提供, 适用于中型、大型的项目中,收费,银行,金融,电信等行业中使用较多。
  • SQLite:迷你数据库,适用于嵌入式设备中(智能家居),pad,手机

什么是非关系型数据库?(了解)

  • 非关系型数据库底层是 键-值、列存储结构存储数据。 Redis、mongodb

1.3什么是SQL语言

SQL:结构化查询语言
是一门用于关系型数据库的通用的语言

  • 数据库:查询、创建、删除、进入、修改数据库
  • 表:创建表、删除表、修改表、查询表
  • 表记录:新增、删除、修改、查询表记录
  • 视图、索引、存储过程等都可以操作

下载安装MySQL
链接:https://pan.baidu.com/s/1QacdiQT_jB_POaA7V08_dw

2连接MySQL服务器

通过命令行工具可以登录MySQL客户端,连接MySQL服务器,从而访问服务器中的数据。

_1.连接mysql服务器_:
mysql -uroot -proot
-u:后面的root是用户名,这里使用的是超级管理员root;
-p:(小写的p)后面的root是密码,这是在安装MySQL时就已经指定的密码;

C:\WINDOWS\System32>mysql -uroot -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 25
Server version: 10.3.7-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

2.连接mysql服务器并指定IP和端口
mysql -uroot -proot -h127.0.0.1 -P3306
-h:后面给出的127.0.0.1是服务器主机名或ip地址,可以省略的,默认连接本机;
-P:(大写的P)后面的3306是连接端口,可以省略,默认连接3306端口;

3.退出客户端命令:quit 或 exit 或 \q

4.注释
可以使用#、/* */、--等符号添加注释

5.FAQ:常见问题:
MySQL数据库表的基础操作(增删改查)

解决方法:复制mysql安装目录下的bin目录,将bin目录的路径添加到path环境变量中

3数据库及表操作

3.1创建、删除、查看数据库

提示: (1)SQL 语句对大小写不敏感。推荐关键字使用大写,自定义的名称(库名,表名,列名等)使用小写。
(2)并且在自定义名称时,针对多个单词不要使用驼峰命名,而是使用下划线连接。(例如:tab_name,而不是 tabName)

-- 01.查看mysql服务器中所有数据库
show databases;

-- 02.进入某一数据库(进入数据库后,才能操作库中的表和表记录)
-- 语法:USE 库名;
use test;

-- 查看已进入的库
SELECT DATABASE();

-- 03.查看当前数据库中的所有表
show tables;

-- 04.删除mydb1库
-- 语法:DROP DATABASE 库名;
drop database mydb1;

-- 思考:当删除的库不存在时,如何避免错误产生?
drop database if exists mydb1;

-- 05.重新创建mydb1库,指定编码为utf8
-- 语法:CREATE DATABASE 库名 CHARSET 编码;
create database mydb1 charset utf8;

-- 如果不存在则创建mydb1;
create database if not exists mydb1 charset utf8;

-- 06.查看建库时的语句(并验证数据库库使用的编码)
-- 语法:SHOW CREATE DATABASE 库名;
show create database mydb1;

3.2创建、删除、查看表

编号

姓名

性别

生日

分数

--07.进入mydb1库,删除stu学生表(如果原本存在)
 --语法:DROP TABLE 表名
use mydb1;
drop table if exists stu;


-- 08.创建stu学生表(编号[数值类型]、姓名、性别、出生年月、考试成绩[浮点型]),建表的语法:
--CREATE TABLE 表名(
  --  列名 数据类型,
  --  列名 数据类型,
  --  ...
--);

use mydb1;
drop table if exists stu;
create table stu(
    id int primary key auto_increment,  -- 设置id为主键
    name varchar(50),
    gender varchar(10),
    birthday date,
    score double
);


-- 09.查看stu学生表结构
-- 语法:desc 表名
desc stu;

4 新增、更新、删除表记录

-- 10.往学生表(stu)中插入记录(数据)
-- 语法:INSERT INTO 表名(列名1,列名2,列名3...) VALUES(值1,值2,值3...);
insert into stu(id,name,gender,birthday,score) value ( null,'王二妮','女','2001-3-4',89);
insert into stu values(null,'李铁柱','男','1998-1-1', 84);
insert into stu values(null,'陈翠花','女','2000-2-5', 90);
insert into stu(name,gender) values('张三','男');

提示:

  • (1)当为所有列插入值时,可以省写列名,但值的个数和顺序必须和声明时列的个数和顺序保持一致!
  • (2)SQL语句中的值为字符串或日期时,值的两边要加上单引号(有的版本的数据库双引号也可以,但推荐使用单引号)。
  • (3)在(cmd中)插入数据之前,先设置编码设置编码:set names gbk;

或者用一下命令连接mysql服务器:
mysql --default-character-set=gbk -uroot -proot

-- 11.查询stu表所有学生的信息
-- 语法:SELECT 列名 | * FROM 表名
select * from stu;

-- 12.修改stu表中所有学生的成绩,加10分特长分
-- 修改语法: UPDATE 表名 SET 列=值,列=值,列=值...[WHERE子句];
update stu set score=score+10;
update stu set score+=10; -- 语法错误,mysql不支持+=

-- 13.修改stu表中编号为1的学生成绩,将成绩改为83分。
update stu set score=83 where id=1;

提示:where子句用于对记录进行筛选过滤,保留符合条件的记录,将不符合条件的记录剔除。

-- 14.删除stu表中所有的记录
-- 删除记录语法: DELETE FROM 表名 [where条件]
delete from stu;
truncate table stu;

-- 仅删除符合条件的
delete from stu where id>3;

drop、delete、truncate三者的区别

  • (1)drop是用于删除库和表,delete和truncate是用于删除表记录
  • (2)delete是删除表中的记录,可以删除部分记录,也可以删除所有记录, 对表本身没有影响
  • (3)truncate是只能删除表中的所有记录, 不能删除部分记录, 并且truncate删除是将表摧毁再重建, 对表有影响(比如,会将自增变量的值重置为1)

5查询表记录

准备数据:将下面的数据粘贴在msql中

-- 创建db10库、emp表并插入记录
-- -----------------------------------
-- 删除db10库(如果存在)
drop database if exists db10;
-- 重新创建db10库
create database db10 charset utf8;
-- 选择db10库
use db10;

-- 删除员工表(如果存在)
drop table if exists emp;
-- 创建员工表
create table emp(
    id int primary key auto_increment,    -- 员工编号
    name varchar(50),                    -- 员工姓名
    gender char(1),                        -- 员工性别
    birthday date,                        -- 员工生日
    dept varchar(50),                    -- 所属部门
    job varchar(50),                    -- 所任职位
    sal double,                            -- 薪资
    bonus double                        -- 奖金
);

-- 往员工表中插入记录
insert into emp values(null,'王富国','男','1995-10-25','市场部','部门总监','8400','1200');
insert into emp values(null,'齐雷锋','男','1994-11-6','市场部','市场调查员','5600','800');
insert into emp values(null,'刘治雪','女','1996-09-14','市场部','营销讲师','3000','1300');
insert into emp values(null,'陈子封','男','1991-05-18','技术部','部门总监','4200','500');
insert into emp values(null,'刘海涛','男','1993-11-18','技术部','研发员','6600','500');
insert into emp values(null,'王明悦','女','1998-07-18','技术部','测试师','5400','600');
insert into emp values(null,'苍若智','男','1995-08-18','人事部','部门总监','4850','800');
insert into emp values(null,'范中闲','男','1999-09-18','人事部','人力资源师','3600','600');
insert into emp values(null,'刘克','男','1990-10-18','人事部','助理','3200','400');
insert into emp values(null,'韩约','男','1980-12-18',null,'CEO','11000',null);

5.1 基础查询

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(成为结果集)。

提示:

  • (1) * (星号)为通配符,表示查询所有列。

  • (2) 但使用 * (星号)有时会把不必要的列也查询出来,并且效率不如直接指定列名

    -- 15.查询emp表中的所有员工,显示姓名,薪资,奖金 select name, sal, bonus from emp;

    -- 16.查询emp表中的所有部门和职位 select dept, job from emp;

    --思考:如果查询的结果中,存在大量重复的记录,如何剔除重复记录,只保留一条? */ -- 在select之后、列名之前,使用DISTINCT 剔除重复的记录 select distinct dept, job from emp;

5.2 WHERE子句查询

WHERE子句查询语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:
MySQL数据库表的基础操作(增删改查)

-- 17.查询emp表中薪资大于3000的所有员工,显示员工姓名、薪资
select name, sal from emp
where sal>3000;

-- 18.查询emp表中总薪资(薪资+奖金)大于3500的所有员工,显示员工姓名、总薪资
select name, sal+bonus from emp
where sal+bonus > 6500; -- 结果不准确。

-- ifnull(列, 值)函数: 判断指定的列是否包含null值,如果有null值,用第二个值替换null值
select name, sal+ifnull(bonus, 0) from emp
where sal+ifnull(bonus, 0) > 6500;

-- 注意查看上面查询结果中的表头,如何将表头中的 sal+bonus 修改为 "总薪资"
select name as 姓名, sal+ifnull(bonus, 0) as 总薪资 from emp
where sal+ifnull(bonus, 0) > 6500;
-- as用于指定别名, as可以省略。
-- where子句中不能使用列别名

-- 19.查询emp表中薪资在3000和4500之间的员工,显示员工姓名和薪资
select name, sal from emp
where sal>=3000 and sal<=4500;
-- 提示: between...and... 在..和..之间
select name, sal from emp
where sal between 3000 and 4500; -- 默认包含头和尾

-- 20.查询emp表中薪资为 5600、3000、4200的员工,显示员工姓名和薪资
select name, sal from emp
where sal=5600 or sal=3000 or sal=4200;
-- 或
select name, sal from emp
where sal in(5600,3000,4200);

-- 21.查询薪资不为5600、3000、4200的员工
select name, sal from emp
where sal!=5600 and sal!=3000 and sal!=4200;
-- 或
select name, sal from emp
where not(sal=5600 or sal=3000 or sal=4200);
-- 或
select name, sal from emp
where sal not in(5600,3000,4200);


-- 22.查询emp表中薪资大于8000和薪资小于4000的员工,显示员工姓名、薪资。(自己完成)
select name,sal from emp
where sal>=8000 or sal<=4000;

-- 23.查询emp表中薪资大于3000并且奖金小于600的员工,显示员工姓名、薪资、奖金。(自己完成)
select name,sal,bonus from emp
 where sal>6000 and bonus<1000;
-- 处理null值
select name,sal,bonus from emp
where sal>6000 and ifnull(bonus,0)<1000;

-- 24.查询没有部门的员工(即部门列为null值)
select * from emp
where dept is null;

-- 思考:如何查询有部门的员工(即部门列不为null值)
select * from emp
where dept is not null; --正确

select * from emp
where dept not is null; -- 错误!

woo !!! you look

讲解二,你值得拥有——————MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解---讲解二


try your best you can do it!
不要去怀疑自己有多大的能力,只要你敢,那就比犹豫不决的成功了一半,更何况,难道你不相信你自己?you can do it!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
6个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(