为什么在mysql 中  constraint c1 check(成绩 between 0 and 100);  没有起到作用呢?当你输入的成绩比100大时  没有出现错误  为什么呢  ?为了要起作用 应该要怎样写  谢谢回答.

解决方案 »

  1.   


    悲剧了,mysql用的是enum关键字啊!例如
    create table tb(`status`  enum('-2','-1','1','2','3','4') comment '-2无效状态、-1未编辑状态、1审核状态、2审核完成状态、3再修改状态、4重新审核状态');
      

  2.   


    看三楼我的办法啊,用enum就搞定了。
      

  3.   

    利用触发器吧。MySQL 中如何在触发器里中断记录的插入或更新?
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspx
      

  4.   

    请问 ACMAIN_CHMmysql> create trigger tr_t_bluerosehero_bi before insert on t_bluerosehero
        -> for each row
        -> begin
        ->  if new.col>30 then
        ->          insert into t_control values (1);
        ->  end if;
        -> end;
    上面的 new  是什么意思呢  非常感谢你的帮助
      

  5.   

    21.1. CREATE TRIGGER语法
    CREATE TRIGGER trigger_name trigger_time trigger_event
        ON tbl_name FOR EACH ROW trigger_stmt
    触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与TEMPORARY表或视图关联起来。trigger_time是触发程序的动作时间。它可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发
    读一下参考手册吧。
      

  6.   

    刚刚 查询资料 发现 要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与
    STRICT_TRANS_TABLES等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语
    句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前面的行将完
    成插入或更新,但错误出现点后面的行则不然。对于非事务性表,为了避免这种情况的发生,可使用单行
    语句,或者在能接受转换警告而不是错误的情况下使用STRICT_TRANS_TABLES。要想在第1场合防止问
    题的出现,不要使用MySQL来检查列的内容。最安全的方式(通常也较快)是,让应用程序负责,仅将有
    效值传递给数据库。
    就是说  mysql  只用来 记录 合法值  而约束行为 要在 自己的应用程序里面设计?
      

  7.   

    请问 ACMAIN_CHMmysql> create trigger tr_t_bluerosehero_bi before insert on t_bluerosehero
      -> for each row
      -> begin
      -> if new.col>30 then
      -> insert into t_control values (1);
      -> end if;
      -> end;
    上面的 new 是什么意思呢  非常感谢你的帮助
      

  8.   

    为什么你需要我来帮助你去查MYSQL的手册呢?