自学内容网 自学内容网

初识Mysql-01-基础语法

数据库介绍

什么是数据库

  • 存储数据的仓库
  • 本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
  • 所有的关系型数据库都可以使用通用的 SQL 语句进行管理 DBMS DataBase Management System

常用数据库

  • MySQL:开源免费的数据库,小型的数据库。
  • Oracle:收费的大型数据库,Oracle 公司的产品。
  • DB2 :IBM 公司的数据库产品,收费的。常应用在银行系统中。
  • SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用。
  • SQLite: 嵌入式的小型数据库,应用在手机端,如:Android。

Mysql

数据库管理系统

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理 系统访问数据库中表内的数据。

数据库管理系统、数据库和表的关系

数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体 User 的数据。
具体关系如图:
在这里插入图片描述

SQL 的概念

Structured Query Language 结构化查询语言

Sql的作用

  • 是一种所有关系型数据库的查询规范,不同的数据库都支持。
  • 通用的数据库操作语言,可以用在不同的数据库中。
  • 不同的数据库 SQL 语句有一些区别

SQL 语句分类

  • Data Definition Language (DDL 数据定义语言) 如:建库,建表
  • Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
  • Data Query Language(DQL 数据查询语言),如:对表中的查询操作
  • Data Control Language(DCL 数据控制语言),如:对用户权限的设置

MySQL 的语法

  • 每条语句以分号结尾。
  • SQL 中不区分大小写,关键字中认为大写和小写是一样的
  • 3 种注释:(-- 空格)单行注释、( /* */) 多行注释、 (#) mysql特有注释

MySQL 数据类型

分类类型名称类型说明
整数tinyInt微整型:很小的整数(占 8 位二进制)
·smallint小整型:小的整数(占 16 位二进制)
·mediumint中整型:中等长度的整数(占 24 位二进制)
·int(integer)整型:整数类型(占 32 位二进制)
小数float单精度浮点数,占 4 个字节
·double双精度浮点数,占 8 个字节
日期time表示时间类型
·date表示日期类型
·datetime同时可以表示日期和时间类型
字符串char(11)固定长度的字符串,无论使用几个字符都占满全部,M 为 0~255 之间的整数
·varchar(11)可变长度的字符串,使用几个字符就占用几个,M 为 0~65535 之间的整数
大二进制tinyblob Big Large Object允许长度 0~255 字节
·blob允许长度 0~65535 字节
·mediumblob 允许长度 0~167772150 字节
·longblob 允许长度 0~4294967295 字节
大文本tinytext允许长度 0~255 字节
·text允许长度 0~65535 字节
·mediumtext允许长度 0~167772150 字节
·longtext允许长度 0~4294967295 字节

以下举例都是使用的Navicat工具来进行操作的

DDL 操作数据库

  1. 创建数据库

创建数据库: CREATE DATABASE 数据库名;
判断数据库是否已经存在,不存在则创建数据库: CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集: CREATE DATABASE 数据库名 CHARACTER SET 字符集;

  1. 查看数据库

查看所有数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名;

  1. 修改数据库

修改数据库默认的字符集:ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

  1. 删除数据库

删除数据库的: DROP DATABASE 数据库名;

  1. 使用数据库

查看正在使用的数据库: SELECT DATABASE();
使用/切换数据库: USE 数据库名;

  1. 创建表

创建表的格式:

CREATE TABLE 表 名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
  1. 查看表

查看某个数据库中的所有表: SHOW TABLES;
查看表结构: DESC 表名;
查看创建表的 SQL 语句: SHOW CREATE TABLE 表名;

  1. 快速创建一个表结构相同的表

快速创建: CREATE TABLE 新表名 LIKE 旧表名;

  1. 删除表

直接删除表: DROP TABLE 表名;
判断表是否存在,如果存在则删除表: DROP TABLE IF EXISTS 表名;

  1. 修改表结构

添加表列 ADD: ALTER TABLE 表名 ADD 列名 类型;
修改列类型 MODIFY: ALTER TABLE 表名 MODIFY 列名 新的类型;
修改列名 CHANGE: ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
删除列 DROP: ALTER TABLE 表名 DROP 列名;
修改表名: RENAME TABLE 表名 TO 新表名;
修改字符集 character set: ALTER TABLE 表名 character set 字符集;

DML 操作表中的数据

插入记录

INSERT [INTO] 表名 [字段名] VALUES (字段值)
INSERT INTO 表名:表示往哪张表中添加数据
(字段名 1, 字段名 2, …):要给哪些字段设置值
VALUES (值 1, 值 2, …):设置具体的值

插入全部字段: INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);

插入部分数据: INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);

注意:

  • 插入的数据应与字段的数据类型相同
  • 数据的大小应在列的规定范围内
  • 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
  • 字符和日期型数据应包含在单引号中
  • 不指定列或使用 null,表示插入空值

蠕虫复制:
将一张已经存在的表中的数据复制到另一张表中。
将表名 2 中的所有的列复制到表名 1 中: INSERT INTO 表名1 SELECT * FROM 表名2;
只复制部分列: INSERT INTO 表名1( 列1, 列2) SELECT 列1, 列2 FROM student;

更新表记录

UPDATE 表名  SET 列名=值  [WHERE 条件表达式]
UPDATE: 需要更新的表名
SET: 修改的列值
WHERE: 符合条件的记录才更新
你可以同时更新一个或多个字段。
你可以在 WHERE 子句中指定任何条件。

不带条件修改数据: UPDATE 表名 SET 字段名=值; 修改了所有行
带条件修改数据: UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

删除表记录

DELETE FROM 表名  [WHERE 条件表达式]
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件

不带条件删除数据: DELETE FROM 表名;
带条件删除数据: DELETE FROM 表名 WHERE 字段名=值;
使用 truncate 删除表中所有记录: TRUNCATE TABLE 表名;

DQL 查询表中的数据

SELECT 列名 FROM 表名 [WHERE 条件表达式]
SELECT 命令可以读取一行或者多行记录。
你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
  1. 简单查询
    查询表所有行和列的数据: SELECT * FROM 表名;
    查询指定列: SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
  2. 指定列的别名查询
    对列指定别名: SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
    对列和表同时指定别名: SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
  3. 清除重复值
    查询指定列并且结果不出现重复数据 : SELECT DISTINCT 字段名 FROM 表名;
  4. 查询结果参与运算(参与运算的必须是数值类型)
    某列数据和固定值运算: SELECT 列名 1 + 固定值 FROM 表名;
    某列数据和其他列数据参与运算: SELECT 列名 1 + 列名 2 FROM 表名;
  5. 条件查询
SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回

准备数据:

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

INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩
',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港
',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
比较运算符说明
>、<、<=、>=、=、<><>在 SQL 中表示不等于,在 mysql 中也可以使用!=,没有==
BETWEEN…AND在一个范围之内,如:between 100 and 200相当于条件在 100 到 200 之间,包头又包尾
IN(集合)集合表示多个值,使用逗号分隔
LIKE ‘张%’模糊查询
IS NULL查询某一列为 NULL 的值,注:不能写=NULL
  • 查询 math 分数大于 80 分的学生
    select * from student where math>80;
    在这里插入图片描述

  • 查询 english 分数小于或等于 80 分的学生
    select * from student where english <=80;
    在这里插入图片描述

  • 查询 age 等于 20 岁的学生
    select * from student where age = 20;
    在这里插入图片描述

  • 查询 age 不等于 20 岁的学生
    select * from student where age <> 20; 或则 select * from student where age != 20;
    在这里插入图片描述

逻辑运算符说明
and 或 &&与,SQL 中建议使用前者,后者并不通用。
or 或 ||
not 或 !
  • 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
    select * from student where age>35 and sex='男';
    在这里插入图片描述

  • 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
    select * from student where age>35 or sex='男';
    在这里插入图片描述

  • 查询 id 是 1 或 3 或 5 的学生
    select * from student where id=1 or id=3 or id=5;
    在这里插入图片描述

in 关键字

SELECT 字段名  FROM 表名  WHERE 字段  in (数据 1, 数据 2...);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示

查询 id 是 1 或 3 或 5 的学生:
在这里插入图片描述

范围查询(between and )

BETWEEN 值 1 AND 值 2
表示从值 1 到值 2 范围,包头又包尾
比如:age BETWEEN 50 AND 80 相当于: age>=50 && age<=80

查询年龄age在50岁到80岁之间:
在这里插入图片描述

like 关键字

LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
通配符说明
%匹配任意多个字符串
_匹配一个字符
  • 查询姓马的学生
    select * from student where name like '马%';
    在这里插入图片描述

  • 查询姓名中包含’德’字的学生
    select * from student where name like '%德%';
    在这里插入图片描述

  • 查询姓马,且姓名有两个字的学生
    select * from student where name like '马_';
    在这里插入图片描述
    欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。


原文地址:https://blog.csdn.net/m0_72926194/article/details/140433171

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!