MySql笔记

本文介绍了MySQL的基础概念,如数据库、RDBMS、表结构、主键和外键等,并详细讲解了如何使用Mysql命令行管理数据库,创建表、数据类型、插入、查询、更新和删除操作。涵盖了SQL语句执行顺序、连接操作和常用操作示例。

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

MySql

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

RDBMS:关系型数据库管理系统(Ralational Database Management Sysytem)。

RDBMS术语

数据库:数据库是一些关联表的集合。

主键:主键是唯一的,一个数据只能包含一个主键。

外键;外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可以快速访问数据表中的特定信息,索引是对数据表中一列或多列的值进行排序的一种结构。类似于数据的目录。

参照完整性:参照的完整性要求关系中不允许引用不存在的实体,与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

管理mysql的命令

USE 数据库名:选择要操作的Mysql数据库,使用该命令后所有的msyql命令都只针对于该数据库。

SHOW DATABASES:列出Mysql数据库管理系统的数据库列表。

SHOW TABLES:显示数据库的所有表,使用该命令前需要使用USE 命令选择要执行的数据库。

SHOW COLUMNS FROM 数据表:显示数据表的属性,属性类型,主键信息,是否为null,默认值等其他信息。

SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)

Mysql操作数据库

create database 数据库名;

drop database 数据库名;

数据类型

日期和时间类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9lCzrPRQ-1640586145651)(E:\Typroa笔记\MySql.assets\image-20210917214714061.png)]

字符串类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6xtGUtG-1640586145653)(E:\Typroa笔记\MySql.assets\image-20210917214847463.png)]

CHAR和VARCHAR类型相似,但他们的保存和检索方式不同:
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。

区别之二,存储的容量不同
对 char 来说,最多能存放的字符个数 255,和编码无关。
而 varchar 呢,最多能存放 65532 个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是 65,532字节

Mysql创建数据表

CREATE TABLE table_name (column_name column_type);

创建数据表示例

CREATE TABLE IF NOT EXISTS nowcoder_tbl(
nowcoder_id INT UNSIGNED AUTO_INCREMENT,
nowcoder_title VARCHAR(100) NOT NULL,
nowcoder_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( nowcoder_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码。

删除数据表

drop table table_name

MySQL插入数据

INSERT INTO table_name ( field1, field2,…fieldN )
VALUES
( value1, value2,…valueN );

MySQL查询数据

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[ LIMIT N][ OFFSET M]

  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
Mysql where子句

SELECT field1, field2,…fieldN FROM table_name1, table_name2…
[WHERE condition1 [AND [OR]] condition2…

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号**,** 分割,并使用WHERE语句来设定查询条件。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
Mysql update 更新

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在一个单独表中同时更新数据。
Mysql delete 语句

DELETE FROM table_name [WHERE Clause]

  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 你可以在 WHERE 子句中指定任何条件
  • 您可以在单个表中一次性删除记录。
Mysql link子句

SELECT field1, field2,…fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = ‘somevalue’

  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等号 =
  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件

获取字段中以com结尾的所有记录

select * from nowcoder_tbl where nowcoder_author like '%COM';
Mysql union 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions];

  • expression1, expression2, … expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

UNION 操作示例

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
示例二
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
SQL语句的执行顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AAKIDHp3-1640586145654)(E:\Typroa笔记\MySql.assets\image-20211010171048099.png)]

连接

1. 什么是连接

​ 表和表之间通过某一列或者多列产生关系的,这在SQL里叫做连接。连接(join):是通过表和表之间的关系将两个表合并在一起的操作。常用的连接有4种类型,分别是:交叉连接、内连接、左连接、全连接。

交叉连接:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elFfbO1d-1640586145656)(E:\Typroa笔记\MySql.assets\image-20211010164938933.png)]

**内连接(inner join):**返回的是所有匹配的记录

内连接,如果用学生id来连接,就是找出同时存在于两张表中的学生id,然后就可以选择性地展示这些学生id后面的数据。

行数据:通过where语句来筛选要展示的行

类数据:通过select来选择要展示的字段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPXnsTNe-1640586145657)(E:\Typroa笔记\MySql.assets\image-20211010165806772.png)]

不同写法的内连接:
SELECT * FROM USER,relevance WHERE user.`userId`=relevance.`userId`;
SELECT * FROM USER CROSS JOIN relevance ON user.`userId`=relevance.`userId`;
SELECT * FROM USER INNER JOIN relevance ON user.`userId`=relevance.`userId`;
SELECT * FROM USER AS a INNER JOIN relevance AS b ON a.`userId`=b.`userId`;

左连接(left join)和右连接(right join):返回的是所有匹配的记录 外加 每行主键外键值为null的一条记录 辅表所有列为null的值

左连接会将数据左侧表中的数据全部取出来,不管右侧是否存在能关联上的数据

下图结构是学生表信息加上中间阴影部分信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e131ez3O-1640586145658)(E:\Typroa笔记\MySql.assets\image-20211010170031464.png)]

left join:左连接
SELECT 
a.userId AS 'id',
a.papertype AS '证件类型',
a.orgnizationid AS '证件号',
b.signId AS '签章id'
FROM USER AS a
LEFT JOIN relevance  b
ON a.userId=b.userId;

带in关键字的子查询

使用带in关键字可以将 原表中特定列的值子句查询返回的结果集中的值 进行比较

‘id’,
a.papertype AS ‘证件类型’,
a.orgnizationid AS ‘证件号’,
b.signId AS ‘签章id’
FROM USER AS a
LEFT JOIN relevance b
ON a.userId=b.userId;


**带in关键字的子查询**

> 使用带in关键字可以将 **原表中特定列的值** 与==子句查询返回的结果集中的值== 进行比较





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值