Mysql存储过程(五)——SEQUENCE的实现
在
oracle
中,
sequence
提供多表多字段可共用一个不重复值。
Mysql
中存在自增列,基本可以满足
PK
的要求。但自增列存在限制:
a.
只能用于表中的一个字段,一张不能同时存在两个以上的自增列
;
b.
自增列必须被定义为
key
(
PK
或
FK
)
;
c.
自增列不能被多个表共用
;
d.
当
insert
语句不包括自增字段或将其值设置为
NULL
时,该值会自动填上。
在不要求字段顺序递增的情况下,可以在
Mysql
中实现序列:
Sql
code 5-1:
DROP TABLE IF EXISTS sequence;
-- 建sequence表,指定seq列为无符号大整型,可支持无符号值:0(default)到18446744073709551615(0到2^64–1)。
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value BIGINT UNSIGNED NOT NULL DEFAULT 0,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name) -- 不允许重复seq的存在。
) ENGINE=InnoDB;
DELIMITER /
DROP FUNCTION IF EXISTS currval /
CREATE FUNCTION currval(seq_name VARCHAR(50))
RETURNS BIGINT
BEGIN
DECLARE value BIGINT;
SELECT current_value INTO value
from sequence
WHERE upper(name) = upper(seq_name); -- 大小写不区分.
RETURN value;
END;
/
DELIMITER ;
DELIMITER /
DROP FUNCTION IF EXISTS nextval /
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS BIGINT
BEGIN
DECLARE value BIGINT;
UPDATE sequence
SET current_value = current_value + increment
WHERE upper(name) = upper(seq_name);
RETURN currval(seq_name);
END;
/
DELIMITER ;
DELIMITER /
DROP FUNCTION IF EXISTS setval /
CREATE FUNCTION setval (seq_name VARCHAR(50), value BIGINT)
RETURNS BIGINT
BEGIN
UPDATE seque
相关文档:
MySQL 添加外键
DROP TABLE IF EXISTS `nation`;
CREATE TABLE `nation`(
`pii_Nation` smallint(2) unsigned NOT NULL default '0',
`pii_NatinoName` varchar(40) NOT NULL default '',
PRIMARY KEY (`pii_Nation`)
)ENGINE=InnoDB DEFAULT CHARSE ......
要安装 MySQL,可以在终端提示符后运行下列命令:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-mysql
// 安装php5-mysql 是将php和mysql连接起来
一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行: ......
mysql error number 2003
Can't connect to MySQL server xxx.xxx.xxx.xxx (10061)
在ubuntu 9.04中默认安装了mysql,默认只能本地访问,google了一下:
采用
登录到MySQL服务器端,在mysql库下执行
grant all on *.* to 'remote'@'172.16.21.39' identified by 'password';
即可
如果要设置为 ......
mysqldump -u root -p -e --max_allowed_packet=1048576 --net_buffer_length=16384 msiptv>c:\thedump.sql
问题:在使用mysql过程中备份数据,一般都是被分成sql语句文本,但mysqldump命令默认是非常机械地处理语句的组织。导致重新导入的时候效率太低。比如10万条数据就要执行10万次的sql语句,耗时太多。
原理:
......
想测试下表分区功能跟自主的分布式的性能差异,进行了简单的测试,前后花费了半个小时,可能测试数据不太准确。
【测试环境】
操作系统:Windows XP SP2
MySQL: 5.1.19-beta-community-nt-debug
【测试过程】
查看MySQL版本:
mysql> select version();
+--------------------------------+
| version() ......