在mysql数据库javabook中创建一表:
create table Course(
  courseId char(5) not null,
  subjectId char(4) not null, 
  courseNumber integer, 
  title varchar(50) not null, 
  numOfCredits integer,
  constraint pkCourse primary key (courseId),
  constraint fkSubjectId foreign key (subjectId) 
    references Subject(subjectId));然后试图向里面加入一组信息(外键条件满足):
insert into course(courseId,subjectId,courseNumber,title,numOfCredits) values(11119,CSCI,1345,Web programming,3);
这时报错,我给上面这条加入语句中的两个值CSCI和web programming加上单引号',如下:
insert into course(courseId,subjectId,courseNumber,title,numOfCredits) values(11119,'CSCI',1345,'Web programming',3);
这条语句执行成功,看到确实往表中加入了这组信息;
执行insert 语句时每个值都要加单引号'吗,可是上面这条语句中的其他三个值11119,1345,3都没加单引号',也执行成功了,11119也是char类型啊,这时为什么呢;
执行别的语句呢,比如select或update,也要给相关值加单引号吗,
比如select * frok course where courseId=11111,这样写可以吗,还是必须要给11111加上单引号‘’,写成select * frok course where courseId=‘11111’,这样才行;
这是为什么呢,究竟何时必须要单引号,何时可以省略呢;

解决方案 »

  1.   

    有些时候字段名/值和MYSQL的关键字同名 为了让MYSQL识别出这个是字段才需要加``
      

  2.   

    可是CSCI,web programming,怎么会和mysql的关键字同名呢
      

  3.   

    把数字自动转换成字符串应该是数据库的自动转换机制,
    如果是字母的话,数据库会认为这是一个标识符,然后去查找这个标识符,找不到就会报错,
    虽然数字不加''是可以运行的,但是不推荐这种写法,会影响效率,如果是字符串类型,都加'',
    这是涉及到编译的时候的一个问题,不会因为select,update...而有不同的对字符串的编译方式,
    所以字符串都加''吧
      

  4.   

    数据库中的单引号相当于java字符串。java用"来做引号,数据库中用'作为引号。如果在java中,设计到拼接的时候,两个'表示一个'。
      

  5.   


    courseId char(5) not null,
      subjectId char(4) not null,  
      courseNumber integer,  
      title varchar(50) not null,  
      numOfCredits integer,char,varchar或者date这种字符类型就要单引号。。integer是数字类型。所以不需要单引号。。
      

  6.   

    insert into course(courseId,subjectId,courseNumber,title,numOfCredits) values(11119,CSCI,1345,Web programming,3);
    其实插入也会自动转换类型,不过像 Web programming 这样的信息,因为中间有空格,所以如果不用引号括起来,就有可能造成解析错误