mysql - SQL #1064 - 您的 SQL 语法有错误; Joomla 组件安装中的 `` 附近

标签 mysql sql joomla triggers

您好,我正在尝试在 Joomla 组件安装中创建触发器,但它似乎不起作用

错误消息

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 '' at line 4 SQL=CREATE TRIGGER tg_jws_worksheet_worksheet_insert BEFORE INSERT ON jws_worksheet_worksheet FOR EACH ROW BEGIN INSERT INTO jws_worksheet_worksheet_seq (id) VALUES (NULL);

这是代码

    --
-- Table structure for table `client`
--

DROP TABLE IF EXISTS `#__worksheet_client`;
CREATE TABLE IF NOT EXISTS `#__worksheet_client` (
`ClientID` int(11) NOT NULL,
  `CompanyId` int(11) NOT NULL,
  `FullName` text NOT NULL,
  `Email` text,
  `ContactNo` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `company`
--

DROP TABLE IF EXISTS `#__worksheet_company`;
CREATE TABLE IF NOT EXISTS `#__worksheet_company` (
`CompanyId` int(5) NOT NULL,
  `ABN` int(12) NOT NULL,
  `CompanyName` text NOT NULL,
  `Street` text,
  `City` text,
  `State` text,
  `PostCode` int(5) DEFAULT NULL,
  `Country` text,
  `Phone` text,
  `HourRate` int(11) NOT NULL,
  `Notes` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
-- --------------------------------------------------------

--
-- Table structure for table `worksheet_seq`
--

DROP TABLE IF EXISTS `#__worksheet_worksheet_seq`;
CREATE TABLE IF NOT EXISTS `#__worksheet_worksheet_seq` (
`id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `worksheet`
--

DROP TABLE IF EXISTS `#__worksheet_worksheet`;
CREATE TABLE IF NOT EXISTS `#__worksheet_worksheet` (
  `worksheetNo` varchar(9) NOT NULL,
  `CompanyId` int(5) NOT NULL,
  `UserId` int(5) NOT NULL,
  `CompanyName` text NOT NULL,
  `Category` varchar(20) NOT NULL,
  `JobTitle` text NOT NULL,
  `JobDesc` text NOT NULL,
  `StartDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `EndDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `TimeSpd` int(11) NOT NULL,
  `Tech` text NOT NULL,
  `Status` varchar(8) NOT NULL,
  `Hardware` text,
  `Price` int(11) NOT NULL,
  `file` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



SET FOREIGN_KEY_CHECKS=1;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `client`
--
ALTER TABLE `#__worksheet_client`
 ADD PRIMARY KEY (`ClientID`), ADD KEY `CompanyId` (`CompanyId`);



--
-- Indexes for table `company`
--
ALTER TABLE `#__worksheet_company`
 ADD PRIMARY KEY (`CompanyId`);

--
-- Indexes for table `worksheet`
--
ALTER TABLE `#__worksheet_worksheet`
 ADD PRIMARY KEY (`worksheetNo`), ADD KEY `CompanyId` (`CompanyId`);

--
-- Indexes for table `worksheet_seq`
--
ALTER TABLE `#__worksheet_worksheet_seq`
 ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `client`
--
ALTER TABLE `#__worksheet_client`
MODIFY `ClientID` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `company`
--
ALTER TABLE `#__worksheet_company`
MODIFY `CompanyId` int(5) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT for table `worksheet_seq`
--
ALTER TABLE `#__worksheet_worksheet_seq`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;
--
-- Constraints for dumped tables
--

--
-- Constraints for table `client`
--
ALTER TABLE `#__worksheet_client`
ADD CONSTRAINT `client_ibfk_1` FOREIGN KEY (`CompanyId`) REFERENCES `#__worksheet_company` (`CompanyId`);

--
-- Constraints for table `worksheet`
--
ALTER TABLE `#__worksheet_worksheet`
ADD CONSTRAINT `worksheet_ibfk_1` FOREIGN KEY (`CompanyId`) REFERENCES `#__worksheet_company` (`CompanyId`);



--
-- Triggers `worksheet`
--
DROP TRIGGER IF EXISTS `tg_#__worksheet_worksheet_insert`;

CREATE TRIGGER `tg_#__worksheet_worksheet_insert` BEFORE INSERT ON `#__worksheet_worksheet`
 FOR EACH ROW
 BEGIN
  INSERT INTO `#__worksheet_worksheet_seq` (`id`) VALUES (NULL);
  SET NEW.worksheetNo = CONCAT('WS-', LPAD(LAST_INSERT_ID(), 5, '0'));
END

最佳答案

创建触发器通常需要重新定义分隔符:

DELIMITER $$
DROP TRIGGER IF EXISTS `tg_#__worksheet_worksheet_insert`$$

CREATE TRIGGER `tg_#__worksheet_worksheet_insert` BEFORE INSERT ON `#__worksheet_worksheet`
 FOR EACH ROW
 BEGIN
  INSERT INTO `#__worksheet_worksheet_seq` (`id`) VALUES (NULL);
  SET NEW.worksheetNo = CONCAT('WS-', LPAD(LAST_INSERT_ID(), 5, '0'));
END$$
DELIMITER ;

关于mysql - SQL #1064 - 您的 SQL 语法有错误; Joomla 组件安装中的 `` 附近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246421/

相关文章:

SQL Server 2005 和 SELECT 和 UPDATE 锁定

php - 如何获取组件参数?

mysql - 获得第n高的薪水

mysql - 正在初始化 c3p0 池...超时

python - 错误 : 'str' object has no attribute 'to_sql'

css - 在 joomla 2.5 rockettheme 模板中查找 css 加载

没有菜单项的 Joomla 博客文章 - 使用了错误的模块

mysql - 如何在现有的 mysql 表中进行按月分区?

mysql - VB.NET多表搜索功能与Mysql

MySQL 是否有外键?