PostgreSQL标准建表语句分享
如下所示:
--建表 CREATETABLEifnotexistspublic.user ( idcharactervarying(32)NOTNULLDEFAULTsys_guid(), namecharactervarying(100)NOTNULL, gendercharactervarying(50)NOTNULL, agecharactervarying(10)NOTNULL, id_nocharactervarying(50)NOTNULL, created_datetimestampwithouttimezoneDEFAULTnow(), created_bycharactervarying(100)DEFAULT'system', updated_datetimestampwithouttimezoneDEFAULTnow(), update_bycharactervarying(100)DEFAULT'system', CONSTRAINTuser_pkeyPRIMARYKEY(id) )with(oids=false); --注释 COMMENTONTABLEpublic.userIS'用户表'; COMMENTONCOLUMNpublic.user.idIS'主键'; COMMENTONCOLUMNpublic.user.nameIS'姓名'; COMMENTONCOLUMNpublic.user.genderIS'性别'; COMMENTONCOLUMNpublic.user.ageIS'年龄'; COMMENTONCOLUMNpublic.user.id_noIS'身份证号'; COMMENTONCOLUMNpublic.user.created_dateIS'创建时间'; COMMENTONCOLUMNpublic.user.created_byIS'创建人'; COMMENTONCOLUMNpublic.user.updated_dateIS'更新时间'; COMMENTONCOLUMNpublic.user.update_byIS'更新人'; --主键(如果建表语句里面没添加主键就执行该语句) altertablepublic.user addconstraintuser_pkeyprimarykey(id); --索引或唯一索引 dropindexifexistsuser_name; CREATEINDEXuser_nameONuser(name); dropindexifexistsuser_id_no; CREATEUNIQUEINDEXuser_id_noONuser(id_no); --授权 GRANTALLONTABLEpublic.userTOmydata; GRANTSELECT,UPDATE,INSERT,DELETEONTABLEpublic.userTOmydata_dml; GRANTSELECTONTABLEpublic.userTOmydata_qry;
补充:postgresql基本功能:创建表、新增列、修改列字段名称、某列值自增或循环自增、
根据现有表创建新表:
CREATETABLE"test04"AS(select*fromtestdemo);
修改数据表名:
altertabletable_name(表名)renametonew_table_name(新表名)
新增列字段:
ALTERTABLEtest04ADDgid1_typeinteger;
删除列字段:
ALTERTABLEtest04DROPCOLUMNgid1_type;
修改列字段名称:
altertabletest05RENAME"gid"TO"id";
修改列字段类型:
ALTERTABLEtest05ALTERCOLUMN"gid"TYPEdatatype;
特殊的修改为integer:
altertabletable_name(表名)altercolumn字段名type新字段类型usingto_number(字段名,'9')
更新字段数据:
updatetest05set"gid1_type"=0where("组分类型1"='消防栓')or("组分类型1"='水表')or("组分类型1"='节点');
在postgresql中,设置已存在的某列(num)值自增:
//将表tb按name排序,利用row_number()over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中 createtabletb1as(select*,row_number()over(orderbyname)asrownumfromtb); //根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中 updatetbsetnum=(selecttb1.rownumfromtb1wheretb.name=tb1.name); //判断表tb1的存在并删除表 droptableifexiststb1;
在postgresql中,循环设置已存在的某列(num)值为0-9:
//将表tb按name排序,利用row_number()over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中 createtabletb1as(select*,row_number()over(orderbyname)asrownumfromtb); //根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中,由于为0-9循环自增,则%10 updatetbsetnum=(selecttb1.rownumfromtb1wheretb.name=tb1.name)%10; //判断表tb1的存在并删除表 droptableifexiststb1;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。