首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 建表語法錯誤:identity 關鍵字不支持,需用 AUTO_INCREMENT

     編輯:程式設計疑難解答

錯誤 SQL

CREATE TABLE salary (
    salaryId INT IDENTITY(1,1),  -- 錯誤:MySQL 不支持 IDENTITY
    employeeId CHAR(100),
    employeeName CHAR(100),
    year CHAR(100),
    month CHAR(100),
    basicWage FLOAT,
    overtimeWage FLOAT,
    trafficWage FLOAT,
    totalWage FLOAT,
    kaoqinReduce FLOAT,
    secureReduce FLOAT,
    taxReduce FLOAT,
    totalReduce FLOAT,
    realWage FLOAT,
    editTime CHAR(100),
    memo CHAR(100)
);

錯誤信息

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY(1,1)' at line 2

原因分析

IDENTITY(1,1) 是 SQL Server 的自增語法,MySQL 使用 AUTO_INCREMENT 關鍵字實現自增主鍵。

修正後的 MySQL 建表語句

CREATE TABLE salary (
    salaryId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- 正確語法
    employeeId CHAR(100),
    employeeName CHAR(100),
    year CHAR(100),
    month CHAR(100),
    basicWage FLOAT,
    overtimeWage FLOAT,
    trafficWage FLOAT,
    totalWage FLOAT,
    kaoqinReduce FLOAT,
    secureReduce FLOAT,
    taxReduce FLOAT,
    totalReduce FLOAT,
    realWage FLOAT,
    editTime CHAR(100),
    memo CHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

關鍵差異對比

特性SQL ServerMySQL
自增關鍵字IDENTITY(種子,增量)AUTO_INCREMENT
起始值設置IDENTITY(100,1)ALTER TABLE t AUTO_INCREMENT=100
增量設置IDENTITY(1,2)不支持(固定為 1)
主鍵聲明通常分開聲明常合併:INT AUTO_INCREMENT PRIMARY KEY

進階優化建議

  1. 數據類型優化:
    • CHAR(100) 固定長度浪費空間 → 改用 VARCHAR(100)。
    • FLOAT 存在精度問題 → 金額字段用 DECIMAL(10,2)。
    • year/month 用 CHAR 存儲 → 改用 SMALLINT 或 DATE 類型。
  2. 添加索引:常用查詢字段(如 employeeId、year、month)添加索引。
  3. 字符集:指定 utf8mb4 支持完整 Unicode(含 Emoji)。
  4. 存儲引擎:顯式指定 InnoDB 支持事務與外鍵。

優化版建表示例

CREATE TABLE salary (
    salary_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '薪資記錄ID',
    employee_id VARCHAR(50) NOT NULL COMMENT '員工工號',
    employee_name VARCHAR(100) NOT NULL COMMENT '員工姓名',
    salary_year SMALLINT NOT NULL COMMENT '年份',
    salary_month TINYINT NOT NULL COMMENT '月份(1-12)',
    basic_wage DECIMAL(10,2) DEFAULT 0.00 COMMENT '基本工資',
    overtime_wage DECIMAL(10,2) DEFAULT 0.00 COMMENT '加班工資',
    traffic_wage DECIMAL(10,2) DEFAULT 0.00 COMMENT '交通補貼',
    total_wage DECIMAL(10,2) DEFAULT 0.00 COMMENT '應發總額',
    kaoqin_reduce DECIMAL(10,2) DEFAULT 0.00 COMMENT '考勤扣款',
    secure_reduce DECIMAL(10,2) DEFAULT 0.00 COMMENT '社保扣款',
    tax_reduce DECIMAL(10,2) DEFAULT 0.00 COMMENT '稅收扣款',
    total_reduce DECIMAL(10,2) DEFAULT 0.00 COMMENT '扣款總額',
    real_wage DECIMAL(10,2) DEFAULT 0.00 COMMENT '實發工資',
    edit_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '編輯時間',
    memo VARCHAR(500) DEFAULT '' COMMENT '備註',
    INDEX idx_emp_date (employee_id, salary_year, salary_month)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='員工薪資表';

總結

MySQL 不支持 IDENTITY,必須使用 AUTO_INCREMENT 實現自增主鍵。同時建議優化字段類型、添加索引與註釋,構建規範、高效的表結構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved