
GBase 8a数据库集群,目前不支持字段的定义修改,除了varchar类型可以增加长度,其它的类型或属性均不可以,需要重建一个字段过渡一下。
varchar类型增加长度
请一定保留原有的附加属性,包括not null, default 等。否则change时会报错。单独修改注释等,请用modify功能。
gbase>desc t2
+-------+-------------+------+-----+---------+-------+
| Field | Type| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id| int(11) | YES | | NULL| |
| name | varchar(20) | YES | | NULL| |
+-------+-------------+------+-----+---------+-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase>alter table t2 change name name varchar(30)
Query OK, 0 rows affected, 1 warning (Elapsed: 00:00:00.98)
Records: 0 Duplicates: 0 Warnings: 0
gbase>desc t2
+-------+-------------+------+-----+---------+-------+
| Field | Type| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id| int(11) | YES | | NULL| |
| name | varchar(30) | YES | | NULL| |
+-------+-------------+------+-----+---------+-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase>
其它类型变动
其它类型只有先建一个新的字段,然后把数据update过去,然后把老的删除,把新的change成老的字段名。
如下例子,把value bigint, 改成 value int.
gbase>desc t1
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id| int(11)| YES | MUL | NULL| |
| value | bigint(20) | YES | | NULL| |
| birth | datetime | YES | | NULL| |
+-------+------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>alter table t1 add column value2 int after value
Query OK, 4 rows affected (Elapsed: 00:00:00.65)
Records: 4 Duplicates: 4 Warnings: 0
gbase>desc t1
+--------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| id | int(11)| YES | MUL | NULL| |
| value | bigint(20) | YES | | NULL| |
| value2 | int(11)| YES | | NULL| |
| birth | datetime | YES | | NULL| |
+--------+------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.00)
gbase>update t1 set value2=value
Query OK, 4 rows affected (Elapsed: 00:00:00.28)
Rows matched: 4 Changed: 4 Warnings: 0
gbase>alter table t1 drop value
Query OK, 4 rows affected (Elapsed: 00:00:00.42)
Records: 4 Duplicates: 4 Warnings: 0
gbase>desc t1
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| id | int(11) | YES | MUL | NULL| |
| value2 | int(11) | YES | | NULL| |
| birth | datetime | YES | | NULL| |
+--------+----------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>alter table t1 change value2 value int
Query OK, 0 rows affected (Elapsed: 00:00:00.21)
Records: 0 Duplicates: 0 Warnings: 0
gbase>desc t1
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id| int(11) | YES | MUL | NULL| |
| value | int(11) | YES | | NULL| |
| birth | datetime | YES | | NULL| |
+-------+----------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.01)
本文的功能经常用到,虽然系统可以修改字段类型,但还是建议在设计阶段控制好,特别是避免从高精度,高长度更改为低精度,低长度的情况。 特别是varchar并不是实际占用空间。
方法如下:
例如:
create table student(
Sno int identity(1,1) primary key,
Sname varchar(100)
)
这样我们的Sno字段就可以实现自增了,第一个参数是标识种子(就是开始的值),第二个参数是标识增值(每次增加多少)
这里我们开始为1,每次增加1
如果做插入的话,则:
insert into student values('李四')
注意values里面不要写自增字段名的值,因为数据库会自动帮你生成。
例如第一行为 1 小明
insert into student values('李四')
变为 1 小明
2 李四
扩展资料
SQL SERVER几种数据迁移
使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。
当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文,默认创建字段名也是中文,这将给后面数据更新 *** 作带来麻烦,所以最好还是以有意义的英文字段名。把数据导入后,再通过执行语句,把数据插入/更新到业务表。
从SQLServer2005开始,可以直接在SSMS上查询出来的结果复制,然后粘贴到Excel上,对于少量数据来说,是非常快速方便的,需要注意的是长数字可能会变成科学记数法的形式,提前在Excel上指定列的格式为文本即可。
导入的话,ctrl + c 复制Excel上的数据,然后在选择相关表,编辑数据,把数据直接粘贴上去即可。但是不建议直接粘贴到业务表(如果表是空白没有数据,并且字段顺序对应,可以这样 *** 作),而是建议先粘贴到一个新建的中间表中,然后再通过语句,把数据插入/更新到业务表。
这种方法的导出导入,适合于少量的数据,如5000行以内的记录,大于5000行以上就不建议了,速度较慢,如果数据过大,还一定成功。
参考资料
百度百科——SQL
select *from base_bb,base_aa
----
以上语句是对两表没有连接条件的情况
只要加上两表连接的条件,只要连接条件是1对1的关系,就实现你的要求
如果你找不到两表的1对1的关系,只能人为地添加一id自增列作为连接条件再连接
例如
--把base_aa添加自增列id再把结果保存进#t1
select id=IDENTITY(int,1,1),*
into #t1
from base_aa
--把base_bb添加自增列id再把结果保存进#t1
select id=IDENTITY(int,1,1),*
into #t2
from base_bb
--以两表的id列为key连接两表
--这里会比最终效果多出两个多余id列,你只要这里列举你需要显示的列就行
select *
from #t1 a inner join #t2 b
on #t1.id = #t2.id
--删除临时表
drop table #t1
drop table #t2
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)