mysql comment on table 报错_MySQL报错问题

清空MySQL密码

更改数据库配置文件

# vi/etc/my.cnf

添加 skip-grant-tables

重启数据库

# service mysql restart

# flush privileges;

授权数据库远程访问

进入数据库

# mysql -u root -p

# usemysql

# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION;# flush privileges;

数据库执行报错

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法

set global log_bin_trust_function_creators=TRUE;

添加history 时间记录

export HISTTIMEFORMAT="%F %T `whoami` "

mysql 定时器创建

创建存储过程

CREATE PROCEDURE redpack_num()

BEGIN

UPDATE `sys_config` SET item_val='6' WHERE item='award_day_num';

END

创建定时器事件

create eventifnot exists eventJob

on schedule AT'2018-06-29 10:31:20'on completion PRESERVEdocall redpack_num();

SET GLOBAL event_scheduler= 1; --启动定时器

SET GLOBAL event_scheduler= 0; --停止定时器

ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE;--开启事件

ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE;--关闭事件

SHOW VARIABLES LIKE'%sche%'; -- 查看定时器状态

主从配置mysql

grant all privileges on*.* to 'root'@'%' identified by 'root';

flush privileges;

主服务器10.10.6.169grant replication slave on*.* to 'testuser'@'10.10.6.141' identified by '12345678';

flush privileges;vi /etc/my.cnf

[mysqld]下添加以下参数,若文件中已经存在,则不用添加

server-id=1log-bin=mysql-bin #启动MySQL二进制日志系统,

binlog-do-db=ourneeddb #需要同步的数据库

binlog-ignore-db=mysql #不同步mysql系统数据库,若还有其它不想同步的,继续添加

重启数据库

mysql>show master status;+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 | 107 | bak | mysql |

+------------------+----------+--------------+------------------+导出数据库

flush tables with read lock; #数据库只读锁定命令,防止导出数据库的时候有数据写入

unlock tables; #解除锁定

导出数据库结构及数据:mysqldump-uroot -p ourneeddb > /home/ourneeddb.sql

导出存储过程及函数 :mysqldump-uroot -p -ntd -R ourneeddb >ourneeddb_func.sql

tips:-ntd导出存储过程、-R导出函数

从服务器10.10.6.141[mysqld]下添加以下参数,若文件中已经存在,则不用添加

server-id=2#设置从服务器id,必须于主服务器不同

log-bin=mysql-bin #启动MySQ二进制日志系统

replicate-do-db=ourneeddb #需要同步的数据库名

replicate-ignore-db=mysql #不同步mysql系统数据库

[root@localhost~ ]/etc/init.d/mysqld restart #重启服务

use mysql

stop slave;

change master to

master_host='10.10.6.169',

master_user='testuser',

master_password='12345678',

master_log_file='mysql-bin.000008',

master_log_pos=107; #log_file与log_pos是主服务器master状态下的File与Position

start slave;

show slave statusG;

Unknown character set: 'utf8mb4'错误

高版本sql到低版本的报错,修改utf8mb4 为utf8

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column

版本问题

`update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

ON UPDATE CURRENT_TIMESTAMP 可以删除

MySql access denied for user

1.以为是没授权。结果添加了也报错,发现是密码错误

使用

GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

FLUSH PRIVILEGES;

5.7 以后修改密码

update mysql.user set authentication_string=password('root') where user='root';

5.7以前修改密码

update mysql.user set password=password('root') where user='root';

免密码登录

/usr/bin/mysqld_safe --skip-grant-tables  然后开启另一个窗口操作

使用后如果提示操作无法执行先刷新权限FLUSH PRIVILEGES;

数据库备份

mysqldump -u root -p lianxun_coupon > /data/lianxun_coupon.sql

执行如下sql报错:ORA-00902: invalid datatype ORA-06512: at line 9 Help: https://docs.oracle.com/error-help/db/ora-00902/ -- 如果表存在,先删除 DECLARE table_exists NUMBER; BEGIN SELECT COUNT(*) INTO table_exists FROM user_tables WHERE table_name = 'BASE_FORM_DESIGN_CONFIG'; IF table_exists > 0 THEN EXECUTE IMMEDIATE 'DROP TABLE BASE_FORM_DESIGN_CONFIG'; END IF; EXECUTE IMMEDIATE 'CREATE TABLE BASE_FORM_DESIGN_CONFIG( ID BIGINT NOT NULL, CREATED_TIME DATE, CREATED_BY BIGINT, UPDATED_TIME DATE, UPDATED_BY BIGINT, NAME VARCHAR(255) NOT NULL, ROUTE_URL VARCHAR(255) NOT NULL, CONFIG_JSON BLOB NOT NULL, CONSTRAINT PK_BASE_FORM_DESIGN_CONFIG PRIMARY KEY (ID) )'; EXECUTE IMMEDIATE 'COMMENT ON TABLE BASE_FORM_DESIGN_CONFIG IS ''表单设计配置表'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.ID IS ''主键'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CREATED_TIME IS ''创建时间'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CREATED_BY IS ''创建人'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.UPDATED_TIME IS ''更新时间'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.UPDATED_BY IS ''更新人'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.NAME IS ''名称'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.ROUTE_URL IS ''路由路径'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CONFIG_JSON IS ''配置信息'''; END; /
最新发布
04-08
<think>嗯,用户遇到了执行SQL脚本时报错ORA-00902: invalid datatype,还有ORA-06512在第九行的问题。首先,我需要仔细看看用户提供的代码,找出可能的问题所在。 用户提供的PL/SQL代码块中,首先是检查表是否存在,然后删除,接着创建表,最后添加注释。错误提示是无效的数据类型,这通常是因为在创建表的时候使用了Oracle不支持的类型。 看代码中的CREATE TABLE语句,字段ID用的是BIGINT,CREATED_BY和UPDATED_BY也是BIGINT。但Oracle中其实没有BIGINT这个数据类型。BIGINT是其他数据库比如MySQL中的类型,对应Oracle应该是NUMBER(19)或者直接用NUMBER,因为Oracle的NUMBER可以指定精度。所以这里需要将BIGINT替换为NUMBER。 另外,BLOB类型在Oracle中是支持的,但有时候需要注意是否在正确的上下文中使用,不过这里可能没问题。检查其他字段的数据类型,VARCHAR2(255)是正确的,Oracle推荐使用VARCHAR2而不是VARCHAR,但VARCHAR也能用,不过最好建议用户用VARCHAR2。 然后看看错误发生的行号是第9行。代码中的DECLARE块后面跟着BEGIN,接着是SELECT语句,然后是IF语句,删除表,之后是创建表的EXECUTE IMMEDIATE。第9行可能对应到创建表的语句行。这时候,如果BIGINT不被识别,就会在第9行报错,也就是创建表的语句部分。 另外,用户可能没有正确使用匿名块的语法。在PL/SQL中,每个EXECUTE IMMEDIATE应该在BEGIN和END之间,并且每个语句需要用分号结束。检查用户的代码结构,发现创建表之后,所有的注释语句都在END;之前,但是可能没有正确地将它们包含在BEGIN...END块中,或者在每个EXECUTE IMMEDIATE后面缺少分号?不过用户代码中的结构看起来是每个EXECUTE IMMEDIATE都正确使用了,但需要确认是否所有的动态SQL语句都被包含在BEGIN和END之间。 另外,检查是否有拼写错误或语法错误,比如字符串中的引号是否正确转义。用户使用了两个单引号来表示注释中的单引号,这是正确的。例如,COMMENT ON TABLE ... IS ''表单设计配置表'',这部分是正确的转义。 总结可能的问题点: 1. 使用了Oracle不支持的数据类型BIGINT,应改为NUMBER。 2. VARCHAR建议改为VARCHAR2。 3. 检查匿名块的语法是否正确,所有EXECUTE IMMEDIATE是否在BEGIN和END之间,并且每个语句以分号结束。 4. 确认表名的大小写是否正确,Oracle默认是存储为大写,但创建时如果用了双引号则区分大小写,但用户这里表名都是大写的,应该没问题。 接下来需要验证这些可能性。比如将BIGINT替换为NUMBER(19),然后测试脚本是否运行正常。同时,建议用户使用VARCHAR2代替VARCHAR,虽然这不是导致当前错误的原因,但可以提升代码的规范性。 另外,查看ORA-06512错误,这通常是指出错误发生的具体行号,但用户提供的代码中第9行可能对应到创建表的EXECUTE IMMEDIATE语句,所以问题应该出在那里。而ORA-00902无效数据类型,进一步支持了BIGINT是问题所在。 所以,最终的解决方案应该是替换BIGINT为NUMBER,并调整其他可能的数据类型建议。同时,检查整个PL/SQL块的结构是否正确,确保所有动态SQL都在BEGIN和END之间,并且每个语句正确结束。</think>以下是针对 `ORA-00902: invalid datatype` 错误的分析和解决方案: --- ### **错误原因分析** 1. **无效数据类型 `BIGINT`** Oracle 不直接支持 `BIGINT` 数据类型。在 Oracle 中,整数类型应使用 `NUMBER`,例如: - `BIGINT` → `NUMBER(19)`(对应 64 位整数) - `INT` → `NUMBER(10)` 2. **语法作用域问题** 在 `BEGIN...END` 块中,所有 `EXECUTE IMMEDIATE` 语句需在 `BEGIN` 和 `END` 之间,且每个语句需以分号结束。 --- ### **修复后的 SQL 脚本** ```sql DECLARE table_exists NUMBER; BEGIN -- 检查表是否存在 SELECT COUNT(*) INTO table_exists FROM user_tables WHERE table_name = 'BASE_FORM_DESIGN_CONFIG'; IF table_exists > 0 THEN EXECUTE IMMEDIATE 'DROP TABLE BASE_FORM_DESIGN_CONFIG'; END IF; -- 创建表(修正数据类型) EXECUTE IMMEDIATE ' CREATE TABLE BASE_FORM_DESIGN_CONFIG ( ID NUMBER(19) NOT NULL, CREATED_TIME DATE, CREATED_BY NUMBER(19), UPDATED_TIME DATE, UPDATED_BY NUMBER(19), NAME VARCHAR2(255) NOT NULL, ROUTE_URL VARCHAR2(255) NOT NULL, CONFIG_JSON BLOB NOT NULL, CONSTRAINT PK_BASE_FORM_DESIGN_CONFIG PRIMARY KEY (ID) ) '; -- 添加注释 EXECUTE IMMEDIATE 'COMMENT ON TABLE BASE_FORM_DESIGN_CONFIG IS ''表单设计配置表'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.ID IS ''主键'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CREATED_TIME IS ''创建时间'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CREATED_BY IS ''创建人'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.UPDATED_TIME IS ''更新时间'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.UPDATED_BY IS ''更新人'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.NAME IS ''名称'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.ROUTE_URL IS ''路由路径'''; EXECUTE IMMEDIATE 'COMMENT ON COLUMN BASE_FORM_DESIGN_CONFIG.CONFIG_JSON IS ''配置信息'''; END; / ``` --- ### **关键修改说明** 1. **数据类型修正** - 将 `BIGINT` 替换为 `NUMBER(19)` - 将 `VARCHAR` 替换为 `VARCHAR2`(Oracle 推荐使用 `VARCHAR2`) 2. **作用域和语法优化** - 确保所有 `EXECUTE IMMEDIATE` 在 `BEGIN...END` 块内 - 统一格式化动态 SQL 字符串 --- ### **其他建议** 1. **Oracle 数据类型对照** | 通用类型 | Oracle 对应类型 | |-----------|----------------| | BIGINT | `NUMBER(19)` | | BLOB | `BLOB` | | VARCHAR | `VARCHAR2(n)` | 2. **错误调试方法** - 使用 `DBMS_OUTPUT.PUT_LINE` 输出中间变量 - 分步执行:先单独执行 `CREATE TABLE`,再逐步添加注释 3. **权限检查** 确保当前用户有权限操作表空间和创建 BLOB 类型字段。 如果仍有问题,可提供完整的错误堆栈或表结构设计进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值