当前位置: 首页 > news >正文

46.Mysql基础及案例

MySQL特点

  1. 开源免费的关系型数据库产品
  2. 对PHP支持最好(常用于LAMP/WAMP架构)
  3. 使用SQL指令进行操作
  4. 目前隶属于Oracle公司

数据库基本概念

数据库定义

数据库是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

数据库分类
  1. 网络数据库:将数据库技术引入计算机网络系统
  2. 层级数据库:有根结点的定向有序树结构
  3. 关系数据库:建立在关系模型基础上的数据库
存储介质分类

关系型数据库:存储在磁盘中

非关系型数据库:存储在内存中


关系型数据库

三个组成部分
  1. 关系数据结构:以二维表形式存储数据
  2. 关系操作集合:使用SQL指令管理数据
  3. 关系完整性约束:数据内部和表间的关联关系
典型关系型数据库
  • 小型:Microsoft Access,SQLite
  • 中型:SQL Server,MySQL
  • 大型:Oracle,DB2

SQL语言分类

  1. 数据查询语言(DQL):SELECT查询操作
  2. 数据操作语言(DML):INSERT、UPDATE、DELETE写操作
  3. 事务处理语言(TPL):COMMIT ROLLBACK 提交事务和回滚事务(恢复delete删除了但没有commit的)
  4. 数据控制语言(DCL):GRANT、REVOKE权限管理
  5. 数据定义语言(DDL):CREATE、DROP结构管理

MySQL组件

常见组件包括:数据库(database)、表(table)、索引(index)、视图(view)、用户(user)、权限(privilege)、存储过程(procedure)、存储函数(function)、触发器(trigger)、事件调度器(event scheduler)

约束类型

1.主键约束:PRIMARY KEY

作用:唯一标识表中的每一条记录。

特点:

主键列的值必须是唯一的,且不能为NULL。

​ 一个表只能有一个主键,但主键可以由多个列组成(复合主键)

2.唯一键约束:UNIQUE

作用:确保列中的所有值都是不同的。

特点:

​ 唯一约束允许NULL值(但只能有一个NULL,具体取决于数据库的设置, 但MySQL允许多个NULL值,因为NULL不等于任何值,包括另一个NULL)。一个表可以有多个唯一约束

3.外键约束:FOREIGN KEY

作用:用于关联两个表,确保一个表中的数据引用另一个表的主键。

特点:

​ 外键约束用于维护表之间的引用完整性。

​ 外键列的值必须是另一个表主键的值或者为NULL。

4.检查约束:CHECK

作用:确保列中的值满足指定的条件。

注意:在MySQL 8.0.16之前,CHECK约束会被解析但会被忽略。从8.0.16版本开始,MySQL才真正支持CHECK约束

5.默认值:DEFAULT

作用:当插入新记录时,如果没有为该列指定值,则使用默认值。

6.非空约束:NOT NULL

作用:确保列不能有NULL值


DDL数据定义操作

数据库操作
CREATE DATABASE db_name;          -- 创建数据库
SHOW DATABASES;                   -- 查看数据库
DROP DATABASE db_name;            -- 删除数据库
表操作
CREATE TABLE table_name (         -- 创建表col1 datatype constraints,col2 datatype constraints
) ENGINE='存储引擎类型';SHOW TABLES;                      -- 查看表
DESC table_name;                  -- 查看表结构
DROP TABLE table_name;            -- 删除表

DML数据操作语言

INSERT插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
UPDATE更新数据
UPDATE table_name SET column1 = value1 [WHERE condition];
DELETE删除数据
DELETE FROM table_name [WHERE condition];
TRUNCATE清空表
TRUNCATE TABLE table_name;
  • 需要删除整个表的所有数据时:优先使用 TRUNCATE TABLE,因为它速度更快,使用的系统资源和日志资源更少。
  • 需要根据条件删除部分数据时:必须使用 DELETE FROM … WHERE …,因为 TRUNCATE 不能带条件。
  • 需要保留标识列(自增ID)的连续性时:使用 DELETE
  • 需要希望标识列(自增ID)从头开始时:使用 TRUNCATE
  • 删除操作需要能被回滚时:使用 DELETE(注意:在某些数据库如Oracle中,TRUNCATE在事务内也可回滚,但为了代码的通用性和可读性,如果需要回滚,通常更安全的选择是DELETE)。
  • 表上有DELETE触发器,需要触发它时:使用 DELETE
SELECT查询数据
SELECT column1, column2 FROM table_name 
[WHERE condition] 
[ORDER BY column_name [DESC]] 
[LIMIT [offset,] count];

DCL数据控制语言

授权操作
GRANT privilege_type ON db_name.table_name TO 'username'@'host';
权限查看
SHOW GRANTS;                    -- 查看当前用户权限
SHOW GRANTS FOR 'user'@'host';  -- 查看指定用户权限
取消授权
REVOKE privilege_type ON db_name.table_name FROM 'username'@'host';
FLUSH PRIVILEGES;               -- 刷新权限

注意:mysql服务进程启动时会读取mysql库中的所有授权表至内存中:
GRANT或REVOKE等执行权限操作会保存于表中,mysql的服务进程会自动重读授权表,并更新至内存中
对于不能够或不能及时重读授权表的命令,可手动让mysql的服务进程重读授权表

常用的SHOW命令

SHOW CHARACTER SET;             -- 查看字符集
SHOW ENGINES;                   -- 查看存储引擎
SHOW DATABASES;                 -- 查看数据库
SHOW TABLES;                    -- 查看表
SHOW CREATE TABLE table_name;   -- 查看建表语句
SHOW TABLE STATUS;              -- 查看表状态

实战案例

1.搭建mysql服务

2…创建一个以你名字为名的数据库,并创建一张表student,该表包含三个字段(id,name,age),表结构如下

mysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | NO   |     | NULL    |                |
| age   | tinyint(4)   | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+3 rows in set (0.01 sec)mysql> create database xyh;
mysql> create table student ( id int(11) not null auto_increment,-> name varchar(100) not null ,-> age tinyint(4) null default null,-> primary key(id))-> ;

3.查看下该新建的表有无内容(用select语句)

mysql> select * from student-> ;
Empty set (0.00 sec)

4.往新建的student表中插入数据(用insert语句),结果应如下所示:

+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | chenyu    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+ 
mysql> insert into student(name,age) values('tom',20),-> ('jerry',23),-> ('chenyu',25),-> ('sean',28),-> ('zhangshan',26),-> ('zhangshan',20),-> ('lisi',null),-> ('chenshuo',10),-> ('wangwu',3),-> ('qiuyi',15),-> ('qiuxiaotian',20);
Query OK, 11 rows affected (0.00 sec)
Records: 11  Duplicates: 0  Warnings: 0

在这里插入图片描述

5.修改lisi的年龄为50

mysql> update student set age = 50 where name = 'lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

6.以age字段降序排序

mysql> select * from student order by age desc;

在这里插入图片描述

7.查询student表中年龄最小的3位同学跳过前2位

mysql> select * from student order by age limit 2,3;

在这里插入图片描述

8.查询student表中年龄最大的4位同学

mysql> select * from student order by age desc limit 4;

在这里插入图片描述

9.查询student表中名字叫zhangshan的记录

mysql> select * from student where name = 'zhangshan';

在这里插入图片描述

10.查询student表中名字叫zhangshan且年龄大于20岁的记录

mysql> select * from student where name = 'zhangshan' and age > 20;

在这里插入图片描述

11.查询student表中年龄在23到30之间的记录

mysql> select * from student where age between 23 and 30;

在这里插入图片描述

12.修改wangwu的年龄为100

mysql> update student set age = 100 where name = 'wangwu';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在这里插入图片描述

13.删除student中名字叫zhangshan且年龄小于等于20的记录

mysql> delete from student where name = 'zhangshan' and age <= 20;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

14.创建表course表,要求如下
id字段,int(3),主键
course_name字段,varchar(100)

mysql> create table course ( id int(3) primary key, course_name varchar(100));
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

15、为course表插入数据

+----+-------------+
| id | course_name |
+----+-------------+
|  1 | Java        |
|  2 | MySQL       |
|  3 | Python      |
|  4 | Go          |
|  5 | C++         |
+----+-------------+
mysql> insert into course(id,course_name) values( 1,'java'),-> ( 2,'MYSQL'),-> ( 3,'Python'),-> ( 4,'Go'),-> ( 5,'C++');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

在这里插入图片描述

16、创建student123表,要求如下:
id字段 int(3) 主键
name varchar(100)
age int(3)
sex varchar(10)
height int(3)
course_id int(3) 外键,参照course表中的主键

mysql> create table student123 ( id int(3) primary key, name varchar(100), age int(3), sex varchar(10), height int(3), course_id int(3),foreign key(course_id) references course(id));
Query OK, 0 rows affected (0.01 sec)

17、为student123表插入数据如下:

+----+--------+------+-------+--------+-----------+
| id | name   | age  | sex   | height | course_id |
+----+--------+------+-------+--------+-----------+
|  1 | Dany   |   25 | man   |    160 |         1 |
|  2 | Green  |   23 | man   |    158 |         2 |
|  3 | Henry  |   23 | woman |    185 |         1 |
|  4 | Jane   |   22 | man   |    162 |         3 |
|  5 | Jim    |   24 | woman |    175 |         2 |
|  6 | John   |   21 | woman |    172 |         4 |
|  7 | Lily   |   22 | man   |    165 |         4 |
|  8 | Susan  |   23 | man   |    170 |         5 |
|  9 | Thomas |   22 | woman |    178 |         5 |
| 10 | Tom    |   23 | woman |    165 |         5 |
+----+--------+------+-------+--------+-----------+
mysql> insert into student123(id,name,age,sex,height,course_id) values( 1,'Dany',25,'man',160,1),-> ( 2,'Green',23,'man',158,1),-> ( 3,'Henry',23,'woman',185,1),-> ( 4,'Jane',22,'man',162,3),-> ( 5,'Jim',24,'woman',175,2),-> ( 6,'John',21,'woman',172,4),-> ( 7,'Lily',22,'man',165,4),-> ( 8,'Susan',23,'man',170,5),-> ( 9,'Thomas',22,'woman',178,5),-> ( 10,'Tom',23,'woman',165,5);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

在这里插入图片描述


文章转载自:

http://ACD4Kvdo.xkyqq.cn
http://X93sZXy4.xkyqq.cn
http://TbR9UIVd.xkyqq.cn
http://pGR15VHn.xkyqq.cn
http://bsecJSGO.xkyqq.cn
http://pkPM9hx7.xkyqq.cn
http://u8grl8QW.xkyqq.cn
http://olYKSIO4.xkyqq.cn
http://qNiLTw9r.xkyqq.cn
http://KYhU2iKm.xkyqq.cn
http://tyzbPSD1.xkyqq.cn
http://NnVIX7fI.xkyqq.cn
http://CHNgc1Q1.xkyqq.cn
http://DK1MYrrw.xkyqq.cn
http://yRXyDCJW.xkyqq.cn
http://Q9oyCqKU.xkyqq.cn
http://xBXZX2YB.xkyqq.cn
http://PHC2rDoI.xkyqq.cn
http://ex3M5B4X.xkyqq.cn
http://2MgV4ISu.xkyqq.cn
http://lYaHGVEN.xkyqq.cn
http://m8tm1ifW.xkyqq.cn
http://bK5c0STh.xkyqq.cn
http://8btfBjvD.xkyqq.cn
http://vbmEMyAT.xkyqq.cn
http://nkrSzYy2.xkyqq.cn
http://yeeZmbCK.xkyqq.cn
http://iYU5qMyW.xkyqq.cn
http://Ltv5uFmL.xkyqq.cn
http://P3NQBEDl.xkyqq.cn
http://www.dtcms.com/a/386829.html

相关文章:

  • 贪心算法应用:文件合并问题详解
  • 什么是“孤块”?
  • 神卓N600 公网盒子公网访问群晖NAS绿联飞牛
  • 浅谈背包DP(C++实现,配合lc经典习题讲解)
  • 虚拟化嵌套支持在云服务器容器化Hyper-V环境的配置标准
  • 修改el-checkbox默认颜色
  • ROS接口信息整理
  • 【C++11】lambda匿名函数、包装器、新的类功能
  • 【Linux系统】深入理解线程,互斥及其原理
  • 1. C++ 中的 C
  • 探讨基于国产化架构的非结构化数据管理平台建设路径与实践
  • C++11移动语义
  • 代码随想录第14天| 翻转、对称与深度
  • 算法改进篇 | 改进 YOLOv12 的水面垃圾检测方法
  • 一个我自己研发的支持k-th路径查询的数据结构-owl tree
  • 首款“MODA”游戏《秘境战盟》将在Steam 新品节中开放公开试玩
  • ε-δ语言(Epsilon–Delta 语言)
  • QCA9882 Module with IPQ4019 Mainboard High-Performance Mesh Solution
  • xv6实验:Ubuntu2004 WSL2实验环境配置(包括git clone网络问题解决方法)
  • ICE-Interactive Connectivity Establishment-交互式连接建立
  • 【代码随想录day 28】 力扣 45.跳跃游戏 II
  • IP核的底层封装
  • 4.PFC原理和双闭环控制
  • 江苏保安员证【单选题】考试题库及答案
  • 71-Python+MySQL 医院挂号问诊管理系统-1
  • 图片重命名
  • 同网段通信ARP
  • WWDC25 苹果开发武林圣火令挑战:探索技术前沿,聆听创新故事
  • 深度解析大模型服务性能评测:AI Ping平台助力开发者精准选型MaaS服务
  • Blender 了解与学习