MySQL最大连接数和当前并发数

1.查看当前连接数和并发
执行:show status like ‘Threads%’;
+——————-+——-+
| Variable_name     | Value |
+——————-+——-+
| Threads_cached    | 220   |
| Threads_connected | 16    |
| Threads_created   | 236   |
| Threads_running   | 3     |
+——————-+——-+

Threads_connected 跟show processlist结果相同,表示当前连接数,Threads_running是代表当前并发

2.查看最大连接数
执行:show variables like ‘%max_connections%’;
+—————–+——-+
| Variable_name   | Value |
+—————–+——-+
| max_connections | 1200  |
+—————–+——-+

Go操作MySQL示例【转】

package main

import (
	_ "github.com/go-sql-driver/mysql"
	"database/sql"
	"fmt"
)

func main() {
	db, err := sql.Open("mysql", "test:test@/test_demo?charset=utf8")
	//检查数据库链接
	checkErr(err)
	//插入数据
	stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
	checkErr(err)
	res, err := stmt.Exec("test", "研发部门", "2012-12-09")
	checkErr(err)
	//获取插入的ID
	id, err := res.LastInsertId()
	checkErr(err)
	fmt.Println(id)
	//更新数据
	stmt, err = db.Prepare("update userinfo set username=? where uid=?")
	checkErr(err)
	res, err = stmt.Exec("test1", id)
	checkErr(err)
	//获取更新的影响行数
	affect, err := res.RowsAffected()
	checkErr(err)
	fmt.Println(affect)
	//查询数据
	rows, err := db.Query("SELECT * FROM userinfo")
	checkErr(err)
	for rows.Next() {
		var uid int
		var username string
		var department string
		var created string
		err = rows.Scan(&uid, &username, &department, &created)
		checkErr(err)
		fmt.Println(uid)
		fmt.Println(username)
		fmt.Println(department)
		fmt.Println(created)
	}
	//删除数据
	stmt, err = db.Prepare("delete from userinfo where uid=?")
	checkErr(err)
	res, err = stmt.Exec(id)
	checkErr(err)
	affect, err = res.RowsAffected()
	checkErr(err)
	fmt.Println(affect)

	db.Close()

}

func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}
GO连接数据库的一些格式
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

MYSQL死锁问题

如果insert或update用到了同样的索引也会造成死锁
比如
update table_a set name = ‘test1’ where id = 300; //用到了table_a的id主键索引
insert into table_b (a_id,`name`) (select id,name from table_a where id >=200)
ON DUPLICATE KEY UPDATE a_id = values(a_id)//同样用到了table_a的id主键
所以会导致死锁

行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。

排查可以执行如下命令查看

show engine innodb status

 

MySQL触发器

1、触发器定义就不说了,既然能看到我这个文章就肯定明白这个定义了。用途也不多说,来看继续向下看吧!
触发器语法:
CREATE TRIGGER <触发器名称> 触发器必须有名字,最多64个字符,可能后面会附有分隔符.
{ BEFORE | AFTER } 触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE } 同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。

ON <表名称> 触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活.
注意:我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW 触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句> 触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

Continue reading

Mac OS X安装php工作环境

1.安装Apche

Sudo apachectl start

2.开启php支持

sudo vi /etc/apache2/httpd.conf

找到LoadModule php5_module libexec/apache2/libphp5.so 去掉前面的#

3.编辑PHP.ini

sudo cp /etc/php.ini.default /etc/php.ini

4.重启Aache测试环境

sudo apachectl restart

编写文件 sudo vi /Library/WebServer/Document/i.php内容是

<?php

echo phpinfo();

?>

5.配置网站根目录到/var/www(注意这里的www是我自己建立的,因为我习惯使用这个目录)

sudo vim /etc/apache2/httpd.conf

文档最后添加:

NameVirtualHost *:80

<VirtualHost *:80>

DocumentRoot /var/www

ServerName localhost

<Directory />

Options FollowSymLinks

AllowOverride All

</Directory>

<Directory /var/www>

Options Indexes FollowSymLinks

AllowOverride All

Order allow,deny

allow from all

</Directory>

</VirtualHost>

6.安装mysql

http://www.mysql.com/downloads/mysql/

下载dmg的可以直接安装

安装教程http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html

安装之后mysqlroot密码貌似是空的

需要使用/usr/local/mysql/bin/mysqladmin -u root password “mypass”;

7.安装zendstudi教程http://www.evget.com/zh-CN/Info/catalog/18264.html

备注:使用PHP连接MySQL可能会报错“Can’t connect to local MySQL server through socket ‘/var/mysql/mysql.sock’”,或者使用localhost无法连接MySQL而需要127.0.0.1,原因是连接时候php默认去找/var/mysql/mysql.sock了,但是MAC版本的MYSQL改动了文件的位置,放在/tmp下了。处理办法是按如下修改php.ini:

mysql.default_socket = /tmp/mysql.sock

mysql管理工具使用MySQL Workbench的安装

或者使用phpmyadmin或者使用navaicat

如果phpmyadmin提示2002错误,修改confin.inc.php

将$cfg[‘Servers’][$i][‘host’] = ‘localhost’;
改为$cfg[‘Servers’][$i][‘host’] = ‘127.0.0.1’;

Mysql命令行操作教程【二】

1.连接
mysql -u root -h localhost -p
2.建立数据库
create database test
3.建立数据表
create table if not exists test ( id int(10) not null primary key auto_increment comment ‘这里是注释’, subject varchar(20) not null ) engine=myisam default charset=utf8 comment=’表注释在这里’;
4.查看表
show tables;
5.查看表结构
desc test;(其中test是表明)
6.重新命名表
alter table test rename study;

Mysql触发器

MySQL触发器

1、 触发器作用

日志跟踪:使用数据库记录apache等日志,可以使用自动插入操作

验证数据:触发器可以验证更新数据库要存入的数据

引用完整:验证数据完整可以使用程序验证,但是触发器也可以搞定

2、 前触发器和后触发器

前触发器和后触发器区别触发器在发生的事件前后关系

3、 创建触发器

语法:

CREATE [DEFINER={USER|CURRENT_USER}]

TRIGGER<trigger name>

{BEFORE|AFTER}

{INSERT|UPDATE|DELETE}

ON<table name>

FOR EACH ROW

<triggered SQL statement>

CREATE TRIGGER语句需要SUPER权限

4、 查看触发器

SHOW TRIGGERS和INFORMATION_SCHEMA可以查看现有的触发器

5、 删除触发器

语法:DROP TRIGGER [IF EXISTS] table_name.trigger_name

Mysql数据类型以及字段属性大盘点

1、  时间和日期

l  Date:存储日期信息,标准形式YYYY-MM-DD,但是形如20120808以及2012*08*08或者2012!08!08。也就是说不论中间用何种分隔,存储到数据库之后都是2012-08-00

l  Datetime:存储日期和时间组合,标准格式YYYY-MM-DD HH:MM:SS。Datetime取值范围在1000-01-01 00:00:00~9999-12-31 23:59:59

l  Time:存储时间信息,-838:59:59~838:59:59范围

l  Timstamp:和datetime的区别在于插入和更新会自动回去当前时间

l   Year:存储年份信息,有两位和4位之分

2、  数字数值类型

Bool是tinyint的别名,用于赋值0或者1

Bigint:数据类型提供了mysql最大的整数范围,取值范围分为有符号:-9223372036854775808~9223372036854775807,无符号是0~18446744073709551615

Int:提供了第二大的整数范围

Mediumint:提供了第三大整数

SMAllint:提供了第四大整数范围

Tinyint:提供了最小的整数范围,值在-128-127(分清楚范围就不担心数据够不够存储)

Decimal,double,float:存储浮点数

3、  字符串类型

Char:提供了固定长度的字符串类型,最大255字符

Varchar:可变长度的字符串类型,最大255个字符(尽量使用char而不是varchar)

Longblob:提供了最大的二进制字符串存储,最大4294967295个字符

Longtext:提供了最大的非二进制字符串存储,范围4294967295个字符

Mediumblob:提供了第二大二进制字符串存储

Mediumtext:提供了第二大非二进制字符串存储

Blob:提供第三大二进制字符串存储

Text:提供第三大非二进制字符串存存储

Tinyblob:提供最小的二进制字符串存储最多255个字符

Tinytext:提供最小的非二进制字符串存储最多255个字符

Enum:枚举类型,最多可以有65535组不同的数据

Set:枚举类型,最多可以设置有64个成员

  Continue reading

Ubuntu10.10下安装黄金组合(Apache2+Mysql+php5+phpmyadmin)

1.安装apache

sudo apt-get install apache2
需要下载 3,287kB 的软件包。
解压缩后会消耗掉 10.1MB 的额外空间。
您希望继续执行吗?[Y/n]y
然后安装继续
sudo /etc/init.d/apache2 restart(重启服务器,在地址栏输入:http://localhost/或者输入127.0.0.1)
看到It works?那就对了。(对了,var这个时候应该会多了一个文件夹www)

2.安装php5

sudo apt-get install php5 php5-mysql
您希望继续执行吗?[Y/n]y
你不会选择n吧?(如果你不想安装就选择吧。。。)
然后继续安装 Continue reading