Closed cbqqkcel closed 1 year ago
是你的客户端连了名为 lealone 的数据库,然后在里面建表增加新字段吧, lealone 这个数据库是系统数据库,我原本的设计是不给普通用户在里面建表的,只给系统使用,系统设计的表是不会修改表结构的,所以就没有 table_alter_history 这个系统表,有了这个表新加字段时就在里面登记,然后现有的老记录读这个表就会构建出新的字段值,如果没有这个表,当使用 select * from t 时,字段变成3个了,但是原有的老记录还是两个字段,所以就抛异常了。
总之,业务系统不建议直接在 lealone 这个系统数据库里面存放业务的任何数据,这个 lealone 数据库只给系统用,以后随时会改。
你用 create database xxx 创建新的数据库即可,新创建的数据库默认用户名也是 root 密码也是空。
lealone 这个系统数据库里的 root 用户拥有最高权限,所以在实际项目中只用它执行 create database 语句即可, create database 语句创建的是应用数据库,只有 lealone 这个系统数据库里的 root 用户有这个权限。
每个应用数据库有自己的一套用户,默认会创建它的 root 用户,应用数据库的 root 用户在应用数据库中有最高权限,但是它依然无法访问其他应用数据库。
我确实是用的 lealone 但是最好提醒一下,要不然后面还会有人问得。
mysql 自带了四个数据库:sys、mysql、information schema、performance schema。才发现前两个可以在里面创建用户自己的表的。lealone 也自带了一个叫 lealone 的系统数据库,为了方便测试,也允许用户在里面建表,但是吧总觉得这样子不合适,哪天数据库厂商加了新表跟用户的表名冲突了怎么办。
所以我对这个设计也还没有完全满意,最后可能加个开关,测试阶段把 lealone 这个系统数据库当成普通的数据库使用,上线之后关掉,不允许用户在里面添加任何东西了。
我找到合适的办法了,目前在 lealone 里每个 database 都自带两个 schema:public 和 information,我只要让 information 不给应用添加任何东西即可,public 是应用的默认 schema。这样在测试阶段应用不用创建 database 直接用 lealone 这个系统 database 也是安全的。
@qqcbqqkcel 问题已经修复,感谢报告问题。
alter table DEFINE add FORM_VALUE CLOB;
执行添加字段,查询数据报
把数据全部删除后再添加是可以的。