Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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_Triggers_Schema_Constraints_Mysql Error 1170 - Fatal编程技术网

Mysql 插入前触发器的语法

Mysql 插入前触发器的语法,mysql,triggers,schema,constraints,mysql-error-1170,Mysql,Triggers,Schema,Constraints,Mysql Error 1170,好的,我认为这是错误的方法: mysql> mysql> show tables; +---------------------+ | Tables_in_nntp | +---------------------+ | articles | | newsgroups | | newsgroups_articles | +---------------------+ 3 rows in set (0.00 sec) mysql&g

好的,我认为这是错误的方法:

mysql> 
mysql> show tables;
+---------------------+
| Tables_in_nntp      |
+---------------------+
| articles            |
| newsgroups          |
| newsgroups_articles |
+---------------------+
3 rows in set (0.00 sec)

mysql> describe newsgroups;
+-----------+----------+------+-----+---------+----------------+
| Field     | Type     | Null | Key | Default | Extra          |
+-----------+----------+------+-----+---------+----------------+
| id        | int(11)  | NO   | PRI | NULL    | auto_increment |
| newsgroup | longtext | NO   |     | NULL    |                |
+-----------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> show create table newsgroups;
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                                      |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| newsgroups | CREATE TABLE `newsgroups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `newsgroup` longtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE newsgroups ADD UNIQUE (newsgroup);
ERROR 1170 (42000): BLOB/TEXT column 'newsgroup' used in key specification without a key length
mysql> 
has应填充一个

好的,作为root,我做了一个触发器,如下所示:

mysql> 
mysql> show tables;
+---------------------+
| Tables_in_nntp      |
+---------------------+
| articles            |
| newsgroups          |
| newsgroups_articles |
+---------------------+
3 rows in set (0.00 sec)

mysql> 
mysql> delimiter |
mysql> CREATE TRIGGER make_hash BEFORE INSERT ON newsgroups
    ->   FOR EACH ROW BEGIN
    ->       INSERT INTO hash values ('0');
    ->   END;
    -> |
Query OK, 0 rows affected (0.18 sec)

mysql> 

然而,这只是虚拟数据。我怎样才能使触发器真正创建散列呢?

我认为您应该保持主键不变。
您可以添加一个哈希列

ALTER TABLE `newsgroups` ADD COLUMN `hash` CHAR(32) NOT NULL DEFAULT '';
然后用

UPDATE newsgroups SET hash = MD5(newsgroup);
然后删除重复项并添加唯一约束

您还可以在插入之前添加
和更新之前添加
触发器,以设置
哈希值

CREATE DEFINER=`root`@`localhost` 
TRIGGER `before_insert_newsgroups` 
BEFORE INSERT ON `newsgroups` 
FOR EACH ROW BEGIN

    set new.hash = md5(new.newsgroup);

END

取决于您使用的SQL客户端,您可能不想

我正在查看,您是否正在使用SQL来更改表?这些命令来自MySql控制台?它不是一个完整的语句,我添加了缺少的部分。ok创建了一个伪触发器,但无法获得您上面描述的那种触发器的语法。我似乎缺少一些东西。您需要另一个用于哈希的表?同一个表应该有新闻组(只有一个字符串,大约80个字符)和哈希,这样哈希就可以设置为唯一的。“TRIGGER command denied to user…”-您应该检查您的用户有哪些特权,并在必要时与其他用户一起运行“创建触发器”。@Vatev我将以root用户身份尝试,但我不认为这是问题所在,用户java有
用法