在
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,
......
Java代码
mysql> select version(),current_date;
查询mysql的版本号 和 日期
mysql> select version();
查询mysql的版本号
select now();
查询当前日期和准确的时间
Java代码
mysql> select version(),current_date;
查询mysql的版本号 和 日期
mysql> select version();
查询mysql的版本号
select now();
查询当前日期和准确的时间
mysql> select version(),current_date;
查询mysql的版本号 和 日期
mysql> select version();
查询mysql的版本号
select now();
查询当前日期和准确的时间
新建或删除一个数据库
Java代码
Mysql>create database mydb;
Mysql> drop database mydb;
Java代码
Mysql>create database mydb;
Mysq ......
<!-- [if gte mso 10]>
以下内容来自网络,已测试。
结论:
mysql
行锁不安全,随数据的变化,可能会出现行锁无效!因此,非确定情况下,不要对
mysql
表加行锁来控制业务逻辑。
由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统。假设
id=1
的这本书库存为
1
,但是有
2
个人同时来借这本书,此处的逻辑为
Select
restnum
from
book
where
id =1 ;
--
如果
restnum
大于
0
,执行
update
Update
book
set restnum=restnum-1 where
id=1 ;
问题就来了,当
2
个人同时来借的时候,有可能第一个人执行
select
语句的时候,第二个人插了进来,在第一个人没来得及更新
book
表的时候,第二个人查到数据了,其实是脏数据,因为第一个人会把
restnum
值减
1
,因此第二个人本来应该是查到
id=1
的书
restnum
为
0
了,因此不会执行
update
,而会告诉它
id=1
的书没有库存了,可是数据库哪懂这些,数据库只负责执行一条条
SQL
语句,它才不管中间有没有其他
sql
语句插进来,它也不 ......
<!-- [if gte mso 10]>
MySQL5.1.x
版本中引入了一项新特性
EVENT
,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。此功能是对
Oracle
的
Job/Schedule
的模仿,
5.1.X
版本以上才支持。
创建
EVENT
语法如下:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT ''comment'']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval]
| EVERY interval
[STARTS timestamp [+ INTERVAL interval]]
[ENDS timestamp [+ INTERVAL interval]]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
例如创建一个每
30
秒清空
tableA
数据的任务
CREATE EVENT E_D ......
作者:宣兆鹏
--------------------------------------------------------------------------------------------------------------------------------------------
今天在本本上安装MYSQL,在安装过程出现了一些奇怪的问题,因此在这里分享整个安装流程与错误解决方法。
MySQL版本:5.1.40-community
1、下载安装包并安装
如果是普通用户,请在安装时,选择“Typical”,即典型类型,MYSQL将安装到C盘下Program Files下的My SQL文件夹内。
2、安装完毕后,进行的设置
1)进入CMD
2)CD到c:\program files\MySQL\MySQL Server 5.1\bin下
3)输入“mysqld -install”,即MYSQL成为系统服务,作为自动运行的服务。
4)进入MySQL Server Instance configure Wizard中,进行设置,选择"Standard"模式进行设置,除非你是专家,就选"Detail"模式。
5)下一步后,会有一个页面让你输入密码,原始的root的密码为空,这里假定你需要设置的密码为"sa"
6)下一步后, ......
MYSQL自增列
1.关键字 :auto_increment
2.自增用法
例:
CREATE TABLE animals ( id mediumint not null auto_increment,
name char(30) not null,
primary key (id));
3.关于自增
Q:怎么获得当前的自增的最大值?
A:select @@identity
Q:怎么获得table的当前自增最大值?
A:select max(id) from table
Q:对自增的理解?
A: 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。
使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。
@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select@@identity得到的值就是101。
注:LAST_INSERT_ID是一个函数.
用法:LAST_INSERT_ID()
Q:MYSQL中的LAST_INSERT_ID()和MSSQL中的@@IDENTITY
A:按照应用需要,常常要取得刚刚插入数据库表里的记录的ID值。
在MYSQL中可以使用LAST_INSERT_ID()函数,在 ......