文章目录

  • 一、基于数据表基础命令的高级操作
  • 1、复制格式-like
  • 2、克隆表数据-create
  • 3、删除表内的所有数据-delete
  • 二、MySQL中6种常见的约束
  • 1、外键约束
  • 三、数据库用户管理
  • 1、新建用户
  • 2、查看用户信息
  • 3、重命名指定
  • 4、删除用户
  • 5、修改密码
  • 6、忘记root密码的解决办法
  • 7、数据库提权



一、基于数据表基础命令的高级操作

1、复制格式-like

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

实例

create table zzz like zw;
insert into zzz select * from zw;
select * from zzz;

mysql如何跨数据源查询 mysql跨数据库操作_mysql如何跨数据源查询

2、克隆表数据-create

CREATE TABLE test02 (SELECT * from test) ;	#复制test表数据到test02中
show create table test02\G		#获取数据表的表结构、索引等信息;

实例:

create table test (select * from zw);
show create table test\G; 	##看下图,实际复制的创建表的SQL语句
select * from test;

mysql如何跨数据源查询 mysql跨数据库操作_外键约束_02


复制完表结构之后可以使用alter table更改需要的信息

alter table test change id id_new int(11) primary key;

mysql如何跨数据源查询 mysql跨数据库操作_mysql如何跨数据源查询_03


show create table zw\G; ##查询数据包zw的结构

mysql如何跨数据源查询 mysql跨数据库操作_主键_04

3、删除表内的所有数据-delete

方法一:

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

mysql如何跨数据源查询 mysql跨数据库操作_主键_05


方法二:

truncate table info ;

TRUNCATE清空表后,没有返回被删除的条目;不会删除表的结构

TRUNCATE工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录

mysql如何跨数据源查询 mysql跨数据库操作_外键约束_06

二、MySQL中6种常见的约束

  • 主键约束(primary key)
  • 外键约束(foreign key)
  • 非空约束(not null)
  • 唯一性约束(unique [key| index] );index:索引
  • 默认值约束(default)
  • 自增约束(auto increment)

1、外键约束

  1. 外键的定义
    如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键
  2. 创建外键约束作用
    误删,修改时可以保证数据的完整性和一致性。
  3. 主键表和外键表的理解
  • 以公共关键字作主键的表为主键表(父表、主表)
  • 以公共关键字作外键的表为外键表(从表、外表)
  1. 注意
  • 与外键关联的主表的字段必须设置为主键。要求从表不能是临时表
  • 主表外键字段和从表的字段具备相同的数据类型、字符长度和约束。
  1. 创建外键
创建主表test04,更改test04表结构,增加一个pk_hobid主键的约束
create table test04 (hobid int(4),hobname varchar(50));
创建从表test05,对于test05增加外键约束,外键约束引用的是test04表内的bhbid
create table test05 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));
为主表test04添加一个主键约束。主键名建议以"PK_”开头。
alter table test04 add constraint PK_hobid primary key(hobid);
	constraint:约束
为从表test05表添加外键,并将test05表的hobid字段和test04表的hobid字段建立外键关联;外键名建议以"FK”开头。
alter table test05 add constraint fk_hobid foreign key(hobid) references test04(hobid);
	references:引用
show create table test05;	##可以使用查询表语句结构命令查看外键关联

mysql如何跨数据源查询 mysql跨数据库操作_mysql_07

desc test04;
desc test05;

mysql如何跨数据源查询 mysql跨数据库操作_主键_08

#插入新的数据记录时,要先主表再从表
insert into test04 values(2,'liu');
insert into test05 values(2,'zhangsan',20,2);

mysql如何跨数据源查询 mysql跨数据库操作_mysql_09

#删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表
drop tables test05;
drop tables test04;

mysql如何跨数据源查询 mysql跨数据库操作_mysql_10

show create table test05;		##查看外键约束
删除外键约束:要删除外键约束字段先删除外键约束,再删除外键名
alter table test05 drop foreign key fk_hobid;
alter table test05 drop key fk_hobid;

mysql如何跨数据源查询 mysql跨数据库操作_mysql_11

三、数据库用户管理

1、新建用户

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

参数:

  • ‘用户名’:指定将创建的用户名
  • ‘来源地址key fk_’: 指定新创建的用户可在哪些主机上登录,可使用IP地址(192.168.35.40)、 网段(192.168.35.0/24)、主机名的形式(locahost),本地用户可用localhost,允许任意主机登录,可用通配符号%
  • ‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;
  • 若使用加密密码,需要先使用[SELECT PASSWORD(’ 密码’);]获取密文——>再在语句中添PASSWORD’密文’;
  • 若省略“IDENTIFIED BY" 部分,则用户的密码将为空(不建议使用)

实例:

create user 'user1'@'localhost' identified by '12345';	 ##创建用户user1,来自本机,添加密码12345
密文形式:
select password('1234');		##获取密文
create user 'lf'@'localhost' identified by password '*A4B6157319038724E3560894F7F932C8886EBFCF';

mysql如何跨数据源查询 mysql跨数据库操作_数据库_12

2、查看用户信息

查看用户信息
创建后的用户保存在mysql数据库的user表里
USE mysql ;
select user,authentication_string,host from user;

mysql如何跨数据源查询 mysql跨数据库操作_主键_13

3、重命名指定

rename user ‘lili’@‘localhots’ to ‘zhangsan’@‘localhost’;

mysql如何跨数据源查询 mysql跨数据库操作_外键约束_14

4、删除用户

drop user ‘user1’@‘localhost’;

mysql如何跨数据源查询 mysql跨数据库操作_主键_15

5、修改密码

  • 修改当前登录用户的密码
    set password = password(‘123’);
  • 修改其他用户密码
    set password for ‘lf’@‘localhost’ = password(‘123’);

6、忘记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('123') where user='root';
flush privileges;		##刷新权限表内的权限
quit
mysql -uroot -p123
PS:最后再把/etc/my.cnf配置文件里的skip-grant-tables删除,并重启mysq1服务

mysql如何跨数据源查询 mysql跨数据库操作_数据库_16

7、数据库提权

  • 授予权限
    grant:提权之后会在mysql数据库内创建一个用户
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址'  [ IDENTIFIED BY '密码'] ;
	注:grant all on *.*:代表提权所有表

字段解释:
①权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”, 使用"all"表示所有权限,可授权执行任何操作
②数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符""。
例如,使用“kgc.
“表示授权操作的对象为kgc数据库中的所有表
③’用户名@来源地址’:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.kgc. com”、“192. 168.226.%”等。
④IDENTIFIEDBY:用于设置用户连接数据库时所使用的密码字符串。
在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空。
实例

grant select on zyt.* to 'lf'@'localhost' identified by '123';##允许用户lf在本地查询zyt数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。
flush privileges;		##刷新权限
quit		##退出

mysql如何跨数据源查询 mysql跨数据库操作_数据库_17


mysql如何跨数据源查询 mysql跨数据库操作_mysql_18

mysql -ulf -p123;		##登录
show tables;
select * from zw;
show grants for 'lf'@'localhost'; 		查看权限

mysql如何跨数据源查询 mysql跨数据库操作_主键_19


mysql如何跨数据源查询 mysql跨数据库操作_mysql如何跨数据源查询_20

  • 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
REVOKE ALL ON *.* FROM ' lisi'@'%';
SHOW GRANTS FOR 'lisi '@'各' ;
#USAGE权限只能用于数据库登陆,不能执行任何操作;
USAGE权限不能被回收,即REVOKE不能删除用户。
flush privileges;

mysql如何跨数据源查询 mysql跨数据库操作_主键_21