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

MySQL高级管理

目录

一、指定主键的一种方式

1.1高级操作

 1.2数据表高级操作,克隆表

1.2.1 克隆表名

 1.2.2备份表内容

 1.3复制表

1.4删除指令

方法一:

方法二:

删除速度

二、创建临时表

 三、MySQL中6种常见的约束

3.1创建主表

3.2创建从表

 3.3为主表test01添加一个主键约束。主键名建议以"PK_”开头。

 3.4为从表test02表添加外键,并将test02表的hobid字段和test04表的hobid字段建立外键关联。 外键名建议以"FK_”开头。

3.5使用查询表语句结构命令查看外键关联

3.6 插入新的数据记录时,要先主表再从表

3.7删数数据记录时,要先从表再主表

3.8如果要删除外键约束字段先删除外键约束,再删除外键名

四、数据库用户管理

4.1、新建用户

 4.1查看用户信息

 4.3重命名指定

4.4 删除用户

​编辑4.5 修改当前密码

4.6修改其他用户密码

 4.7忘记root密码

五、数据库用户授权


一、指定主键的一种方式

1.1高级操作

use school;
create table if not exists info (
 #指定主键的第二种方式
id int(4) zerofill primary key auto_increment, 
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));

#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建

#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001

#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增; 自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且 添加失败也会自动递增一次

#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键

#not null:表示此字段不允许为NULL

 1.2数据表高级操作,克隆表

create table yyy2 like yyy;    #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into yyy2 select * from yyy;      #备份内容

克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test02 (SELECT * from test);   #复制test 表数据到test02中

show create table test02\G    #获取数据表的表结构、索引等信息
SELECT * from test02;

1.2.1 克隆表名

create table 【table_bak】 like 【table】;    
#复制格式,通过LIKE方法,复制table表结构生成table_bak表

 1.2.2备份表内容

insert into 【table_bak】 select * from 【table】;      #备份内容

 1.3复制表

CREATE TABLE test02 (SELECT * from test);   #复制test 表数据到test02中

show create table test02\G    #获取数据表的表结构、索引等信息
SELECT * from test02;

 

1.4删除指令

清空表,删除表内的所有数据

方法一:

delete from 表名;

#DELETE清空表后,返回的结果内有删除的记录条目; DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除 所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。

方法二:

truncate table 表名;

#TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立, 因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后, ID会从1开始重新记录

删除速度

drop> truncate > delete

安全性 delete 最好

二、创建临时表

临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出 后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除 临时表。

PS:无法创建外键

CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[, ...]
[, PRIMARY KEY (主键名)]);
create temporary table 表名 (
id int(4) zerofill primary key auto_ increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
insert into xxx values (1,'zhangsan',123456,'running') ;
select * from test03;
show tables;
quit
select * from 表名;

场景

1.可做测试环境使用 比如删除大量数据的时候,可以创建临时表 做一个复杂删除

2、需求要今天所有的注册王者荣耀的新号码

 三、MySQL中6种常见的约束

主键约束(primary key)

外键约束(foreign key)

非空约束(not null)

唯一性约束(unique [key|index])

默认值约束(default)

自增约束(auto_increment)

外键的定义:如果同一个属性字段x在表一中是主键,而在表二中不是主键, 则字段x称为表二的外键。

创建外键约束作用(误删,修改),保证数据的完整性和一致性。

主键表和外键表的理解 

1)以公共关键字作主键的表为主键表(父表、主表)

(2)以公共关键字作外键的表为外键表(从表、外表)

注意:与外键关联的主表的字段必须设置为主键。

要求从表不能是临时表, 主表外键字段和从表的字段具备相同的数据类型、字符长度和约束。

3.1创建主表

create table test01 (hobid int(4),hobname varchar(50));

3.2创建从表

create table test02 (id int(4) primary key auto_increment,
name varchar(10),age int(3),hobid int(4)) ;

 3.3为主表test01添加一个主键约束。主键名建议以"PK_”开头。

alter table test01 add constraint PK_hobid primary key (hobid);

 3.4为从表test02表添加外键,并将test02表的hobid字段和test04表的hobid字段建立外键关联。 外键名建议以"FK_”开头。

alter table test05 add constraint FK_hob foreign key (hobid) references 
test01 (hobid);

3.5使用查询表语句结构命令查看外键关联

show create table test02;


desc test01;
desc test02;

3.6 插入新的数据记录时,要先主表再从表

insert into test01 values(1,'runing');
insert into test02 values(1,'zhangsan',18,1);

3.7删数数据记录时,要先从表再主表

drop tables test01;
drop tables test02;

3.8如果要删除外键约束字段先删除外键约束,再删除外键名

show create table test02;
alter table test02 drop foreign key FK_hob;
alter table test02 drop key FK_hob;
desc test02;

四、数据库用户管理

4.1、新建用户

CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];

 '用户名':指定将创建的用户名.

'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用

localhost,允许任意主机登录 可用通配符% 

‘’密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密; 若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文'; 若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

CREATE USER 'zhang'@'localhost' IDENTIFIED BY '123456';
SELECT PASSWORD('abc123');
CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

 4.1查看用户信息

创建后的用户保存在mysql 数据库的user表里

USE mysql;
SELECT User,authentication_string,Host from user;

 4.3重命名指定

RENAME USER 'zhang'@'root' TO 'user1'@'localhost';

4.4 删除用户

DROP USER 'user1'@'localhost' ;

4.5 修改当前密码

SET PASSWORD = PASSWORD('abc123');

4.6修改其他用户密码

SET PASSWORD FOR 'user2'@'localhost' = PASSWORD('abc123T');

 4.7忘记root密码

忘记root密码的解决办法

修改/etc/my.cnf 配置文件,

免密登陆mysql

vim /etc/my.cnf

[mysqld] skip-grant-tables #添加,使登录mysql不使用授权表

systemctl restart mysqld

mysql #直接登录

然后使用SQL语句修改密码

UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';

FLUSH PRIVILEGES;

quit mysql -u root -pabc123

PS:最后再把/etc/my.cnf 配置文件里的skip-grant-tables 删除,并重启mysql服务

五、数据库用户授权

授予权限

grant 提权

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];

grant all privileges on . to 'taotao'@'%' identified by '123456';

#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select, insert, update”。使用"all"表示所有权限,可授权执行任何操作。

#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符""。 例如,使用“kgc."表示授权操作的对象为school数据库中的所有表。

#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.xyw.com"、“192. 168.80.%”等。

#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。 在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空。

#允许用户zhangsan在本地查询school数据库中所有表的数据记录, 但禁止查询其他数据库中的表的记录。 GRANT select ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';

#允许用户lisi在所有终端远程连接mysql,并拥有所有权限。 GRANT ALL [PRIVILEGES] ON . TO 'lisi'@'%' IDENTIFIED BY '123456';

flush privileges; #刷新权限

quit

mysql -u zhangsan -pabc123 use xyw; show tables; . select * from yyy;

查看权限

mysql -u root -pabc123 SHOW GRANTS FOR 用户名@来源地址;

SHOW GRANTS FOR 'lisi'@'%';

撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;

REVOKE ALL ON . FROM 'lisi'@'%';

SHOW GRANTS FOR 'lisi'@'%'; #USAGE权限只能用于数据库登陆,不能执行任何操作; USAGE权限不能被回收,即REVOKE不能删除用户。 flush privileges;


http://www.kler.cn/a/38021.html

相关文章:

  • vue3-03筛选任务
  • golang关于成员变量使用:=
  • vue 打印html <iframe>标签(内容打印)超详细
  • MySQL-概述-数据模型SQL简介
  • mysql修改密码
  • 四个按键控制led的四种变化(按键控制led)(附源码)
  • 苹果APP安装包ipa如何安装在手机上
  • H3C-Cloud Lab实验-PPPoE实验
  • SpringBoot使用Redis作为缓存器缓存数据的操作步骤以及避坑方案
  • Mac环境下安装nginx并本地部署项目
  • Pytorch深度强化学习1-3:策略评估与贝尔曼期望方程详细推导
  • Day6---二叉树基础(上)
  • (一)Qt下实现多个海康工业相机内触发采集回调取流显示
  • Spring MVC文件上传
  • 编写Pthreads程序实现直方图统计
  • Java设计模式之创建型-原型模式(UML类图+案例分析)
  • Ansible 自动化运维工具(完善版)
  • 让白嫖来的阿里云服务器来跑jupyter
  • Flutter ValueNotifier 监听数据变化
  • 论文阅读 HighlightMe: Detecting Highlights from Human-Centric Videos