mysql - 关于如何将我的 t-sql 代码转换为 mysql 的建议

标签 mysql

我是一名 T-SQL 编码员,我开始在 MySQL Workbench 中编码。 我正在尝试在 MySQL 中应用触发器和函数,但在语法方面遇到困难。

基本上我下面的代码想要使用 StudentID(递增)作为我的 Studentnumber 代码的基础 最大值为 5 个零数字。列克这个----> 13-00001(其中13是年份的最后一位数字,1是StudentID值。)因此,如果我插入291条记录,我的最后一条记录将是13-00291。

在 T-SQL 中我有以下代码:

create table Student
(   StudentID int identity not null primary key,
    Name varchar(100),
    StudentNumber varchar(10) 
)

create function StudentNumber (@id int) 
returns char(9) 
as 
begin 
return (SELECT SUBSTRING((CONVERT(VARCHAR(10),GETDATE(),112)),3,2)) + '-' + right('000000' + convert(varchar(10), @id), 6) 
end

create trigger Student_insert on Student 
after insert as 
update 
    Student 
set 
    Student.StudentNumber = dbo.StudentNumber(Student.StudentID) 
from 
    Student 
inner join 
    inserted on Student.StudentID= inserted.StudentID

当我开始在 MySQL 中编码时,创建表是基本的,但是当我创建触发器和函数时, 看来mysql的工作方式有很大的不同。 我读过 MYSQL 中 Identity 的等价物是 AutoIncrement PK, 但我还读到,当触发触发器时,它无法获取我的 PK 的值,因为记录尚未提交(或类似的内容)我读到执行该功能的唯一方法是MySQL 中想要创建一个临时表来存储 ID 或其他内容。但我想问问其他人的意见,是否有一种方法可以在 MYSQL 中重新创建我的函数,而不必求助于创建临时表。

谢谢

最佳答案

如果你想在 MySql 中使用 auto_increment 字段,你必须有一个单独的表来进行这样的排序。

您的架构

CREATE TABLE student_seq(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)|

CREATE TABLE student
(   StudentID INT NOT NULL PRIMARY KEY,
    Name VARCHAR(100),
    StudentNumber VARCHAR(8) DEFAULT NULL
);

功能

CREATE FUNCTION student_number (id INT)
RETURNS VARCHAR(8) 
  RETURN CONCAT(DATE_FORMAT(CURDATE(), '%y'), '-', LPAD(id, 5, '0'));

现在触发

DELIMITER $$
CREATE TRIGGER tg_student_insert 
BEFORE INSERT ON Student
FOR EACH ROW 
BEGIN
  DECLARE nextid INT DEFAULT 0;
  INSERT INTO student_seq VALUES(NULL);
  SET nextid = LAST_INSERT_ID();
  SET NEW.studentid = nextid, NEW.studentnumber = student_number(nextid);
END$$
DELIMITER ;

让我们插入一个新学生

INSERT INTO student (studentid, name) VALUES(0, 'Jhon');

您将进入学生表

| STUDENTID | NAME | STUDENTNUMBER |
------------------------------------
|         1 | Jhon |      13-00001 |

这里是SQLFiddle 演示。

关于mysql - 关于如何将我的 t-sql 代码转换为 mysql 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16889524/

相关文章:

php - SQL中的匹配兴趣(最近邻)搜索

Mysql错误代码: 1111.组函数使用无效

php - 验证一个字段 mysql laravel 5

php - mysql_fetch_array 和 Facebook API

MySQL 排序分组数据

mysql - 等于 (=) 和具有一个文字值的 IN 之间的性能差异

mySQL 如何在使用多个联接时通过特定 id 限制查询

mysql - 实现并查询引用两个表的MYSQL外键

php - 插入借用特定 CD 的客户

mysql - 我正在尝试在 mysql phpmyadmin 中创建一个存储过程