文档解释
Error number: MY-013234; Symbol: ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION; SQLSTATE: HY000
Message: Statement violates GTID consistency: ALTER TABLE … ADD COLUMN .. with expression as DEFAULT.
以内
MySQL错误号MY-013234 (Symbol:ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION & SQLSTATE: HY000)指示在使用GTID复制时,MySQL 服务器 上的一些表更改不允许(是不安全的) 。
错误说明:
MY-013234 (Symbol: ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION & SQLSTATE: HY000)错误指出,在使用GTID复制的情况下,试图进行的更改包括增加一个列并且为它指定默认表达式是不安全的。(为此类更改使用复制忽略)普通表更改无论是否使用复制,都不起作用。
常见案例
这个错误发生在当MySQL服务器正在使用GTID复制作为复制方法时,当用户尝试添加新列,同时指定默认值表达式时。例如,如果用户执行以下查询,就可能会发生此错误:
ALTER TABLE tbl_name ADD COLUMN new_column INTEGER DEFAULT (select count(*) from other_tbl);
解决办法:
1. 检查复制细节,确保MySQL服务器使用的是“半同步复制”或“异步复制”,而不是GTID复制,因为GTID复制会阻止执行类似查询的更改;
2. 改变复制方法和使用复制忽视,例如,将“ignore_table”参数设置为“replicate-wild-ignore-table”即可;

3. 将新列添加为无默认值且不为空的属性,然后再使用“UPDATE”语句将新列设置为其默认值;
4. 将更改拆分为两步操作,将新列添加为无默认值且不为空的属性,然后在子查询中使用“ALTER TABLE”语句将新列的默认值设置为子查询的结果。
香港美国云服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
C#中的DataGrid怎样执行查询\添加\修改,并保存到数据库?
你点击GRIDVIEW右上角的那个小三角,然后点编辑列,在弹出的窗口中添加一个叫做COMMANDFILE的列,下这个列下面有一个叫做“编辑、更新、去消”它是有来修改一列内容的。 还有一个叫做“删除”的,这个不用我说是做什么的了吧。 要想添加一列有点儿麻烦,这个要你自己写,不过你可新添加一个列,放上个BUTTON,然后让它打开一个DetailsView进行数据添加。 也是一个不错的选择啊。 补存:你可把DetailsView放到一个新的页面中,那在添加数据的按钮就写连接这个页面的代码就行了,如果你想在一个页面内显示的话,你可以写上DetailsView显示的代码,=true;当然这个控件在你打开网页是隐藏的。
oracle10g里怎么样重命名表名,列名
ALTERTABLE表名renamecolumn列名to新列名/*重命名列名*/ALTERTABLE表名renameto新表名/*重命名表名*/
PL/SQL里 execute immediate的用法 谁给解释下
在ORACLE的PL/SQL里:EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。 -- 使用技巧1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分.如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF cursors.3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.4. 在Oracle手册中,未详细覆盖这些功能。 下面的例子展示了所有用到Execute immediate的可能方面.希望能给你带来方便.5. 对于Forms开发者,当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能 IMMEDIATE -- 用法例子1. 在PL/SQL运行DDL语句beginexecute immediate set role all;end;2. 给动态语句传值(USING 子句)declarel_depnam varchar2(20) := testing;l_loc varchar2(10) := Dubai;beginexecute immediate INSERT into dept values (:1, :2, :3)using 50, l_depnam, l_loc;commit;end;3. 从动态语句检索值(INTO子句)declarel_cnt varchar2(20);beginexecute immediate select count(1) from empinto l_cnt;dbms__line(l_cnt);end;4. 动态调用例程.例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定declarel_routinvarchar2(100) := _rowcnt;l_tblnamvarchar2(20) := emp;l_cnt number;l_statusvarchar2(200);beginexecute immediate begin || l_routin || (:2, :3, :4); end;using in l_tblnam, out l_cnt, in out l_status; if l_status != OK then dbms__line(error);end if;end;5. 将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量declaretype empdtlrec is record (empno number(4), ename varchar2(20), deptno number(2));empdtl empdtlrec;beginexecute immediate select empno, ename, deptno || from emp where empno = 7934into empdtl;end;6. 传递并检索值子句用在USING子句前declarel_dept pls_integer := 20;l_namvarchar2(20);l_locvarchar2(20);beginexecute immediate select dname, loc from dept where deptno = :1into l_nam, l_locusing l_dept ;end;7. 多行查询选项.对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾_salpls_integer := 2000;beginexecute immediate insert into temp(empno, ename) || select empno, ename from emp || where sal > :1using l_sal;commit;end;对于处理动态语句,EXECUTE IMMEDIATE 比以前可能用到的更容易并且更高效.当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.
发表评论