MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
创建触发器
在MySQL中,创建触发器语法如下:
代码如下:
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
----------------------------------------- select a.id ,ifnull(b.cnt,0) as cnt from bc_company as a left join ( select company_id,count(company_id) as cnt from bc_user where status = 1 group by company_id ) as b on a.id = b. company_id ------------------------------------------------------- update bc_company a,( select a.id ,ifnull(b.cnt,0) as cnt from bc_company as a left join ( select company_id,count(company_id) as cnt from bc_user where status = 1 group by company_id ) as b on a.id = b. company_id )b set a.user_count=b.cnt where a.id=b.id; -------------------------------------------------------
两张表关联删除:
DELETE a,b FROM table1 a INNER JOIN table2 b ON a.id = b.aid WHERE a.id = '1' //或者也可以 DELETE a,b FROM table1 a,table2 b WHERE a.id = b.aid AND a.id = '1'
阅读详细 »
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
创建触发器
在MySQL中,创建触发器语法如下:
代码如下:
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
mysql结果集加序号问题?
如何在mysql查询后的结果集前加序列,类似oracle的rownum?
首先给出解决方案:
–通过一个初始值为0的变量@rownum,依次递增1来实现行号
SELECT @rownum:=@rownum+1 AS rownum,name FROM temp, (SELECT @rownum:=0) temp WHERE @rownum<4;
给出一般性的语句:
SELECT @rownum:=@rownum+1 AS rownum,所需字段 FROM 表名, (SELECT @rownum:=0) 表名 WHERE @rownum<N(获取多少行);
然后给出测试案例:
第一步,创建测试表;
mysql> CREATE TABLE temp(id INT(4),name VARCHAR(20)); Query OK, 0 rows affected (0.13 sec)
第二步,插入测试数据;
mysql> INSERT INTO temp VAlUES(1,'robin'); Query OK, 1 row affected (0.10 sec) mysql> INSERT INTO temp VAlUES(2,'wentasy'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO temp VAlUES(3,'justdb'); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO temp VAlUES(4,'wen'); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 4 rows affected (0.03 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 8 rows affected (0.02 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 16 rows affected (0.02 sec) Records: 16 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 32 rows affected (0.03 sec) Records: 32 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 64 rows affected (0.04 sec) Records: 64 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 128 rows affected (0.03 sec) Records: 128 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 256 rows affected (0.04 sec) Records: 256 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 512 rows affected (0.05 sec) Records: 512 Duplicates: 0 Warnings: 0 mysql> INSERT INTO temp SELECT * FROM temp; Query OK, 1024 rows affected (0.05 sec) Records: 1024 Duplicates: 0 Warnings: 0 第三步,实现类似Oracle中的rownum效果; mysql> SELECT -> @rownum:=@rownum+1 AS rownum,name -> FROM temp, -> (SELECT @rownum:=0) temp -> WHERE @rownum<4; +--------+---------+ | rownum | name | +--------+---------+ | 1 | robin | | 2 | wentasy | | 3 | justdb | | 4 | wen | +--------+---------+ 4 rows in set (0.01 sec)
第一种方法:
复制代码 代码如下:
select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it
第二种方法:
set @rownum=0; select @rownum:=@rownum+1 as rownum, t.username from auth_user t limit 1,5;
Discuz 在数据库MySQL5.5环境下,无法安装。
问题是 Discuz 使用的是老版本的MySQL。
由于新版的MySQL中使用ENGINE并放弃了TYPE函数,因此您需要按照以下步骤来安装Discuz!
1、 将程序解压并上传至服务器;
2、 用文本编辑器或其他编辑软件打开/install/data/install.sql文件;
3、 将其中所有的TYPE=替换为ENGINE=;
4、 在浏览器运行安装文件。
这样您就能顺利安装Discuz了。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\wamp\www”
ServerName localhost
ServerAlias localhost
ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common
</VirtualHost>
#
# 如果目录在 D:\wamp\www 下因为 D:\wamp\www 已经设置过权限了 所以 可以不用设置 <Directory “D:\webroot” >
# 否者需要 像下边的例子 设置 目录权限 <Directory “D:\webroot” >
#
<VirtualHost *:80>
ServerName 127.0.0.5
ServerAlias 127.0.0.6
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\webroot”
ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common
<Directory “D:\webroot” >
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
phpmyadmin备份下来的SQL文件有50多M,但是phpmyadmin不支持超过24M的sql文件导入。另外文件过大,通常web上传文件大小也有限制,从本地浏览上传导入,容易中断失败,有没有更好的方法呢?
如果你有服务器操作权限,你就可以先把sql上传到服务器上,因为phpmyadmin支持从服务器端读取sql文件然后导入。
可以先将超大的SQL文件先传到你的phpmyadmin文件夹内,然后按以下方法设置
在phpmyadmin中导入很大很大的数据
找到config.inc.php
编辑它
$cfg[‘UploadDir’] = ‘你指定的文件夹路径‘;
例如:
/* * Directories for saving/loading files from server */ $cfg['UploadDir'] = 'UploadDir'; $cfg['SaveDir'] = '';
然后在phpmyadmin新建这个目录UploadDir
将sql放进来
然后你再选择导入的时候就会有个选项了
然后你选择导入
我测试过.没问题
如果没找到config.inc.php
那就找config.inc.***.php
然后将这个文件修改成config.inc.php
用phpmyadmin导入大数据库的时候经常出现:
No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.
这是因为php无法上传大文件照成的,解决这个问题可以有2中方法:
方法一:修改php上传文件的大小限制
首先检查php.ini配置文件中的以下三个变量
upload_max_filesize,
memory_limit ,
post_max_size,
初始大小分别为2M,8M,8M,修改的数字尽量大于原来的数字,但不可过大,以防占用服务器资源。
修改了以上三个在php.ini中的值以后,重启了Apache,再次打开phpmyadmin导入时,虽然phpmyadmin还是显示导入最大限制:20,48KB,但是导入大的数据库文件已经能成功了。
该方法本人不推荐,因为这样有的时候即使你修改了上传文件大小限制,也会因为上传时间过长而失败.
——————————————————–
方法二:修改phpmyadmin 配置 ,让phpmyadmin从服务器选择sql文件。
具体操作过程如下:
1.在 phpmyadmin目录里新建一个目录 upload.
2.打开phpmyadmin,找到config.inc.php文件,打开在里面修改 $cfg[‘UploadDir’] = “upload”; 然后保存
3.用 FTP软件上传需要导入的sql 文件到 phpmyadmin/upload/ 下
4.访问 phpmyadmin,点击 Import(导入) ,就会出现选择服务器上的文件的下拉框,选择刚才用FTP上传的SQL文件。
至此完美解决。