sql语句怎么设置字段的默认值

时间:2022-05-12 02:04:46
--学生表
Create table stu(
  stuId varchar2(30) primary key,
  stuName varchar2(50) not null,
  stuSex char(2) check(stuSex in('男','女')) default '男', --oracle中无默认属性?
  stuAge Number(2) check(stuAge >1),
  stuJg varchar2(30), --籍贯
  stuDept varchar2(40)
);

创建表时,想设置学生性别的默认属性为男,但是如下所写,建表时提示缺少右括号,把default '男'注释掉就可以顺利建表了?请问这是为什么?求高手指教。。。灰常感谢(*^__^*) 。。。

10 个解决方案

#1


你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')

#2


不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
 CREATE TABLE "DSL"."EASYBUY_USER" 
   ( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE, 
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE, 
"EU_BIRTHDAY" DATE, 
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE), 
"EU_MONEY" NUMBER(10,2) DEFAULT 0, 
"EU_EMAIL" VARCHAR2(30 BYTE), 
"EU_MOBILE" NUMBER(11,0), 
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE, 
 CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE, 
 CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "YANGMENG_SPACE"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "YANGMENG_SPACE" ;
可以参考一下

#3


引用 1 楼 thesumous 的回复:
你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')


你好,谢谢您的回答,我也想过这种情况,代码如下:可是pl/sql还是报错“缺少右括号”,您知道这其中的原因吗?



Create table stu(
  stuId varchar2(30) primary key,
  stuName varchar2(50) not null,
  stuSex char(2) check(stuSex in('男','女')) default('男'), --oracle中无默认属性?
  stuAge Number(2) check(stuAge >1),
  stuJg varchar2(30), --籍贯
  stuDept varchar2(40)
);

#4


引用 2 楼 yangmeng_3331 的回复:
不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
 CREATE TABLE "DSL"."EASYBUY_USER" 
  ( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT……


你好,谢谢你的回复,我按照你的把性别的长度改为3了,还是不行,纠结了。。。

#5


default 在check之前就OK了

#6


 alter table stu
  modify (stusex char(2) default '男');
添加默认约束

#7


引用 6 楼 cherry5022 的回复:
alter table stu
  modify (stusex char(2) default '男');
添加默认约束


是建表后添加的一个默认约束

#8


引用 5 楼 awusoft 的回复:
default 在check之前就OK了


谢谢你的回答,我也刚参照2楼的办法像您说的那样子把default'男'放到了check的前面,果然可以了。。不知道这是为什么呢?我是用的pl/sql

#9


这个是语法吧

#10


引用 7 楼 cherry5022 的回复:
引用 6 楼 cherry5022 的回复:
alter table stu
modify (stusex char(2) default '男');
添加默认约束


是建表后添加的一个默认约束


谢谢你的回答,我也按照您的建议测试了,最后表结构如下:证明也可以的。。长见识了,,谢谢各位好心的朋友。。。
SQL> desc stu;
Name    Type         Nullable Default Comments 
------- ------------ -------- ------- -------- 
STUID   VARCHAR2(30)                           
STUNAME VARCHAR2(50)                           
STUSEX  CHAR(2)      Y        '男'             
STUAGE  NUMBER(2)    Y                         
STUJG   VARCHAR2(30) Y                         
STUDEPT VARCHAR2(40) Y   

#1


你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')

#2


不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
 CREATE TABLE "DSL"."EASYBUY_USER" 
   ( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE, 
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE, 
"EU_BIRTHDAY" DATE, 
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE), 
"EU_MONEY" NUMBER(10,2) DEFAULT 0, 
"EU_EMAIL" VARCHAR2(30 BYTE), 
"EU_MOBILE" NUMBER(11,0), 
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE, 
 CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE, 
 CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "YANGMENG_SPACE"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "YANGMENG_SPACE" ;
可以参考一下

#3


引用 1 楼 thesumous 的回复:
你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')


你好,谢谢您的回答,我也想过这种情况,代码如下:可是pl/sql还是报错“缺少右括号”,您知道这其中的原因吗?



Create table stu(
  stuId varchar2(30) primary key,
  stuName varchar2(50) not null,
  stuSex char(2) check(stuSex in('男','女')) default('男'), --oracle中无默认属性?
  stuAge Number(2) check(stuAge >1),
  stuJg varchar2(30), --籍贯
  stuDept varchar2(40)
);

#4


引用 2 楼 yangmeng_3331 的回复:
不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
 CREATE TABLE "DSL"."EASYBUY_USER" 
  ( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT……


你好,谢谢你的回复,我按照你的把性别的长度改为3了,还是不行,纠结了。。。

#5


default 在check之前就OK了

#6


 alter table stu
  modify (stusex char(2) default '男');
添加默认约束

#7


引用 6 楼 cherry5022 的回复:
alter table stu
  modify (stusex char(2) default '男');
添加默认约束


是建表后添加的一个默认约束

#8


引用 5 楼 awusoft 的回复:
default 在check之前就OK了


谢谢你的回答,我也刚参照2楼的办法像您说的那样子把default'男'放到了check的前面,果然可以了。。不知道这是为什么呢?我是用的pl/sql

#9


这个是语法吧

#10


引用 7 楼 cherry5022 的回复:
引用 6 楼 cherry5022 的回复:
alter table stu
modify (stusex char(2) default '男');
添加默认约束


是建表后添加的一个默认约束


谢谢你的回答,我也按照您的建议测试了,最后表结构如下:证明也可以的。。长见识了,,谢谢各位好心的朋友。。。
SQL> desc stu;
Name    Type         Nullable Default Comments 
------- ------------ -------- ------- -------- 
STUID   VARCHAR2(30)                           
STUNAME VARCHAR2(50)                           
STUSEX  CHAR(2)      Y        '男'             
STUAGE  NUMBER(2)    Y                         
STUJG   VARCHAR2(30) Y                         
STUDEPT VARCHAR2(40) Y