• MySQL导致错误的语句


    主键不唯一

    由于表定义中创建了主键约束,因此MySQL将会确保重复主键不会被插入到数据表中。

    INSERT INTO person 
    (person_id, fname, lname, gender, birth_date) 
    VALUES (1, 'Zifeiy2', 'Haha', 'M', '1991-01-06');
    

    报错:

    [Err] 1062 - Duplicate entry '1' for key 'PRIMARY'
    

    不存在的外键

    favorite_food的表定义再person_id列上创建了外键,该约束确保favorite_food表中所输入的person_id列的值存在于person表中。下面显示了创建行时违背这一约束的结果:

    INSERT INTO favorite_food (person_id, food) VALUES (999, 'zifeiy');
    

    报错:

    [Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (`mydb`.`favorite_food`, CONSTRAINT `fk_fav_food_person_id` FOREIGN KEY (`person_id`) REFERENCES `person` (`person_id`))
    

    在此情况下,由于favorite_food表的部分数据依赖于person表,因此可以将favorite_food表视为子表,而将person表视为父表,如果需要,如果需要同时将两个表输入数据,那么在向favorite_food表输入数据之前,必须现在父表中创建一行。

    列值不合法

    Person表中的gender列被限制为只容许'M'(男性)或'F'(女性)值,如果试图将该列设为任何其他值,都将会收到如下响应:

    UPDATE person SET gender = 'Z' WHERE person_id = 1;
    

    报错:

    [Err] 1265 - Data truncated for column 'gender' at row 1
    

    无效的日期转换

    如果构建一个用于产生日期列的字符串,那么该字符串必须符合要求的格式,否则将会接受到一个错误。下面的例子中,所使用的日期格式没有与默认的日期格式“YYYY-MM-DD”像匹配:

    UPDATE person SET birth_date = 'DEC-21-1999' WHERE person_id = 1;
    

    报错:

    UPDATE person SET birth_date = 'DEC-21-1999' WHERE person_id = 1;
    

    通常情况下,显式地指定字符串格式是比依赖默认格式更好的做法。下面的语句使用str_to_date函数指定所用字符串格式:

    UPDATE person SET birth_date = STR_TO_DATE('DEC-21-2001', '%b-%d-%Y') WHERE person_id = 1;
    

    这样做不仅使服务器感到满意,Zifeiy也会感到开心。

  • 相关阅读:
    git 提交解决冲突(转载)
    impala系列: 时间函数
    impala系列: 字符串函数
    Impala系列: Impala常用的功能函数
    impala系列:impala特有的操作符
    impala系列: 同步Hive元数据和收集统计信息
    ETL脚本的版本管理方法和 SourceTree 使用
    几本不错的数据仓库和Hadoop书籍
    Kudu系列-基础
    sql parser
  • 原文地址:https://www.cnblogs.com/zifeiy/p/8781587.html
Copyright © 2020-2023  润新知