oracle创建表语句怎么写-Oracle 创建表语句写法
猜您喜欢::国内壁挂炉哪个牌子好(国内壁挂炉好品牌) 摸金天师大结局(摸金天师终局) 宜春学院艺术类-宜春艺术学院 天气冷的说说怎么写-冷天说说 苏三起解出自哪里-《西厢记》事件出处 大学生六级成绩查询官网-大学生六级成绩查询网 mq5传感器工作原理(MQ5传感器原理) 云南招生考试(云南招生) 黑果焖鸡用英语怎么说-Black fruit stir-fried chicken 玉环市属于浙江哪个市-玉环市属浙江省玉环县
写表这块儿在 Oracle 里确实挺有意思,有说不清道不明的门道,不像 SQL 那样条条逻辑都明明白白。我要说这事儿,得先从它底下的地基说起,别光盯着那些漂亮的全局别名,那是假象。 表在 Oracle 这种重型数据库里,就像盖楼用的模具,形状大小拍板了楼下能摆多少东西。要是形状不对,哪怕代码写得再花哨,根本存不下数据。核心语法就是 `CREATE TABLE`,但前提是你要搞清楚它的本意。
比如我要建个叫 `sales` 的表,目标就是把销售记录存进去。
这时候别急着写列名,脑子里得先有个草台班子。比方说,我可能得先想清楚这表里到底要存哪几样东西。
比如“订单号”得是个唯一的东西,不能两个订单号重复,否则赶明儿查数据就乱套了。
还有个“状态”字段,得是个布尔值要么数字,撇脱后续做标记。
要是为了后续做分析,我可能还得单独建个索引表,别到时候查询慢了,那尴尬。 创建表的时候,我习惯用 `CREATE TABLE IF NOT EXISTS` 这种写法。
为啥要加 `IF NOT EXISTS`?想象一下,万一这表已经存有了呢?不加的话就得报错,改改名字还得下楼找数据库管理员。加上这个,要是表在,就过;要是在,就报错提醒你可能搞错了。
要是表不存有,那就创建成功,不会报错。
这在实际工作中挺常见,特别是做字典表要么临时测试表的时候。 列的定义才是灵魂所在。别总写 `VARCHAR2` 然后后面跟一堆怪的长度数字,那忒别扭了。Oracle 的难题在于,它的列类型在表定义里实际上是有“长度”概念的,就像 SQL Server 里的 `INT` 和 `BIGINT` 不一样。
故此要是存姓名,就用 `VARCHAR2(50)`,存身份证号就得 `CHAR(15)`,存金额要是小数就得 `FLOAT` 要么 `DECIMAL`。
要是没加长度,Oracle 会默认按 1024 字节要么 4096 字节,这会害得存空间浪费,就连出现字段忒大存不下数据的情况。
比方说,我写个表存个超长的产品 SKU 别名,要是写成了 `VARCHAR2` 没设长度,数据存进去后,长度可能直接爆红,就连把整列变成全 0,要么报错。
这时候就得在 `CREATE` 语句里明确写上 `VARCHAR2(255)` 这种,把空间占住,避免意外。 数据类型选错了,后面全完了。别搞混了 `DATE` 和 `TIMESTAMP`。`DATE` 存的是日期本身,没有工夫戳信息,比如今天 14:30。而 `TIMESTAMP` 存的是工夫戳,甭管是服务端工夫还是客户端工夫,都得带上。
要是日期工夫搞混了,比如写个“订单搞定工夫”,却用了 `DATE` 类型,那工夫就丢失了,只能存一天。赶明儿做报表分析,那数据就断层了。
还有 `NUMBER` 和 `INTEGER` 的区别,前者存小数,后者存整数。别看目前大家都默认用 `NUMBER` 存金额,但要是某些特殊场景需求精准到微秒要么特定精度,就得用 `NUMERIC` 要么 `DECIMAL`。 建表语句的格式实际上挺固定的,但细节拍板成败。表名、列名、类型、长度、默认值,这些都得写清楚。
比如我要建个表,名字叫 `register`,类型是 `NUMBER(10) PRIMARY KEY`,默认值是 `NULL`,再定义个 `username` 字段,类型是 `VARCHAR2(50)`,长度设为 50,默认值也给 `NULL`,这样用户注册进去就不填名字了。别总写 `DEFAULT CURRENT_TIMESTAMP` 这种,要不就是你想记录当前工夫戳,否则默认值留空要么留 `NULL` 让系统自动填充更稳妥。 插入数据这块,一旦表建好了,你就要启动往里面塞东西。别用 `INSERT INTO` 只管写数据,还得顺便提一句,这表有没有自动生成的列,比如主键、序列、触发器。
比如建个用户表,默认有个 `id` 字段,那是从主表 `USER_DATA` 里取 ID 的。
这时候不能乱插,得先 `SELECT` 出一行数据,看看 ID 是不是按顺序递增的,要是跳号了,那自动 ID 就失效了。
还有 `DEFAULT` 列,要是用户没填名字,系统自动填默认值,这个也得在 `INSERT` 里体现,别到时候数据乱了。 测试时候,千万别急着扔进去几万条数据。我得先抓几行,看看格式对不对,有没有空值,有没有数据类型不匹配。
比如我写个 `AGE` 字段,类型是 `NUMBER`,但我直接插了一个字符串 "25",那数据库里就存成了字符串类型的数字了,赶明儿查询年龄都得转成数字才能用。
这时候报错就是 `ORA-01722` 之类的,挺恼人的。
这时候就得一边查报错信息,一边自己琢磨:是不是长度不够?
是不是类型不对?
是不是默认值没填好? 要是表挺大,维护起来就不撇脱。
比如我要建个 `inventory` 表存几千种商品的库存,我可能还得寻思物理字段。
比如把 `quantity` 存为 `NUMBER(12)`,但要是为了减小存量,能够写 `NUMBER(9, 2)` 表示 9 位数字保留两位小数,这样效果好又省空间。
要么用 `BLOB` 存二进制数据,别看慢一点,但灵活性高。 最终,建表完之后,还得寻思索引。别总想着建主键索引,主键对查询实际上帮助不大,反而好办锁表。
要是你时常查某个字段,比如 `order_id` 要么 `customer_name`,那得建个二级索引,别到时候查询慢得像蜗牛一样。别看建索引得消耗空间和工夫,但换来的是性能,这笔账算下来还是挺值的。 总而言之,建表这事儿没那么多银弹。别总追求那一套完美的、教科书式的代码,那才是用来考试时应付的。实际工作中,你得懂 Oracle 的脾气,知道它的弱项在哪儿,如何规避。
比如长度设大点,默认值留空,类型选对,测试数据要全,别搞错一两个细节,整个表就废了。
这种经验之谈,比写代码本身更关键。写表吧,就按刚刚说的,先想清楚表长啥样,再下笔,别让数据库来猜你的意思。
相关标签: