数据库概念和sql语句+库表管理操作+数据库用户管理

news2024/11/22 16:37:42

一、数据库的概念:

进入数据库的奇妙世界:mysql -u root -p123456

数据库是一个系统,是一个人机系统。由硬件、OS操作系统、数据库、DBMS和数据库的 用户共同组成。

用户时通过DBMS(各种数据库的软件)来对数据库进行操作。

数据:数字信息:属性,对一系列对象的具体属性的描述集合

数据库:数据库就是用来组织(各个数据之间是有关联的,是按照规则组织起来的),存储和管理(对数据的增删改查)数据的仓库

数据库是企业的重要信息资产,在使用数据库时,要注意(查和增无所谓,但是删和改要谨慎)

数据库管理系统(DBMS):实现对数据的有效组织,管理和存取的系统软件——mysql

1、数据库工作流程图:

2、数据库的分类:

关系型数据库:mysql

非关系型数据库:redis、es

关系型数据库:存储数据的结构是一个二维表格

表:行和列

行:记录,用来描述一个对象的信息

列:字段,用来描述对象的一个属性

mysql:中小型的数据并发请求

oracle:高并发大数据量

sql-server

mariaDB

postgresql

关系型数据库中,表中的数据是关联的,表和表之间的数据也是关联起来的

多表关联最多可以关联几张表?

多表关联最多三张表

非关系型数据库:保存数据不是一张二维表格,key——value,键值对来保存数据。

redis:缓存性的数据库

es:索引型数据库

MongoDB:文档型数据库

既然有关联,查询速度相对来说,关系型数据库查询速度更慢一点,非关系型数据库可以支持高并发读写。对海量数据依旧保持着高效率的存储和访问。

二、mysql数据库:

1、mysql数据库的存储引擎:

5.5之前:引擎是MYISAM,不支持事物和外键的存储引擎。适用于读的多,写得少

5.6之后:引擎是innodb,可以支持事务,外键,行级锁定的存储引擎。并且支持高并发性能的应用

事务:在数据库中,一个或者多个操作组成的序列

这些操作要么全部成功,失败一个就是全部不执行。原因是为了确保数据的一致性和完整性

事务的特点:

原子性。数据库的最小最小工作单位,要么全部不执行,只要有一个操作时间,整个执行的序列都会被回滚。完成的操作也会被撤

一致性:事务执行前后,数据库的完整性约束不能被破坏。只有在满足所有的约束条件的情况下,事务才能被提交。

隔离性:事务的执行是互相隔离的,一个事务的执行不能受到其他执行事务的干扰。并发事务之间互相隔离。防止数据不一致的情况发生

持久性:事务一旦提交,他所做的所有修改会被永久的保存在数据库中。即使系统崩溃提交的数据也不会丢失。确保数据库的状态始终处于一致性的状态。确保数据的完整和一致

2、mysql的名词:

数据库:database

表:table  行:row  列:column

索引:index

视图:view

存储过程:procedure

触发器:trigger

用户:user

权限:privilege

3、mysql语句的规范:

在数据库系统中,sql不区分大小写,但是建议大写。语句不区分,但是表名严格区分大小写

sql语句可以单行也可以多行书写,但是默认都以分号;结尾

关键词不能跨行或者简写。

子语句通常位于独立行,便于编辑,提高可读性

不支持双引号,只能用单引号

4、数据库的命名规则:

必须以字母为开头,后面可以包含数字,特殊字符:# _ $

不能使用mysql的保留字来命名表或者数据库:table select

数据库名 表名 用户名称严格区分大小写

5、数据库的字符类型:

int:占4个字节,用来存储整数

char:固定长度的字符串,用来存储定长的字符串

varchar:可变长度的字符类型,存储可变长度的字符串(不是无限制的随便写)

float(m,d):单精度浮点,存储浮点数。m表示总位数,d表示小数位

double:浮点类型(m,d):双精度浮点数,存储浮点数,m也是总位数,d表示小数位

decimal(5,2):用于存储固定精度的小数,其中5,表示总位数,2表示小数位。

text:用于存储大文本数据,文档,或者长字符串

image:二进制存储图像,图片,多媒体

data:存储日期:YYYY-MM-DD

datatime:存储日期 YYYY-MM-DD HH:MM:SS

timestamp:和datatime格式一致YYYY-MM-DD HH:MM:SS  可以自动更新为当前时间戳

6、char varchar的区别(重点)

char:无论你是否定义了值,他都会占用固定长度的字节大小(你写了长度8,无论你写几个(不能大于8)他都是8个字符)

varchar:在保存时,varchar长度14,实际长度是5,那么占用情况就是5+1个隐藏符最后占用的字符是6个

varchar比char节省磁盘空间,但是varchar读写速度比char慢

varchar和char都是字符串类型:一定要用单引号引起来

三、数据库管理

1、sql语句:

DDL:create、drop、alter

DML:操纵语句,对数据进行管理

update、insert into、delete、truncate

DQL:查询语句 select

DCL:权限控制语句 grant、revoke

2、DDL:数据定义语言,用于创建数据库的对象,创建库、表、索引

CREATE:创建

DROP:删除

ALTER:修改

show global variables like 'port';

数据库当前使用的端口查看:3306

show databases;

查看当前有多少库

use 库名;

使用指定数据库

show  tables;

查询指定库中有哪些表

如何查看表的结构:

describe 表名;

纵向查看表:

describe 表名\G;  缩写:desc  表名\G;

创建库:

create database 库名;

在库中创建表:
create table 表名 表内容属性...

create table test (id int(4) not null,name varchar(12) not null,sroce decimal(5,2),passwd char(48),primary key(id));

创建表:

id int(4) not null

第一列:名字是id,字符类型是int ,(4)字符长度是4,not null不能为空

name varchar(12) not null

第二列:名字是name,字符类型varchar, (12)字符长度是12,not null不能为空

sroce decimal(5,2)

第三列:名字是sroce,字符类型是decimal , (5,2)总长度是5,小数点后面最多2位,可以为空

passwd char(48)

第四列:名字是passwd,字符类型是char ,(48)字符长度最多为48,可以为空

primary key(id)

primary key 主键 (id)将id作为主键,唯一标识

主键用于唯一标识表中的每一条数据。不能重复, 不能为空。

create table test (id int(4) not null,name varchar(12) not null,sroce decimal(5,2),passwd char(48),primary key(id));

删除表:

drop tables 表名;

删除库:

drop database 库名;

类型 数据类型 值是否能为空 键值 默认值是否能为空 扩展信息

1、null和空格的区别:

两个概念

null什么都没有,对象没有任何描述信息

空格:也是字符

鉴别是空格还是null

3、DML:数据操作语言,对表中的数据进行管理(对表内容)

select查询

update更新

insert添加

delete删除(对表内容进行删除操作)

往表中插入数据:

方法一:指明插入的对象和插入的值

insert into表名(类型) values(对应的值)

insert into test (id,name,sroce,passwd) values(1,'刘备',97,'111');

方法二:直接按表格对象的顺序插入值

insert into test values(2,'关羽',99,'222');

对对象的密码进行加密:

password ('xxx')

对表中内容进行更新修改:

update 表名 set 对象=修改内容 where id

where id 是因为id是主键,唯一标识,不会重复查询没有歧义

如何在表中删除数据:

4、DQL:查询数据记录(重点)

指定查看行:

limit 3:指定查看前三行

limit 2,4:指定从第3行开始往下查看4行

去重查看:

select distinct 对象 from 表名;

指定对象去重

多条件去重查询:

select distinct name,sroce from test;

修改表名:alter

alter table test rename demo;

修改表的结构:

插入新的对象:

alter table 表名 add 对象信息;

修改列对象名:

alter table test change birth birthday datetime;

删除整列:

alter table test drop birthday;

修改列的数据类型:

5、DCL:数据控制语言

用于设置或者更改数据库用户或者用户的权限

GRANT:赋权

REVOKE:取消权限

6、TCL:事务控制语句,管理数据库当中的事务

commit:确认提交事务

ROLLBACK:回滚,事务提交之后无法回滚

savepoint:保存点,可以回滚

四、扩展语句:


create table if not exists ky32 (

id int(4) zerofill primary key auto_increment,

name varchar(10) not null,

cradid int(18) unique key,

hobby varchar (50)

);

if not exists ky32:ky32这个表不存在才会创建

zerofill:自动填充位置1——0001

auto_incremant:表示该字段可以自增长,默认从1开始,每条记录会自动的自增1

primary key:当前表的主键,主键只能有一个,而且唯一,而且不能为空

unique key:唯一性的约束。跟主键不同,可以为空

1、表格复制:

通过like语法可以直接复制ky32的表结构。只是复制表的结构,不能复制表的结构

create table test1 like ky32;

将表的内容复制:必须两张表的结构一致

把ky32表的数据复制到test,两个表的数据结构要一致

insert into test select * from ky32;

完整复制一张表:

create table test2 (select * from ky32);

创建一张表,test2,数据内容和表的结构和ky32一样

2、如何删除表内的所有数据:清空表

delete、truncate、drop

delete清空表:delete删除时一行一行删除,如果表中有自增长列,清空所有记录之后,再出添加内容,会从原来的记录之后继续自增写入

delete from test2;

truncate清空:表的数据和结构会全部清空,但是表还在,工作中推荐使用

清空表的数据。而且会把表结构重新建立。速度比dalete块,推荐

truncate table test1;

drop删除整个表:直接把表删除了

drop table test1;

3、创建临时表:

临时表一般用于调试,而且临时表创建之后在表的目录中是不显示的,连接退出之后临时表会被销毁,而且这个临时表无法创建外键

create temporary table test1 (

id int(4) primary key,

name char(10),

sex char(2)

);

可以插入内容,断开连接之后消失

五、mysql的约束方式:(常见的六种)

1、主键约束,用于唯一标识表中的每一行,主键列的值必须是唯一而且不能为空,一个表只能有一个主键

2、外键约束:用于建立表与表之间的关系,一般是和另一张表的主键关联。保证数据引用的完整性。一个表可以有多个外键

3、非空约束:not null,如果定义是 not null,那么必须要有一个值,空格也算。

4、唯一性约束:unique key确保列中的所有值都是唯一的,类似于主键,但是可以为空,而且一个表可以有多个唯一约束。

5、默认值约束:default,在插入表数据时,如果没有定义值,会提供一个默认值。

6、自增约束:每行自动生成一个唯一标识

1、外键关联:

创建主表:

create table student (

card_id int(18) not null primary key,

stu_name varchar(12) not null,

stu_email varchar(255) unique

);

创建从表:

create table class (

stud_id int(11) auto_increment primary key,

address varchar(50) default '地址不详',

card_id int (18) not null,

foreign key (card_id) references student (card_id)

);

show create table class;

查看表的关联关系

2、主表和从表:

插入数据:先插入主表,再插入从表

删除数据:先删主表,再删除从表

3、删除外键过程: 

先show create table test;查看表的关联信息

再在信息中找到外键名和索引名

先删除外键名和索引名

再删除外键

alter table class drop foreign key class_ibfk_1;

删除外键

alter table class drop index card_id;

删除索引

4、删除主键过程:

删除主键要先改变自增类型

删除主键:因为是一个自增约束的主键,要先改变它的数据类型,解除自增约束,之后才能删除主键——删除主键要先改变自增类型

先改自增约束:

alter table class modify stud_id int(12);

再删除主键:

alter table class drop primary key;

在对主键约束中,约束条件有先后顺序:
id int(4) zerofill PRIMARY KEY auto_increment,

MySQL外键只能关联主键或唯一键。

5、练习:

定义一个需求:

两张表:

主表:company

从表:depart

company:

  1. work_id 非空,主键,int(4),不满四位要补齐
  2. name 非空,char(5)
  3. sex 非空,char(2)

depart

  1. de_id 非空,主键,int(6),不满补齐6位
  2. work_id 要和主表的work_id 关联为外键
  3. address 可为空,但是有一个默认值
  4. phone 非空,不能重复

需求:

主表:school

  1. de_id int(4) 不满四位要补齐,自增长,主键
  2. name varchar(15) not null
  3. email varchar(45) 可空,默认值'bdqnkgc@126.com'

从表:class

  1. id 自增长主键 int(6)
  2. class_name 非空
  3. de_id 主键关联
  4. address 可空 默认 地址不详
  5. phone int(11) 非空,不能重复

创建完之后删除外键关联,删除从表的主键,重新定义主键为phone

先创建主表school:

create table school (

de_id int(4) zerofill primary key auto_increment,

name varchar(15) not null,

email varchar(45) default 'bdqnkgc@126.com'

);

再创建从表class:

create table class (

id int(6) primary key auto_increment,

class_name varchar(25) not null,

de_id int(4) zerofill,

address varchar(200) default '地址不详',

phone int(11) unique,

foreign key(de_id) references school(de_id)

);

检测:先插入主表再插入从表

看de_id是否对应

删除外键关联,删除从表的主键,重新定义主键为phone:

desc class;

查看从表的主键名,索引名:

alter table class drop FOREIGN key class_ibfk_1;

删除关联主键

alter table class drop index de_id;

删除关联索引

alter table class MODIFY id int(5);

更改主键之前,要先先更改自增约束

改主键对象的数据类型

alter table class drop primary key;

删除主键

alter table class add primary key(phone);

将phone的类型改为主键

desc class;

六、数据库用户的管理:

创建用户

修改用户的权限

删除用户

grant赋权语句最好在终端执行

不能免密登录:vim /etc/my.cnf修改将免密登录删除    skip-grant-tables

1、创建用户:create user

create user 'koeda'@'localhost' identified by '123456';

koeda表示用户名

localhost表示新建的用户koeda可以在哪些主机上登录。既可以使用IP地址,也可以使用网段,也可以使用主机名

'koeda'@'20.0.0.20' 指定ip登录

'koeda'@'20.0.0.0/24' 指定网段登录

'koeda'@'%' 百分号表示所,可以从任何设备登录

2、用户赋权:(要在终端里面写)

赋权koeda对所有库进行所有操作权限:

grant all privileges on *.* to 'koeda'@'localhost' identified by '123456';

grant 赋权的开头语句

all privileges 赋予所有权限

on *.* 对所有库都有操作权限

若 on test.* 表示只能对指定的库test进行操作

to 'koeda'@'localhost' 赋权给哪个用户,要和创建用户赋权的格式一致

identified by '123456' 使用哪个密码进行登录。创建用户的时候可以省略

赋权完刷新:

flush privileges;

查看用户权限:

show grants for 'koeda'@'localhost';

赋完权之后只能在终端登录

mysql -h 20.0.0.31 -u test1 -p

3、练习:

创建一个用户test1

只允许该用户从20.0.0.32终端登录

只能对kgc库有权限,其他的库一律不行

先创建一个用户,只允许该用户从20.0.0.32登录:

create user 'test1'@'20.0.0.32' IDENTIFIED by '123456';

修改权限,只能对kgc库权限,其他库一律不行

grant all PRIVILEGES on kgc.* to 'koeda'@'20.0.0.32' IDENTIFIED by '123456';

4、删除用户的权限

删除权限revoke

revoke all privileges on kgc.* from 'test1'@'20.0.0.31';

权限匹配只能和创建的时候一致,

创建的时候是什么,删的时候就是什么

创建的时候是kgc.*,删的时候不能是*.*,只能值kgc.*

如何对权限进行控制:

grant select on kgc.* to 'test1'@'20.0.0.31' identified by '123456';

只能查数据库

设置之后检测,看看能不能增删改

如何给一个用户赋予多个权限:

grant select,insert,drop on kgc.* to 'test1'@'20.0.0.31' identified by '123456';

revoke drop,update on kgc.* from 'test1'@'20.0.0.31';

移除所有权限的时候,可以全部移除,不需要一个个删除,不需要和创建时一致

revoke all on kgc.* from 'test1'@'20.0.0.31';

5、如何给用户重命名:

rename user 'test1'@'20.0.0.31' to 'test2'@'20.0.0.31';

6、删除用户:

drop user 'test2'@'20.0.0.31';

7、用户修改密码:

修改当前登录用户的密码:(要在终端执行)

set password=password('abc123')

修改其他用户的密码:

set password for 'test1'@'20.0.0.31' = passwoed('abc123');

8、问题:忘记了root密码。如何恢复?

vim /etc/my.cnf添加免密登录    skip-grant-tables

登录过程回车即可

select User,authentication_string,Host from user;查看密码

修改root用户的密码

update user set authentication_string=password('123456') where Host='localhost' and User='root';

flush privileges;

改密码要加密改

select User,authentication_string,Host from user;查看密码

用户权限管理:

create user '用户名'@'20.0.0.21' identified by '123456';

grant all / select,insert,drop 赋权

revoke all / select,insert,drop 删除权限要和赋权格式一致

rename

drop user

set passwd=passwd('123456')

set password for '用户名'@'localhost'=password('abc123');

show grants for '用户名'@'localhost';

查看权限

flush privileges;

刷新权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东数据平台:2023年9月京东智能家居行业数据分析

鲸参谋监测的京东平台9月份智能家居市场销售数据已出炉! 9月份,智能家居市场销售额有小幅上涨。根据鲸参谋电商数据分析平台的相关数据显示,今年9月,京东平台智能家居的销量为37万,销售额将近8300万,同比增…

I.MX6U设置I2C复用和电气特性函数IOMUXC_SetPinMux和IOMUXC_SetPinConfig解析

1. 在【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 第627页中有提到bsp_ap3216c.c中IO初始化,配置 I2C IO属性函数如下: unsigned char ap3216c_init(void) { IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL, 1); IOMUXC_SetPinMux(IOMUXC_UART4_…

找工作时如何快速了解一家公司?看他们招聘就知道

每一位求职者,都希望自己能够对感兴趣或者符合自己期望条件的公司有一个全面而深入的了解。如何在找工作或者找实习的时候,快速地了解一家公司,那就看看他们的招聘吧! 1、从招聘信息洞察公司格局 有些公司的招聘信息中&#xf…

java 网上点餐系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 网上点餐系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0&#…

2行代码将你的本地服务暴露在公网!

内网穿透 作为一个开发者,内网穿透的概念你一定听过。 内网穿透(Intranet Penetration)是指借助一定的技术手段,将处于私有网络(内网)中的主机或服务器暴露给外部网络(公网)用户&a…

【好玩的开源项目】Docker下部署HomeAssistant智能家居系统

【好玩的开源项目】Docker下部署HomeAssistant智能家居系统 一、HomeAssistant介绍1.1 HomeAssistant简介1.2 HomeAssistant特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、…

分享一下怎么做小程序营销活动

小程序营销活动已经成为现代营销的必备利器,它能够帮助企业提高品牌知名度、促进产品销售,以及加强与用户的互动。然而,要想成功地策划和执行一个小程序营销活动,需要精心设计和全面规划。本文将为您介绍小程序营销活动的策划和执…

谷歌浏览器中input输入框默认填充时的背景色设置

问题如下: 解决办法如下(通过css3): input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active {-webkit-transition-delay: 111111s;-webkit-transition: color 11111s…

iOS报错命名空间“std”中的“unary_function”

刚刚将我的 Xcode 升级到 15.0,突然它开始在 RCT_Folly 中出现以下错误 No template named unary_function in namespace std; did you mean __unary_function?我尝试删除缓存数据和派生数据并清理构建。也尝试删除 pod 和 node_modules。但没有任何帮助。 于是我…

回文日期题解

【问题描述】 2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同&am…

Unity之NetCode多人网络游戏联机对战教程(5)--ConnectionData与MemoryPack

文章目录 前言使用场景ConnectionData数据序列化处理MemoryPack安装MemoryPack日志输出后话学习链接 前言 ConnectionData 与 ConnectionApproval 是搭配使用的,在ConnectionApproval系列讲解中涉及的几个使用场景将会在这里讲解 使用场景 使用密码加入房间 玩家选…

极致分离卷积块 XSepConv 学习笔记 (附代码)

论文地址:https://arxiv.org/pdf/2002.12046.pdf 代码地址: 1.是什么? XSepConv是由清华大学提出的,它是一种新型的卷积神经网络模块,可以在保持计算量不变的情况下提高模型的性能。XSepConv的特点是将深度卷积和逐…

group by用法和SQL执行顺序详解

一、group by 1、作用 数据分组 -> 组内数据处理(求组内的最大值、最小值、平均值等) 2、案例: Order Details(订单详情表) 表结构:每个Order,都对应着好几个不同的Product,每…

尚硅谷大数据项目《在线教育之实时数仓》笔记005

视频地址:尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P031 P032 P033 P034 P035 P036 P037 P038 P039 P040 第9章 数仓开发之DWD层 P031 DWD层设计要点: (1)DWD层的设计依…

Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型

了解如何使用 TensorFlow 和 Azure 机器学习 Visual Studio Code 扩展训练图像分类模型来识别手写数字。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员…

免费(daoban)gpt,同时去除广告

一. 内容简介 免费(daoban)gpt,同时去除广告,https://chat18.aichatos.xyz/,也可当gpt用,就是有点广告,大家也可以支持一下 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 …

超详细!!!顺序表的实现

顺链表的实现 顺序表的概念及结构概念顺序表与数组的区别顺序表的结构 动态顺序表的实现头文件 "SeqList.h"定义结构体 SL 源文件顺列表的实现初始化顺列表 void SLInit(SL* ps)检查顺列表空间大小 void SLCheckCapacity(SL* ps)尾插数据 void SLPushBack(SL* ps,SLD…

java强转实验

不存在继承关系时,强转会出现编译时异常。即:无法将两个不同类型的对象做转换 当存在继承关系时,强转正常。备注:同名字段,类型一致,可以强转替代getset。同名字段,类型不一致,强转会…

网络安全之XSS漏洞

一. 引言 Cross-Site Scripting(跨站脚本攻击)简称XSS,是一种代码注入攻击。XSS 攻击通常指的是利用网页的漏洞,攻击者通过巧妙的方法注入 XSS 代码到网页,因为浏览器无法分辨哪些脚本是可信的,导致 XSS 脚…

matlab求解时变系统的Riccati矩阵微分方程

对于代数Riccati方程的求解网上能找到很多的资源,matlab也有成熟的函数,但是对于时变系统的Riccati矩阵微分方程,能找到的资料还比较少。 一、求解代数Riccati方程 可以在网上找到很多资料,如 https://blog.csdn.net/m0_622999…