如何解决MySql的Table is full问题

如何解决MySql的Table is full问题,第1张

最近使用MySQL的Memory引擎时,出现了'Table’ is full的异常。

解决办法是修改max_heap_table_size参数,改大以足够容纳表的大小,比如512M。

在my.cnf中增加:

max_heap_table_size=512M

重启MySql即可。

btw,如果是MyISAM引擎出现'Table' is full异常,那么就是数据库文件超过文件大小系统,比如fat32,低版本的Linux,文件最大不可以大于2G,这需要转换fat32为NTFS,或升级Linux版本。

Oracle 、DB2、SQL Server、PostgreSQL 支持 Full JOIN

但是 MySQL 是不支持的。

可以通过

LEFT JOIN  +   UNION  +  RIGHT JOIN 的方式 来实现。

下面是 测试表与测试数据

-- 学生表

CREATE TABLE student (

  SNO    INT,

  SNAME  VARCHAR(10),

  ICNO   INT

)

-- 食堂IC卡表

CREATE TABLE IC (

  ICNO     INT,

  ICNAME   VARCHAR(10),

  ICMoney  INT

)

INSERT INTO student VALUES(1, '张三', 1   )

INSERT INTO student VALUES(2, '李四', 2   )

INSERT INTO student VALUES(3, '王五', NULL)

INSERT INTO IC VALUES(1, '张三', 500 )

INSERT INTO IC VALUES(2, '李四', 250 )

INSERT INTO IC VALUES(3, '赵老师', 600)

下面是 SQL Server  使用  full  join  的结果

SELECT

  student.SNO,

  student.SNAME,

  IC.ICNAME,

  IC.ICMoney

FROM

  student

    FULL JOIN IC

      ON (student.ICNO = IC.ICNO)

go

SNO         SNAME      ICNAME     ICMoney

----------- ---------- ---------- -----------

          1 张三         张三                 500

          2 李四         李四                 250

          3 王五         NULL              NULL

       NULL NULL       赵老师                600

(4 行受影响)

下面是 MySQL 不支持 的输出结果:

mysql> SELECT

    ->   student.SNO,

    ->   student.SNAME,

    ->   IC.ICNAME,

    ->   IC.ICMoney

    -> FROM

    ->   student

    ->     FULL JOIN IC

    ->       ON (student.ICNO = IC.ICNO)

ERROR 1054 (42S22): Unknown column 'student.SNO' in 'field list'

下面是 MySQL 的 LEFT JOIN  +   UNION  +  RIGHT JOIN 的方式。

mysql> SELECT

    ->   student.SNO,

    ->   student.SNAME,

    ->   IC.ICNAME,

    ->   IC.ICMoney

    -> FROM

    ->   student

    ->     LEFT JOIN IC

    ->       ON (student.ICNO = IC.ICNO)

    -> UNION

    -> SELECT

    ->   student.SNO,

    ->   student.SNAME,

    ->   IC.ICNAME,

    ->   IC.ICMoney

    -> FROM

    ->   student

    ->     RIGHT JOIN IC

    ->       ON (student.ICNO = IC.ICNO)

+------+-------+--------+---------+

| SNO  | SNAME | ICNAME | ICMoney |

+------+-------+--------+---------+

|    1 | 张三  | 张三   |     500 |

|    2 | 李四  | 李四   |     250 |

|    3 | 王五  | NULL   |    NULL |

| NULL | NULL  | 赵老师 |     600 |

+------+-------+--------+---------+

4 rows in set (0.01 sec)

mysql不支持full join,完全连接。支持左连(left join),右连(right join)和内连(inner join)

要想达到full join的作用,必须使用left join + union(不能是union all)+right join

SELECT * FROM

SELECT * FROM select_in a LEFT JOIN select_out b ON a.MaterialID = b.MaterialID WHERE a.a_date>='2016-06-25 23:59:22' AND a.a_date<NOW()

UNION

SELECT * FROM select_in a RIGHT JOIN select_out b ON a.MaterialID = b.MaterialID WHERE b.a_date>='2016-06-25 23:59:22' AND b.a_date<NOW()

) t

你的思路没问题,语法有点问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7289032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存