MySQL从入门到放弃(三)

article/2025/9/29 21:02:24

插入数据

插入数据之前首先创建一张persons表


 CREATE TABLE persons(
id INT NOT NULL AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT '无名',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
PRIMARY KEY(id)
);

为表的所有字段插入数据

一次插入一条数据

INSERT INTO persons(id,name,age,info)VALUES(1,'张三',20,,'张三的介绍');

一次插入多条数据

 INSERT INTO persons(id,name,age,info)VALUES(1,'张三',20,,'张三的介绍'),(2,'李四',30,'李四的介绍'),(3,'王五',34,'王五的介绍');

如果插入的字段正好匹配的话也可以直接这样

INSERT INTO persons VALUES(1,'张三',20,,'张三的介绍');

为表的指定字段插入数据

在上面的表结构中,info字段可以为空,所以这里不指定添加

一次插入一条数据

 INSERT INTO persons(id,name,age)VALUES(1,'张三',20);

一次插入多条数据

INSERT INTO persons(id,name,age)VALUES(1,'张三',20),(2,'李四',30),(3,'王五',34);

将查询的结果插入到表中

在创建一个表persons_old


 CREATE TABLE persons_old(
id INT NOT NULL AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT '无名',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
PRIMARY KEY(id)
);

在persons_old中插入一条数据

INSERT INTO persons_old VALUES(10,'张大炮',50,'张大炮的信息');

现在分别查看两个表


现在查询persons_old的数据并插入的persons中

 INSERT INTO persons(id,name,age,info) SELECT id,name,age,info FROM persons_old;

更新数据

UPDATE 表名 SET 字段名1=值,字段名2=值....,字段名nWHERE 条件

把年龄大于30的Info字段该为高龄

UPDATE persons
SET info='高龄'
WHERE age>30;

删除数据

DELETE FROM 表名[WHERE 条件];

把年龄大于40岁的信息删除

DELETE FROM persons WHERE age>40;

把表中的记录全部删除

DELETE FROM persons;

MySQL索引

        索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

        例如:数据库中有2万条记录,现在要执行这样的一个查询SELECT * FROM table WHERE num=1000,如果没有索引,必须便利整个表,直到num等于10000的这一行被找到为止,如果要在num列上创建索引,MySQL不需要任何扫描,直接在索引类找10000,就可以得知这行的位置。

索引的优点:

            1>通过创建唯一索引,可以保证数据库表中的每一行数据的唯一性。

            2>可以大大加快数据的查询速度,这也是创建索引的最主要原因。

            3>在实现数据的参考完整性方面,可以加速表和表之间的连接。

            4>在使用分组和排序子句进行数据查询时,也可以显著减少查询中分组和排序的时间。

索引的缺点:

          1>创建索引和维护索引要耗费时间,并且随着数据的增加所耗费的时间也会增加。      

            2>索引需要占磁盘空间,除了数据表占用数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。

            3>当对表中的数据进行增加、删除和修改的时候,索引页要动态的维护,这样就降低了维护速度。

索引的分类:

索引的设计原则:

索引的创建

创建表的时候创建索引

CREATE TABEL 表名 (字段1,数据类型,字段2,数据类型,....字段n,数据类型[UNIQUE|FULLTEXT|SPATIAL][INDEX|KEY][索引名](索引值[长度])[ASC|DESC]
);

创建普通索引

最基本的索引类型,没有唯一性之类的限制,其作用只是加快对数据的访问速度。

在book表中的name字段建立普通索引

CREATE TABLE book (b_id INT NOT NULL,b_name VARCHAR(20) NOT NULL,b_price INT(10) NOT NULL,INDEX demoIdx(b_name)
);

使用SHOW CREATE TABLE 查看表结构


使用EXPLAIN语句查看索引是否正在使用



创建唯一索引

唯一索引和普通索引最大的区别就是,索引列的值必须唯一,但允许有空值,如果是组合索引,则列索引的组合必须唯一。

CREATE TABLE book (b_id INT NOT NULL,b_name VARCHAR(20) NOT NULL,b_price INT(10) NOT NULL,UNIQUE INDEX UniqIdx(b_id)
);

创建单列索引

单列索引是在数据表中的某一个字段上创建的索引,一个表中可以创建多个单列索引,前面两个列子中创建的索引都是单列索引。

CREATE TABLE book (b_id INT NOT NULL,b_name VARCHAR(20) NOT NULL,b_price INT(10) NOT NULL,INDEX singleIdx(b_name(10))
);

上面代码中创建了一个名为singleIdx的单列索引,索引长度为10。

创建组合索引

CREATE TABLE book (b_id INT NOT NULL,b_name VARCHAR(20) NOT NULL,b_price INT(10) NOT NULL,INDEX singleIdx(b_id,b_name(10))
);

创建全文索引

FULLTEXT全文索引可以用于全文搜索,只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列。索引总是对整个列进行,不支持局部(前缀)索引。

CREATE TABLE book (b_id INT NOT NULL,b_name VARCHAR(20) NOT NULL,b_price INT(10) NOT NULL,b_info VARCHAR(255),FULLTEXT INDEX FullTxIdx(b_info)
);

在已经存在的表上创建索引

使用ALTER TABLE 语句创建索引

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY]
[索引名](索引列(索引长度))[ASC|DESC];

使用SHOW INDEX FROM 表名查看创建的索引



使用CREATE INDEX创建索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名(索引列[索引长度])[ASC|DESC];

索引的删除

使用ALTER TABLE 删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

使用DROP INDEX 语句删除索引

DROP INDEX 索引名 ON 表名;

MySQL视图

视图的创建

在单表上创建视图

CREATE VIEW 视图名(字段1,字段2,字段3...字段n) 
AS SELECT 字段1,字段2,字段3...字段n
FROM 表名;
WHERE 条件

在多表上创建视图

CREATE VIEW 视图名(字段1,字段2,字段3,...字段n)
AS SELECT 表1.字段1,表1.字段2,表2.字段1,表2.字段2
FROM 表1,表2
WHERE 条件

视图的查看

使用DESCRIBE关键字

DESCRIBE 视图名;

使用SHOW TABLE STATUS语句查看

SHOW TABLE STATUS LIKE '视图名';

使用SHOW CREATE VIEW语句查看

SHOW CREATE VIEW 视图名;

在views表查看视图详情信息

SELECT * FROM information_schema.views;

视图的修改

使用CREATE OR REPLACE VIEW语句修改视图

CREATE OR REPLACE VIEW 视图名 AS .....;

使用ALTER语句修改视图

ALTER VIEW 视图名 AS.....;

视图的更新

使用INSERT INTO更新视图

INSERT INTO 视图名(字段1,...字段n) VALUES(值,值....值);

使用UPDATE更新视图

UPDATE 视图名 SET 字段名=值 WHERE 条件;

使用DELETE更新视图

DELETE FROM 视图名 WHERE 条件;

视图的删除

使用DROP关键字删除视图

DROP VIEW [IF EXISTS] 视图名;

MySQL用户管理

新建普通用户

使用CREATE USER创建新用户

使用CREATE USER创建的用户只有登录权限,没有任何其他权限

#指定了IP地址,用户名和密码
CREATE USER '用户名'@'IP地址' IDENTIFIED BY '密码';

使用GRANT创建新用户

GRANT 权限1,权限2,...权限n ON 数据库.表名
TO '用户名'@'IP地址' IDENTIFIED BY '密码'
[WITH GRANT OPTION];

直接操作MySQL用户表

INSERT INTO mysql.user(HOST,USER,PASSWORD,[privilegelist])
VALUES('IP地址','用户名',PASSWORD('密码'),privilegelist);
直接操作MySQL用户表的话要使用 flush privileges;来刷新权限

删除普通用户

使用DROP USER语句删除用户

DROP USER 用户名;

使用DELETE语句删除用户

DELETE FROM MySQL.user WHERE host='IP地址' AND user='用户名';

ROOT用户修改自己的密码

使用mysqladmin命令行指定新密码

这个命令直接打开cmd工具执行

mysqladmin-u 用户名 -h IP地址 -p password 密码

修改mysql数据库的user表

UPDATE mysql.user SET authentication_string=PASSWORD('新密码')
WHERE User='root' AND Host='localhost';

修改SET语句修改ROOT用户的密码

SET PASSWORD=PASSWORD('456789');

ROOT修改普通用户密码

使用SET语句修改普通用户密码

SET PASSWORD FOR '用户名'@'IP地址' = PASSWORD('新密码');

使用UPDATE语句修改普通用户密码

UPDATE mysql.user SET authentication_string=PASSWORD('新密码')
WHERE User='用户名' AND Host='IP地址';

使用GRANT语句修改普通用户密码

GRANT USAGE ON *.* TO '用户名'@'IP地址' IDENTIFIED BY '新密码';

普通用户修改密码

普通用户登录MYSQL服务器后,通过SET语句设置自己的密码

SET PASSWORD=PASSWORD('新密码');

ROOT用户密码丢失的解决办法

1.先关闭MYSQL服务

2.找到文件my.ini文件,编辑模式打开,在最后加上代码skip-grant-tables

3.启动MYSQL服务,然后直接mysql进入

3.UPDATE mysql.user SET authentication_string=PASSWORD('新密码')

WHERE User='root';

4.删除my.ini文件中刚才添加的代码,重启服务

查看授权给某用户的权限

SHOW GRANTS FOR '用户名'@'IP地址';

收回权限

REVOKE 权限1,权限2...权限n ON 数据库.表名 FROM '用户名'@'IP地址';


http://chatgpt.dhexx.cn/article/GY2vgTQv.shtml

相关文章

Python从入门到放弃

Python基础知识: Python列表 Python元组 Python字符串 Python字典 Python正则 Python字典排序 Python编码Python正则表达式 Python集合 Python map Python reduce Python lambdaPython 函数Python 文件 Python数据可视化编程: Python数据可视化Python画…

1、LabVIEW从入门到放弃

LabVIEW从入门到放弃 一、其实不想学二、学习资源三、成果展示四、声明 一、其实不想学 最近导师想要用LabVIEW写点东西,进行一些实验验证。虽然之前摸过几天,也就是为了应付考试,啥都没学到。接下来时间可能真的需要从入门到放弃了~   总结…

Linux从入门到放弃

mac环境下的linux搭建 一.linux作为一个开源的操作系统,以其稳定性和安全性,是程序员必不可少且需要掌握的系统。可能用惯了windows以及mac的我们一开始用起来很难受,但相信我,用惯了以后,你会更难受。小玩笑而已&…

C语言从入门到放弃

Unix是C的作者开发的。 Unix附属诞生物,当时使用的是cc编译器 然后有了linux就封装成了gcc编译器,但由于考虑到老家伙的使用习惯,还保留了cc C语言是结构化程序语言(一个程序能包含多个函数).C语言简单粗暴&#xff0c…

c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...

从入门到精神异常(资深病友狗头著)_精神异常_病友_狗头表情 不好意思拿错了(Java Web从入门到精通)_拿错_JAVA_Web表情 C语言从研发到脱发_脱发_研发_语言表情 我也只是新手入门第一次见有人就如此会装逼 幸会幸会 哪里的话_新手入门_装逼_幸会幸表情 熊猫头写个C语言(666)_666…

深度学习---从入门到放弃(七)CNN进阶,迁移学习

深度学习—从入门到放弃(七)CNN进阶,迁移学习 引入 图像是高维的。即image_length* image_width*image_channels是一个很大的数字,而上一教程里所提到的CNN的权值共享便是一种解决图像和其他领域高维问题的方法。 从上图中可以…

【傻瓜攻略】深度学习之从入门到放弃

从研究生进来之后,一直到现在已经进行了一年关于DP的学习,写篇文章总结一下我蹒跚的学习过程。总结来说是一个从入门学习到几乎想要放弃的过程。顺带列举下面几个坑,希望能帮助一下同样在这条路上行走的旅人们。 1、overfitting这个东西 很…

android异步编程,使用RxAndroid处理异步任务

欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录. Demo Android Rx是响应式编程的意思, 本质是观察者模式, 是以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式. 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. 目前的异步编程方式都会导…

RxAndroid 入门笔记

参考链接: http://gank.io/post/560e15be2dca930e00da1083#toc_10 https://mcxiaoke.gitbooks.io/rxdocs/content/Observables.html http://blog.chengyunfeng.com/?p948 http://www.apkbus.com/blog-705730-62567.html 要了解RxAndroid,必须先要了解RxJava,应…

【Rxandroid】Rxandroid源码解读

目录 1.AndroidSchedulers类的源码 2.RxAndroidPlugins类的源码 3.RxAndroidSechedulersHook类的源码 4.LooperScheduler类的源码 5.HandlerScheduler类的源码 6.BuildConfig类的源码 7.MainThreadSubscription类的源码 总结 将Rxandroid(1.2.1)…

Retrofit + RxAndroid 实践总结

在接入 Retrofit RxAndroid 之前,项目代码中主要存在如下问题: 服务器 API 的定义方式不一致,有的集中定义,有的定义在业务代码中,没有分类不便于维护。Request / Response / API 三者没有对应关系(Reque…

Rxjava3 RxAndroid

文章目录 Rxjava && Rxandroid引用方式 概念流程图代码示例ObservableObservable#subscribeOn(NonNull Scheduler scheduler)Observable#observeOn(NonNull Scheduler scheduler)ObservableSubscribeOnObservableObserveOn本文开头的代码示例等同于如下代码 Schedulers…

RxJava和RxAndroid学习记录

目录 1 概念和说明 1.1 响应式编程 1.2 RxJava 1.3 关于RxJava和RxAndroid 1.4 关于响应式编程和普通编程 2. 基本使用 2.1 基本元素关系图 2.2 代码示例: 2.3 关于subscribe() 2.4 线程调度 2.4.1 线程调度 2.4.2 RxJava内置的常用…

RxAndroid的基础使用

作为一个android开发者,在开发应用的过程中避免不了异步这个问题。android系统为我们提供了Handler这个类帮助我们进行线程间的通信和切换,但是GitHub上也有很多其他非常优秀的开源框架来帮助我们进行异步处理,比如今天学习的RxAndroid。 简…

rxandroid 基础知识

概述 在Android 中, 使用 rxandroid , rxandroid和rxJava的关系是,rxandroid包 依赖rxJava包,在其功能上增加了一些Android特有功能,项目中如果不需要指定rxJava包的版本,只需引入rxandroid包即可,如果需要更改 rxandroid包中默认的rxJava包版本 , 在项目中引入指定的rxJava包即…

RxAndroid使用初探;简洁、优雅、高效

引言 RxAndroid是一个开发库、是一种代码风格、也是一种思维方式。 正如标题所言,RxAndroid的特点是简洁、优雅、高效,它的优点是多线程切换简单、数据变换容易、代码简洁可读性好、第三方支持丰富易于开发;缺点是学习成本较高、出错难以排查。 用途与优势 起源 RxAndroid…

RxAndroid的学习和研究

1.什么是RxAndroid RxAndroid的含义为响应式编程,Rx含义是响应式编程,其本质就是观察者模式,以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式。    Observables发出一系列事件&a…

linux基本功系列之dd命令实战

文章目录 前言🚀🚀🚀一. dd 命令介绍二. 语法格式及常用选项三. 参考案例3.1 创建指定大小的文件3.2 清空磁盘数据3.3 给磁盘做备份还原3.4 把光盘拷贝到root下3.5 内存不足的处理方法 四. 文中出现的概念解释swapon命令介绍4.2 /dev/zero 介…

Linux系统中dd命令用法详解

命令介绍: Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 参数介绍 if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。of …

dd 命令详解

dd命令是Linux/Unix下的一个很常见的文件拷贝工具。 我们先列下dd命名的常用的参数,再详细分析: bsBYTES read and write up to BYTES bytes at a time cbsBYTES convert BYTES bytes at a time convCONVS convert the file as pe…