Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 自动增量触发器_Mysql - Fatal编程技术网

Mysql 自动增量触发器

Mysql 自动增量触发器,mysql,Mysql,我需要使用触发器自动递增mysql数据库中的主键。不幸的是,我不太清楚如何做到这一点。在我提供的示例代码中,我需要employee表主键以空表和起始值200开始自动递增。然后,我需要每一个新的插入增量1。感谢您的寻找,我希望您能够帮助我 CREATE TABLE department ( dept_name VARCHAR(50) NOT NULL Primary Key ); CREATE TABLE employee ( emp_id INT(6) unsigned Default 0

我需要使用触发器自动递增mysql数据库中的主键。不幸的是,我不太清楚如何做到这一点。在我提供的示例代码中,我需要employee表主键以空表和起始值200开始自动递增。然后,我需要每一个新的插入增量1。感谢您的寻找,我希望您能够帮助我

CREATE TABLE department (
dept_name VARCHAR(50) NOT NULL  Primary Key
);

CREATE TABLE employee (
emp_id INT(6) unsigned Default 0 Not NULL 
, last_name VARCHAR(25) NOT NULL
, first_name VARCHAR(40) NOT NULL
, dept_name VARCHAR(50) NOT NULL
, PRIMARY KEY(emp_id, dept_name)
,  FOREIGN KEY(dept_name) REFERENCES department (dept_name)
);

您需要做几件事:

将emp_id列声明为AUTO_INCREMENT; 将表格的自动增量属性值设置为200; 在employee表中插入行时,不要为emp_id列提供任何值。 更改表格创建,如下所示:

CREATE TABLE employee (
    emp_id INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
    last_name VARCHAR(25) NOT NULL,
    first_name VARCHAR(40) NOT NULL,
    dept_name varchar(50) NOT NULL
    PRIMARY KEY(emp_id),
    FOREIGN KEY(dept_name) REFERENCES department_tbl(dept_name)
) AUTO_INCREMENT=200;
如果该表有一个自动增量列,那么它必须是该表的主键。我从上面PK的定义中删除了dept_name。我还从emp_id列中删除了默认值0。它的默认值由MySQL使用自动增量策略生成

在employee表中插入新记录时,只需不为emp_id列提供任何值:

然后使用MySQL函数检索插入时生成的emp_id的值


用于开发客户端应用程序的语言或库可能有一个函数,该函数包装LAST_INSERT_ID并返回其值。

我得到了一个1215-在尝试添加表时无法添加外键约束。每当我尝试在employee表中使用auto_increment时,就会得到这个结果。如果我在department表中添加auto_increment,则最后一行有一个错误。它应该是外键dept\u name引用部门dept\u name。即使纠正了这个错误,我也会得到同样的错误。我能够做出调整,使它正常工作。我在外键之前添加了键索引\u deptNamedept\u名称。成功了!我尝试了以下操作,但它告诉我有一个语法错误:在employee`上创建触发器empid_before_insert before insert FOR every ROW BEGIN DECLARE m INT;从professor tbl中选择IFNULLMAXemp_id,200+1到m;设置新值。值=m;-不需要,但需要保存,以便在设置NEW时不能插入其他记录。emp_id=m;结束`
INSERT INTO employee (last_name, first_name, dept_name)
VALUES ('Doe', 'John', 'accounting');