如何编写一个mysql数据库脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写一个mysql数据库脚本相关的知识,希望对你有一定的参考价值。

1、首先,选中一个数据库world,为了防止破坏其他的数据库表,这里新建一张数据库表t_people_info,如下图所示。

2、创建t_people_info数据库表,可以查看下表结构,使用SQL语句或直接点击进行查看表结构。

3、接着,在world数据库找到”事件“菜单项,鼠标右键”创建事件...“,如下图所示,输入事件名称,单击”创建“。

4、就会生成insert_data事件,如下图所示。

5、接着,编写insert_data事件,每10秒钟向t_people_info插入一条数据。

6、最后查看事件的状态,调用事件运行成功。

参考技术A 导出正式服务器的数据库和测试服务器数据库,并按照指定格式命名。

打开Beyond Compare软件,如图,选择文本比较,进入到文本比较主界面之后 ,如图选择要比较的sql文件,然后,软件会呈现出如图数据库结构的不同之处。

即使在比较出两个数据库的结构不同之后,对于sql语句的小白来说,很难写出升级数据库的升级脚本,下面我们将讲解如何利用mysql workbench来帮你写sql。
首先,在本地数据库创建test和release数据库,创建步骤如图所示。然后,将第二步导出的数据库分别导入到新建的数据库,接下来就可以对release数据库动手了。

下面以增加数据库表的一个字段为例,讲解sql语句的生成。由图中的7个步骤,便可以得到对一个表增加一个字段的sql语句,对表字段的增删改,对表内容的增删改操作,删除表操作类似可得。下面讲如何得到新建一个表的sql语句。

如图,便可得到创建表的语句。

上述的sql语句的集合便是数据库生成脚本,脚本通常是在workbench里面编辑查看和执行的,几个基本按钮的使用如图。

执行完上述sql脚本之后,正式服务器的数据库和测试服务器的数据库结构除了主键自增值,host差异之外,其余内容应全部相同,如果不是,则调整脚本内容,直至两个数据库的结构相同为止。

此时的数据库升级脚本仍为数据库升级暂时脚本,临时脚本需交由项目负责人审核检查之后,按照:工程名+版本+时间+正式+数据库升级脚本.sql保存,并上传svn,用于新版本发布。本回答被提问者采纳

如何在整个 MySQL 脚本上假设一个表前缀?

【中文标题】如何在整个 MySQL 脚本上假设一个表前缀?【英文标题】:How to assume a table prefix on a entire MySQL script? 【发布时间】:2013-02-27 01:08:10 【问题描述】:

我有一个脚本要在我的数据库中运行。 但问题是这个脚本假设表没有前缀并且所有数据库都有前缀(我们称之为prefix_)。

有没有命令或者方法让 MySQL 尝试运行

INSERT INTO prefix_mytable ...

而不是

INSERT INTO mytable...

对于脚本中的所有 sql 查询(UPDATE、INSERT 和 DELETE)?

【问题讨论】:

不,您的脚本必须考虑到这一点。 MySQL 只知道它拥有的表名(前缀) Michael,如果我们可以在 mysql 中使用一些内部选项,例如 ASSUME_GLOBAL_PREFIX 并将其设置为 prefix_,这应该可以工作。但是有这样的选择吗? =/ 我的意思是我在文档中遇到过的 MySQL 中没有这样的选项。我希望有人在下面的答案中证明我错了,因为我同意这会很有用。如果你告诉我们你是如何运行脚本的,也许有人会有一个向导破解建议。 我需要运行一个用于 magento 翻译的脚本(额外的包)。但是问题,正如我所说,脚本没有找到表,因为我托管安装的服务器在表上放置了前缀...... 我认为你需要修改脚本。 【参考方案1】:

MySQL 无法按照您所描述的方式自动为表添加前缀。 @MichaelBerkowski 是正确的。

我能建议的最好的方法是创建第二个具有可更新视图的数据库,使用不带前缀的名称作为前缀表名的前端。

这是一个例子:

mysql> CREATE DATABASE test;
mysql> CREATE TABLE test.prefix_mytable (id INT PRIMARY KEY, x VARCHAR(20));
mysql> CREATE DATABASE test2;
mysql> CREATE VIEW test2.mytable AS SELECT * FROM test.prefix_mytable;

现在您可以使用不带前缀的名称插入:

mysql> INSERT INTO test2.mytable (id, x) VALUES (123, 'abc');

并验证数据是否已插入到您的原始表中:

mysql> SELECT * FROM test.prefix_mytable;

完成此操作后,您可以针对数据库 test2 运行 SQL 脚本,所有 INSERT 都应该可以正常访问您的原始表。

如果您有很多表需要为其创建视图,您可以自动创建 CREATE VIEW 语句:

mysql> SELECT CONCAT('CREATE VIEW test2.', REPLACE(TABLE_NAME, 'prefix_', ''), 
  ' AS SELECT * FROM test.', TABLE_NAME, ';') AS _sql 
  FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_SCHEMA='test' AND TABLE_NAME LIKE 'prefix\_%';

【讨论】:

有效。疯狂,但有效。 @MichaelBerkowski,哈哈!谢谢!每个问题都是可以解决的——这只是一个人必须跳过多少圈的问题。 :-) 有趣的解决方案。但它看起来像是一个糟糕的 MySQL 限制,如果我们有一个名为 prefix 的内部变量,这可能非常容易^^ @GarouDan,你能说出任何其他支持这个想法的 RDBMS 产品吗?【参考方案2】:

这是将 WordPress 表前缀从 wp_ 替换为不同的指南,像这样您可以更新任何 mysql 表。 How to rename WordPress tables prefix?

【讨论】:

请尝试阅读此***.com/help/deleted-answers,以进一步了解如何回答。即:“没有从根本上回答问题的答案”:仅是指向外部网站的链接

以上是关于如何编写一个mysql数据库脚本的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库,如何在登录mysql之后执行操作系统上的SQL脚本?

如何导出数据库文件?

如何利用loadrunner做mysql压力测试

如何在 WordPress 插件安装中创建 MySql 用户自定义函数?

如何用shell脚本实现mysql数据库的操作

脚本中如何"优雅"避免MySQL登录提示信息