02【数据库的基本操作】

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 02【数据库的基本操作】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


上一篇01【数据库的介绍】

下一篇03【MySQL字符集】

目录【MySQL零基础系列教程】



二、数据库的基本操作

2.1 DDL操作数据库

2.1.1 创建数据库相关操作

  • 1)创建数据库
CREATE DATABASE 库名;

create database db01;
  • 2)判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS 库名

create database if not exists db01;
  • 3)创建数据库并指定字符集
CREATE DATABASE 库名 CHARACTER SET 字符集

create database db01 character set utf8;

Tips:我们在安装MySQL的时候,就已经指定了MySQL的字符集(为MySQL服务器字符集),我们创建的数据库如果没有特别指定默认为MySQL服务器的字符集;

2.1.2 查看数据库相关操作

-- 查看所有的数据库
show databases;

-- 查看某个数据库的DDL语句
show create database db01;

2.1.3 修改数据库编码

  • 修改数据库默认的字符集
ALTER DATABASE 数据库 CHARACTER SET 字符集

alter database db01 character set utf8;

2.1.4 删除数据库

DROP DATABASE 数据库名;

drop database db01;

2.1.5 使用数据库

  • 1)查看正在使用的数据库
select DATABASE();
  • 2)使用/切换数据库
USE 数据库名;

use db01;

2.2 DDL操作表结构

操作表之前,先使用某个数据库。

2.2.1 MySQL数据类型

  • 常使用的数据类型如下:
分类 类型名称 类型说明
整数 tinyInt 微整型:很小的整数(占8位二进制,1个字节)
smallint 小整型:小的整数(占16位二进制,2个字节)
mediumint 中整型:中等长度的整数(占24位二进制,3个字节)
int(integer) 整型:整数类型(占32位二进制,4个字节)
bigint 大整型:占64位二进制,8个字节
小数 float 单精度浮点数,占4个字节
double 双精度浮点数,占8个字节
decimal(m,n) 数值类型,m表示数值的长度,n表示小数的位数
日期 time 表示时间类型
date 表示日期类型
datetime 同时可以表示日期和时间类型
字符串 char(m) 固定长度的字符串,无论使用几个字符都占满全部,M为0~255之间的整数 如:char(20),实际使用只用了1个字符,也占用20个字符
varchar(m) 可变长度的字符串,使用几个字符就占用几个,M为0~65535之间的整数。 如:varchar(20),这个字符串最长是20,大于20会报错。 使用几个,占几个字符。

2.2.2 创建表

  • 创建表的格式
create table 表名(
	字段名 字段类型,
	字段名 字段类型,
    字段名 字段类型
);

create table 表名(字段名 字段类型,字段名 字段类型);

Tips:字段名就是表中的列名,字段类型指数据类型

  • 具体操作:
-- 创建student表包含id整数,name变长字符串长20,sex性别定长型1,birthday字段日期类型

use db01;

create table emp (
    id int,
    `name` varchar(20), -- 重音符号:在Esc下面,~ 在同一个键
    sex char(1),
	address varchar(20)
);

2.2.3 查看表

  • 查看某个数据库中的所有表
show tables;
  • 查看表结构
desc 表名;

desc emp;
  • 查看创建表的SQL语句
show create table 表名;

show create table emp;

2.3.4 复制表结构

CREATE TABLE 新表 LIKE 旧表;

-- 创建e1表,e1表结构和emp表结构相同
create table e1 like emp;

-- 查看e1表的表结构
desc e1;

2.3.5 删除表

  • 直接删除表
DROP TABLE 表名; 

drop table e1;
  • 判断表是否存在,如果存在则删除表
DROP TABLE IF EXIST 表名;

drop table if exists e1;

2.3.6 修改表结构

  • 添加表列ADD
ALTER TABLE 表名 ADD 列名 类型;
-- 为学生表添加一个新的字段age,类型为int
alter table emp add age int;

在这里插入图片描述

  • 修改列类型MODIFY(只修改数据类型)
ALTER TABLE 表名 MODIFY 列名 新的类型;

alter table emp modify address varchar(100);

在这里插入图片描述

  • 修改列名 CHANGE(既修改字段名又修改类型)
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

alter table emp change address addr varchar(80);

在这里插入图片描述

  • 删除列 DROP
ALTER TABLE 表名 DROP 列名;

alter table emp drop age;
  • 修改表名
RENAME TABLE 表名 TO 新表名;

-- 将emp表改为employee
rename table emp to employee;

-- 将employee表改为emp
rename table employee to emp;

Tips:MySQL中没有直接修改库名的语句

2.3.7 修改表字符集

ALTER TABLE 表名 character set 字符集;

-- 查看emp表的建表语句
show create table emp;

-- 修改emp表的字符集为gbk
alter table emp character set gbk;

-- 修改emp表的字符集为utf8
alter table emp character set utf8;

2.3 DML操作表中的数据

2.3.1 插入记录

  • 1)插入全部字段

在这里插入图片描述

INSERT INTO 表名 VALUES (字段值1,字段值2...);

insert into emp values(1,'张三','男','河南汤阴',39);
  • 2)插入部分数据
INSERT INTO 表名 (字段名1,字段名2) VALUES (1,值2);

-- 插入指定的字段
insert into emp(id,name,sex) values(2,'李四','男');

-- 也可以不按照列的顺序插入
insert into emp(id,name,addr) values(3,'王五','湖南邵阳');

Tips:没有添加数据的字段会使用NULL

  • 3)插入多条记录
INSERT INTO 表名 values (1,2),(1,2),(1,2);

INSERT INTO emp
VALUES
	( 4, '小红', '女', '四川南充', 25 ),
	( 5, '小明', '女', '河南平顶山', 24 ),
	( 6, '小李', '男', '陕西榆林', 20 );

插入记录规范:

  • 1)数据的大小应在列的规定范围内,例如:不能将一个长度为30的字符串加入到长度为20的列中。

  • 2)在values中列出的数据位置必须与被加入的列的排列位置相对应。

  • 3)字符和日期型数据应包含在单引号中。MySQL中也可以使用双引号做为分隔符。

  • 4)不指定列或使用null,表示插入空值。

2.3.2 更新记录

  • 1)不带条件修改数据

语法:

UPDATE 表名 SET 字段名=,字段名=;

update emp set sex='女',addr='广西来宾';

Tips:不带条件表示更新所有的记录

在这里插入图片描述

  • 2)带条件修改数据

语法:

UPDATE 表名 SET 字段名=WHERE 条件表达式;

-- 一次修改一列
update emp set addr='甘肃白银' where id=2;

-- 一次修改多列
update emp set sex='男',addr='陕西忻州' where id=5;

2.3.3 删除表记录

  • 1)不带条件删除数据
DELETE FROM 表名;

delete from emp;

Tips:不带条件的删除会删除表中的所有记录,慎用!

准备数据:

INSERT INTO emp
VALUES
	( 1, '小明', '男', '山西铜川', 19 ),
	( 2, '小兰', '女', '江西萍乡', 20 ),
	( 3, '小龙', '男', '云南临沧', 23 ),
	( 4, '小红', '女', '贵州毕节', 18 ),
	( 5, '小龙', '男', '吉林白城', 22 );
  • 2)带条件删除

语法:

DELETE FROM 表名 WHERE 条件表达式;

delete from emp where id=5;

2.3.4 清空表

  • 语法:
truncate 表名;

truncate emp;

Tips:先删除表结构,再创建一个相同的表结构 相当于drop table emp,再create table emp

2.3.5 增删改方法小结

功能 语句
添加记录(增) INSERT INTO 表名 VALUES (值1,值2)
更新记录(改) UPDATE 表名 SET 字段名=值 WHERE 条件表达式
删除记录(删) DELETE FROM 表名 WHERE 条件表达式

2.4 数据库的查询

2.4.1 查询全部数据

建立测试数据:

INSERT INTO emp
VALUES
	( 1, '小明', '男', '辽宁盘锦', 26 ),
	( 2, '小兰', '女', '安徽亳州', 21 ),
	( 3, '小龙', '男', '湖北随州', 24 ),
	( 4, '小红', '女', '西藏林芝', 25 ),
	( 5, '小龙', '男', '福建宁德', 22 );
  • 语法
SELECT * FROM 表名;

select * from emp;

在这里插入图片描述

2.4.2 查询指定列

查询指定列的数据,多个列之间以逗号分隔

  • 语法:
SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;

select id,name,addr from emp;

在这里插入图片描述

2.4.3 指定列的别名进行查询

使用关键字AS:

  • 使用别名的好处:可以让查询结果,列名显示为汉字,可读性好一些。后期也可以给表起别名,主要用于多表查询。

对列指定别名:

  • 语法:
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;

select id as 编号,name as 姓名,addr 地址 from emp;

在这里插入图片描述

Tips:as可以省略

2.4.4 清除重复值

添加数据:

INSERT INTO emp
VALUES
	( 1, '小陈', '男', '青海西宁', 28 ),
	( 7, '小辉', '男', '浙江衢州', 20 );

查询表数据:

在这里插入图片描述

  • 清除重复数据语法:
SELECT DISTINCT 字段名 FROM 表名;

去重id相同的行:

-- 只去重id相同的行
select distinct id from emp;

在这里插入图片描述

去重sex相同的行:

select distinct sex from emp;

在这里插入图片描述

2.4.5 查询结果参与运算

  • 1)某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名; 

select id,name,addr,age+1 from emp;

在这里插入图片描述

  • 2)某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名; 
 
select id,name,addr,id+age from emp;

在这里插入图片描述

Tips:参与运算的必须是数值类型

2.5 DQL条件查询

2.5.1 准备数据

创建一个学生表,包含如下列:

CREATE TABLE student (  
    id int, -- 编号  
    `name` varchar(20), -- 姓名  
    age int, -- 年龄  
    sex char(1), -- 性别  
    address varchar(100), -- 地址  
    math int, -- 数学  
    english int -- 英语  
);  

-- 插入数据
insert into student values(1,'小明',20,'男','河北衡水',90,100);
insert into student values(2,'小红',26,'女','湖南衡阳',88,69);
insert into student values(3,'小龙',18,'男','内蒙包头',78,80);
insert into student values(4,'小丽',24,'女','陕西宝鸡',95,80);
insert into student values(5,'张三',22,'男','江西上饶',80,90);
insert into student values(6,'李四',19,'男','广西北海',100,95);
insert into student values(7,'王五',24,'男','黑龙江大庆',90,95);

2.5.2 比较运算符

比较运算符 说明
>、<、<=、>=、=、<> 不等于,在mysql中也可使用!=
  • 练习:

-- 查询年龄大于25岁的学生

-- 查询数学成绩大于等于80分的学生

-- 查询英语成绩低于60的学生

-- 查询数学成绩大于英语成绩的学生

-- 查询性别不为男的学生

-- 查询性别不为男的学生(第二种写法)

-- 查询年龄大于25岁的学生
select * from student where age>25;

-- 查询数学成绩大于等于80分的学生
select * from student where math>=80;

-- 查询英语成绩小于等于90的学生
select * from student where english<=90;

-- 查询数学成绩大于英语成绩的学生
select * from student where math>english;

-- 查询性别不为男的学生
select * from student where sex!='男';

-- 查询性别不为男的学生(第二种写法)
select * from student where sex<>'男';

2.5.3 逻辑运算符

逻辑运算符 说明
and 或 && 与,全真为真
or 或 || 或,见真为真
not 或 ! 非,取反
  • 练习:
-- 查询年龄大于22岁并且性别为男的学生
select * from student where age>22 and sex='男';

-- 查询数学成绩大于80并且性别为女的学生
select * from student where english>80 and sex='女'

-- 查询数学成绩大于90或者英语成绩大于90的学生
select * from student where math>60 or english>60;

2.5.4 in关键字

  • 语法:
SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);

in里面的每个数据都会作为一次条件,只要满足条件的就会显示

  • 练习:
-- 查询id是1或2或5的学生
select * from student where id in (1,2,5);

-- 查询id不是1或2或5的学生
select * from student where id not in (1,2,5);

2.5.5 范围查询

  • 语法:
BETWEEN1 AND2

表示从值1到值2范围,包头又包尾,值1要小于值2,类似于>=值1 and <=值2

-- 查询english成绩大于等于60,且小于等于90的学生
select * from student where english between 60 and 90;

select * from student where english >=60 and english <=90;

2.5.6 like 关键字

LIKE表示模糊查询

  • 语法:
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
  • MySQL通配符
通配符 说明
% 匹配零个或多个字符
_ 匹配一个字符
-- 查询地址为'广'开头城市的学生
select * from student where address like '广%';

-- 查询地址中包含有'西'城市的学生
select * from student where address like '%西%';

-- 查询五个字地址城市的学生
select * from student where address like '_____';		-- 五个_

2.5.7 查询为空的列IS NULL

-- 查询性别成绩为NULL的学生
select * from student where sex is null;

-- 错误的
select * from student where sex = null;

-- 查询英语成绩不为NULL的学生
select * from student where sex is not null;

2.5.8 条件查询小结

比较运算符 说明
>、<、<=、>=、=、<>、!= 不等于
BETWEEN…AND 查询一个范围,包头又包尾
IN(集合) 条件在集合或数组中任何一个
LIKE ‘张%’ 模糊查询 % 匹配多个字符 _ 匹配1个字符
IS NULL 为空

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131709.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!