mysql 如何在用户下建表,在数据库实例中可以建表,但是我在自己建的用户下却看不到。我以前使用oracle。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 如何在用户下建表,在数据库实例中可以建表,但是我在自己建的用户下却看不到。我以前使用oracle。相关的知识,希望对你有一定的参考价值。

mysql可能和oracle不一样是吗?oracle是在用户下建表,但是mysql我没有建用户只要进入到实例下就可以建表,但是在用户下却看不到,我试着建立了一个用户,权限是all,然后我用这个用户在mysql-query-browser下登陆,登陆进去了,但是在实例上建表的时候提示我不可以建表,我迷茫了,还有如何在mysql command line client下切换用户,请各位大侠指点,我用的是windows系统不是linux谢谢了。

MySQL 的 体系结构 与 Oracle 不一样

Oracle , 是一个 数据库, 一套 服务。 不同的用户, 有 不同的 方案。
也就是 假如你的数据库 有 2个 用户 A, B 他们都创建了一个 test 表
那么
可以通过 SELECT * FROM A.test 和 SELECT * FROM B.test 来 访问这 些表。

MySQL , 是 一套 服务下面, 可以创建多个数据库。
MySQL 下面, 通过
CREATE DATABASE 数据库名;
来创建数据库
并使用
USE 数据库名;
来在不同的数据库之间切换。
但是 用户 和 数据库 不直接关联。
也就是你的 MySQL 服务里面, 可以有 2个 数据库 A, B。 下面都有 test 表。
那么
可以通过 SELECT * FROM A.test 和 SELECT * FROM B.test 来 访问这 些表。

假如 登陆进去了,但是在实例上建表的时候提示我不可以建表
有可能是 你还没有 选择数据库
或者是 你没有权限。追问

但是我建立的表在新建用户下看不到可怎么办啊,我想要用java连接mysql,用户看不见表什么也干不了啊,求您给个答案吧,郁闷死我了。在这个用户下我也建不了表的,我的权限已经给了all了。

追答

因为 MySQL 里面的 用户, 会有一个 机器名的选择。
下面是例子

-- 这个用户, 是通过 本机登录的
mysql> CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'testpassword';
Query OK, 0 rows affected (0.00 sec)

-- 这个用户,是通过其它 机器登录的
mysql> CREATE USER 'test_user'@'%' IDENTIFIED BY 'testpassword';
Query OK, 0 rows affected (0.00 sec)

授权的语句

mysql> GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'localhost'
-> IDENTIFIED BY 'testpassword' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'%';
Query OK, 0 rows affected (0.00 sec)

追问

太谢谢你了,能看见了,我写的语句好像是少了@localhost 呵呵 我明白了,还有最后一个问题,在mysql的command line client下如何切换用户呢?

参考技术A MySQL用phpmyadmin操作吧

创建一个 MYSQL 存储过程以在不同的数据库中创建表

【中文标题】创建一个 MYSQL 存储过程以在不同的数据库中创建表【英文标题】:Create a MYSQL stored proc to create table in a different database 【发布时间】:2020-11-23 17:41:58 【问题描述】:

我正在尝试创建一个可以跨多个数据库使用但不必在所有数据库中复制存储过程的存储过程。

示例:在 BIZ_ADM 中有可以运行的存储过程,并且可以将参数传递给它,从而在另一个数据库 BIZ_OPS 中创建表和视图

CALL CreateNewEntity1 ('KTC_SHARED', 'TEST1', 'SHARED');

分隔符 $$

使用KTC_SHARED$$

如果存在则删除程序CreateNewEntity1$$

CREATE DEFINER=root@192.168.0.% PROCEDURE CreateNewEntity1(IN databaseNameSTR VARCHAR (64), IN entityNameSTR VARCHAR(64), IN extSTR VARCHAR(64))

开始

SET @sqlSTR = CONCAT("CREATE TABLE TBL_", entityNameSTR, "(标准字段等)

如果要在当前数据库中创建,我可以做任何事情,但在尝试在不同的数据库中创建时不起作用。希望这足以清楚地了解我要做什么。

提前感谢您提供的任何帮助。

【问题讨论】:

忘了说,不要跨多个数据库复制,因为这个存储过程会被频繁使用。 【参考方案1】:

从 CLI 窗口复制:

Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE test
Database changed
mysql> CREATE DATABASE test1;
Query OK, 1 row affected (0.15 sec)

mysql> DELIMITER ;;
mysql> CREATE PROCEDURE test1.createtable (IN db VARCHAR(64), IN tb VARCHAR(64))
    -> BEGIN
    -> SET @sql:=CONCAT('CREATE TABLE ', db, '.', tb, '(id INT, val INT);');
    -> PREPARE stmt FROM @sql;
    -> EXECUTE stmt;
    -> DROP PREPARE stmt;
    -> END; ;;
Query OK, 0 rows affected (0.19 sec)

mysql> DELIMITER ;
mysql> SHOW TABLES;
Empty set (0.09 sec)

mysql> CALL test1.createtable('test', 'test');
Query OK, 0 rows affected (0.66 sec)

mysql> SHOW TABLES FROM test;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.11 sec)

mysql>

【讨论】:

Akina,感谢您的回复。为了清楚起见,我希望能够从任何数据库运行存储过程,并让它在我作为参数列出的任何数据库中创建表和视图。您的回复会这样做还是我仍然必须在每个数据库中都有存储过程?谢谢 @dcbk 仔细看 - SP 不是在当前数据库中创建的。没有什么能阻止将 DB1 设为当前并从 DB2 执行 SP,从而在 DB3 中创建一个表。

以上是关于mysql 如何在用户下建表,在数据库实例中可以建表,但是我在自己建的用户下却看不到。我以前使用oracle。的主要内容,如果未能解决你的问题,请参考以下文章

有关mysql数据库建表问题

mysql中我已经建了表,怎样给指定的字段添加自动增长

Java Web 项目,数据库建表

mysql数据库建库建表实例

(笔记)Mysql实例:建库建表并插入数据2

(笔记)Mysql实例:建库建表并插入数据1