itsource

ASSERTION을 생성하려고 할 때 설명할 수 없는 mysql 오류가 발생했습니다.

mycopycode 2022. 12. 24. 17:27
반응형

ASSERTION을 생성하려고 할 때 설명할 수 없는 mysql 오류가 발생했습니다.

저는 현재 mysql을 배우고 있으며, 구현은 Arch Linux에서 MariaDB입니다.STATUS아래를 참조해 주십시오.

여기 문제가 있습니다.이 표는 다음과 같습니다.

MariaDB [biodb_sam]> SELECT * FROM pwms LIMIT 10;
+---------+-----+------+-------+
| tfs_id  | pos | base | value |
+---------+-----+------+-------+
| hPDI060 |   1 | A    |  0.01 |
| hPDI060 |   1 | C    |  0.01 |
| hPDI060 |   1 | G    |  0.97 |
| hPDI060 |   1 | T    |  0.01 |
| hPDI060 |   2 | A    |  0.01 |
| hPDI060 |   2 | C    |  0.48 |
| hPDI060 |   2 | G    |   0.5 |
| hPDI060 |   2 | T    |  0.01 |
| hPDI060 |   3 | A    | 0.625 |
| hPDI060 |   3 | C    |  0.01 |
+---------+-----+------+-------+
10 rows in set (0.00 sec)

하지만 간단한 주장을 덧붙이고 싶을 때는pos항상 긍정적이기 때문에 다음 오류가 발생합니다.

MariaDB [biodb_sam]> CREATE ASSERTION foo CHECK(NOT EXISTS (SELECT * FROM pwms WHERE pos < 1));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ASSERTION foo CHECK(NOT EXISTS (SELECT * FROM pwms WHERE pos < 1))' at line 1

웹 페이지의 MariaDB 문서의 예시와 차이가 없습니다.SELECT수표의 명세서 자체는 문제없이 작동하기 때문에 다른 곳에 문제가 있는 것이 틀림없습니다만, 잘 모르겠습니다.

서버 전체의 정보는 다음과 같습니다.

MariaDB [biodb_sam]> STATUS;
--------------
mysql  Ver 15.1 Distrib 10.1.10-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:          52
Current database:       biodb_sam
Current user:           sam@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.1.10-MariaDB-log MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /run/mysqld/mysqld.sock
Uptime:                 1 day 16 hours 56 min 2 sec

Threads: 4  Questions: 6264  Slow queries: 0  Opens: 142  Flush tables: 1  Open tables: 64  Queries per second avg: 0.0
42
--------------

링크된 페이지 상단에 있는 내용을 인용하고 싶습니다.

이 페이지는 Peter Gulutzan & Trudy Pelzer의 SQL-99 Complete, Really의 일부입니다.저자들은 친절하게도 우리가 이 책의 내용을 여기에 재현할 수 있도록 허락해 주었다.이 책은 SQL-99 표준에 관한 것이므로 이 책과 다른 페이지의 내용은 MariaDB에 직접 적용되지 않을 수 있습니다.네비게이션 바를 사용하여 책을 탐색합니다.

MariaDB 고유의 문서는 다릅니다.지원되는 CREATE 스테이트먼트의 전체 목록은 mariadb 웹사이트에서 확인할 수 있습니다.이 목록에는 CREATE ASSION이 포함되어 있지 않기 때문에 MariaDB는 이 기능을 지원하지 않습니다.따라서 다음 오류 메시지가 나타납니다.

다양한 CREATE 스테이트먼트에 관한 기사

  • 데이터베이스 생성 데이터베이스 생성
  • CREATE Event 신규 이벤트 생성 및 일정 설정 1
  • CREATE FUNTION 저장된 함수를 만듭니다.
  • CREATE FUNTION UDF 사용자 정의 함수 생성
  • 인덱스 생성 하나 이상의 열에 인덱스를 만듭니다.
  • CREATE Procedure 저장 프로시저를 만듭니다.
  • 역할 생성 새 역할 추가
  • CREATE SERVER 서버 정의 5
  • CREATE TABLE 새 테이블 만들기
  • CREATE TABlesPACE CREATE TABlesPACE는 Maria에서 사용할 수 없습니다.DB
  • CREATE 트리거 새 트리거 생성
  • CREATE User 새 MariaDB 계정 만들기
  • CREATE VIEW 뷰 생성 또는 바꾸기

이것 대신에 체크 제약 조건을 사용하는 것을 추천합니다만, 이것은 mysql에서는 동작하지 않습니다.음의 값을 피하기 위해 이 열에 부호 없는 정수를 유형으로 만드는 아이디어가 하나 있습니다.

언급URL : https://stackoverflow.com/questions/34769321/unexplainable-mysql-error-when-trying-to-create-assertion

반응형