2016-12-08 5 views
1

날짜/기본값 current_timestamp 인 필드 ts가있는 테이블이 있습니다. 내가날짜 선택과 함께 임시 테이블을 만듭니다. 잘못된 기본 값 오류가 발생합니다.

CREATE TEMPORARY TABLE tblTmp (
    tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    INDEX(tmpid) 
) AS 
    SELECT * FROM myTable; 

를 통해이 테이블에서 임시 테이블을 만들려고하면

나는 때문에 열 TS의 유효하지 않은 디폴트 값의 오류가 발생합니다.

이것은 mysql 5.7의 strict 모드와 관련이 있다는 것을 알고 있습니다.

이 오류가 디폴트 값으로 curr_timestamp 발생 이유를 확실히 이해하지 못하기 때문에이 처리 할 수있는 방법이 있습니까. 선택에 그냥 문제가 지금 사용하고 있음을 발견() 또는 CURRENT_TIMESTAMP :

UPDATE. 나는 선을 제거하고 작동한다. 그래서

:

SELECT col1, col2, ... FROM myTable 

SELECT col1, col2, NOW() as currDatetime FROM myTable 

을하고있다가 작동하지 않습니다.

왜 이런 일이 발생하는지 알고 싶습니다. 원하는 필드를 선택하면

+0

'create * from myTable'처럼 임시 테이블 tblTmp를 사용하지 않는 이유는 무엇입니까? 그 후 색인을 작성하십시오. –

+0

@Gordon은 내가 보는 한 내 문제를 해결하지 못합니다. 오류 메시지가 tmpId가 아닌 datetime 열과 관련이 있습니다 – solick

+1

select * 대신 잘못된 값의 이름과 코드로 필드를 선택할 수 있습니까? –

답변

0

당신은 선택에 대한 문제 나 코드를 우회 할 수 있습니다. 예를 들어 당신은 소스 테이블에서 오는 컬럼에 새 이름을 지정하기 위해 선택의 별칭을 사용할 수 있습니다

MariaDB [sandbox]> 
MariaDB [sandbox]> select * from tbltmp; 
+-------+-----+---------------------+ 
| tmpid | id | ts     | 
+-------+-----+---------------------+ 
|  1 | 1 | 2016-12-08 13:14:24 | 
|  2 | 2 | 2016-12-08 13:14:24 | 
|  3 | 3 | 2016-12-08 13:14:24 | 
|  4 | 6 | 2016-12-08 13:14:24 | 
|  5 | 7 | 2016-12-08 13:14:24 | 
|  6 | 8 | 2016-12-08 13:14:24 | 
|  7 | 10 | 2016-12-08 13:14:24 | 
|  8 | 12 | 2016-12-08 13:14:24 | 
|  9 | 14 | 2016-12-08 13:14:24 | 
| 10 | 15 | 2016-12-08 13:14:24 | 
| 11 | 16 | 2016-12-08 13:14:24 | 
| 12 | 17 | 2016-12-08 13:14:24 | 
| 13 | 18 | 2016-12-08 13:14:24 | 
| 14 | 19 | 2016-12-08 13:14:24 | 
| 15 | 999 | 2016-12-08 13:16:41 | 
+-------+-----+---------------------+ 
15 rows in set (0.00 sec) 

MariaDB [sandbox]> select * from users; 
+-----+----------+--------------+--------+---------------------+ 
| id | userName | photo  | status | ts     | 
+-----+----------+--------------+--------+---------------------+ 
| 1 | John  | john.png  |  1 | 2016-12-08 13:14:24 | 
| 2 | Jane  | jane.png  |  1 | 2016-12-08 13:14:24 | 
| 3 | Ali  |    |  1 | 2016-12-08 13:14:24 | 
| 6 | Bruce | bruce.png |  1 | 2016-12-08 13:14:24 | 
| 7 | Martha |    |  1 | 2016-12-08 13:14:24 | 
| 8 | Sidney |    |  1 | 2016-12-08 13:14:24 | 
| 10 | Charlie | charlie.png |  1 | 2016-12-08 13:14:24 | 
| 12 | Elisa |    |  1 | 2016-12-08 13:14:24 | 
| 14 | Samantha | samantha.png |  1 | 2016-12-08 13:14:24 | 
| 15 | Hannah | hannah.png |  1 | 2016-12-08 13:14:24 | 
| 16 | Hannah |    |  1 | 2016-12-08 13:14:24 | 
| 17 | Kevin | kevin1.png |  1 | 2016-12-08 13:14:24 | 
| 18 | Kevin | kevin2.png |  1 | 2016-12-08 13:14:24 | 
| 19 | Ruth  |    |  1 | 2016-12-08 13:14:24 | 
| 999 | xxx  | photo  |  1 | 2016-12-08 13:16:41 | 
+-----+----------+--------------+--------+---------------------+ 
15 rows in set (0.00 sec) 

MariaDB [sandbox]> drop table if exists tbltmp; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> CREATE TEMPORARY TABLE tblTmp (
    ->  tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ->  INDEX(tmpid) 
    ->) AS 
    ->  SELECT id,ts FROM users; 
Query OK, 15 rows affected (0.19 sec) 
Records: 15 Duplicates: 0 Warnings: 0 

결과를 포함

CREATE TABLE `users` (
    `id` int(11) NOT NULL, 
    `userName` varchar(60) NOT NULL, 
    `photo` varchar(50) NOT NULL, 
    `status` int(11) NOT NULL, 
    `ts` datetime DEFAULT CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

을 부여.

+0

고마워요.하지만 정확히이 방법대로 해요. 유일한 차이 : Engine = MyISAM, chariest UTF8. 이것이 문제가 될 수 있습니까? – solick

+0

죄송합니다. 나는 두 가지를 혼합했습니다. 문제 열은 다음과 같이 생성됩니다. NOW() AS currDatetime, – solick