mysql怎么定义模式 盗圣传人

SQL和MySQL有什么区别?

mssql和mysql的区别

创新互联建站主要从事成都做网站、网站设计、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务烈山,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

mssql 是微软的那个 SQL Server,运行于windows 2000,2003等平台

mysql 是个开源的数据库Server,可运行在windows平台、unix\\linux平台,其标准版是免费的,可以到 看看

asp\\php只是一种解释语言,不一定mssql不能用php,也不一定mysql非得用php,只不过asp-mssql,php-mysql是一种常用的组合

SQL数据库完全手册_1

SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。

##1 二、SQL数据库数据体系结构

SQL数据库的数据体系结构基本上是***结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row);属性称为“列”(column)。名称对称如^00100009a^:

##1 三、SQL语言的组成

在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:

1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。

3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。

4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。

5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。

6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。

##1 四、对数据库进行操作

SQL包括了所有对数据库的操作,主要是由4个部分组成:

1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。

2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。

3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。

4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。

下面我们将分别介绍:

##2 (一)数据定义

SQL数据定义功能包括定义数据库、基本表、索引和视图。

首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)

1.数据库的建立与删除

(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:

CREATE DATABASE 数据库名 〔其它参数〕

其中,数据库名在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。

例:要建立项目管理数据库(xmmanage),其语句应为:

CREATE DATABASE xmmanage

(2) 数据库的删除:将数据库及其全部内容从系统中删除。

其语句格式为:DROP DATABASE 数据库名

例:删除项目管理数据库(xmmanage),其语句应为:

DROP DATABASE xmmanage

2.基本表的定义及变更

本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。

(1)基本表的定义:基本表是非导出关系,其定义涉及表名、列名及数据类型等,其语句格式为:

CREATE TABLE〔数据库名.〕表名

(列名 数据类型 〔缺省值〕 〔NOT NULL / NULL〕

〔,列名 数据类型 〔缺省值〕 〔NOT NULL / NULL〕〕......

〔,UNIQUE (列名〔,列名〕......)〕

〔,PRIMARY KEY(列名)〕

〔,FOREIGN KEY(列名〔,列名〕......)REFERENCE 表名(列名〔,列名〕......)〕

〔,CHECK(条件)〕 〔其它参数〕)

其中,〈数据库名〉.〕指出将新建立的表存放于该数据库中;

新建的表由两部分组成:其一为表和一组列名,其二是实际存放的数据(即可在定义表的同时,直接存放数据到表中);

列名为用户自定义的易于理解的名称,列名中不能使用空格;

数据类型为上面所介绍的几种标准数据类型;

〔NOT NULL/NULL〕指出该列是否允许存放空值,SQL语言支持空值的概念,所谓空值是“不知道”或“无意义”的值,值得注意的是数据“0”和空格都不是空值,系统一般默认允许为空值,所以当不允许为空值时,必须明确使用NOT NULL;

〔,UNIQUE〕将列按照其规定的顺序进行排列,如不指定排列顺序,则按列的定义顺序排列;

〔PRIMARY KEY〕用于指定表的主键(即关系中的主属性),实体完整性约束条件规定:主键必须是唯一的,非空的;

〔,FOREIGN KEY (列名〔,列名〕......) REFERENCE表名(列名〔,列名〕......)〕是用于指定外键参照完整性约束条件,FOREIGN KEY指定相关列为外键,其参照对象为另外一个表的指定列,即使用REFERENCE引入的外表中的列,当不指定外表列名时,系统将默认其列名与参照键的列名相同,要注意的是:使用外键时必须使用参照,另外数据的外键参照完整性约束条件规定:外键的值要么与相对应的主键相同,要么为空值(具体由实现系统不同而异)

〔,CHECK〕用于使用指定条件对存入表中的数据进行检查,以确定其合法性,提高数据的安全性。

例:要建立一个学生情况表(student)

CREATE TABLE student //创建基本表student

(st_class CHAR(8),// 定义列st_class班级,数据类型为8位定长字符串

st_no CHAR(10) NOT NULL,//定义列st_no学号,类型为10位定长字符串,非空

st_name CHAR(8) NOT NULL,//定义列st_name姓名,类型为8位定长字符串,非空

st_sex CHAR(2),//定义列st_sex性别,类型为2位定长字符串

st_age SMALLINT,//定义列st_age年龄,类型为短整型

PRIMARY KEY (st_no))//定义st_no学号为主键。

例:要建立课程设置表(subject)

CREATE TABLE subject//创建基本表subject

(su_no CHAR(4) NOT NULL,// 定义列su_no课号,类型为4位定长字符串,非空

su_subject CHAR(20) NOT NULL,// 定义列su_subject课程名,类型为20位定长字符串,非空

su_credit INTEGER,// 定义列su_credit学分,类型为长整数

su_period INTEGER,//定义列su_period学时,类型为长整数

su_preno CHAR(4),//定义列su_preno先修课号,类型为4位定长字符串

PRIMARY KEY(su_no))//定义su_no课号为主键。

例:要建立学生选课表(score)

CREATE TABLE score //创建基本表score

(st_no CHAR(10),//定义列st_no学号,类型为10位定长字符串

su_no CHAR(4),//定义列su_no课号,类型为4位定长字符串

sc_score INTEGER NULL,//定义列sc_score,类型为长整形,可以为空值

FOREIGN KEY (st_no) REFERENCE student,//从表student中引入参照外键st_no,以确保本表与表student的关联与同步

FOREIGN KEY (suno) REFERENCE subject)//从表subject中引入参照外键su_no,以确保本表与表subject的关联与同步

(2)基本表的删除:用以从数据库中删除一个基本表及其全部内容,其语句格式为:

DROP TABLE〔数据库名.〕表名

例如:将上面建立的表都删除

DROP TABLE student,subject,score

(3)基本表的修改:在基本表建立并使用一段时间后,可能需要根据实际要求对基本表的结构进行修改,即增加新的属性或删除属性。

增加属性的语句格式为:

ALTER TABLE 〔数据库名.〕表名 ADD

(列名 数据类型 〔缺省值〕 〔NOT NULL / NULL〕

〔,列名 数据类型〔缺省值〕〔NOT NULL / NULL〕〕......

〔,UNIQUE (列名〔,列名〕......)〕

〔,PRIMARY KEY(列名)〕

〔,FOREIGN KEY(列名〔,列名〕......) REFERENCE 表名(列名〔,列名〕......)〕

〔,CHECK(条件)〕〔其它参数〕)

例如:在基本表student中加入列stborn出生日期,数据类型为DATE,且不能为空值

ALTER TABLE student ADD (stborn DATE NOT NULL)

删除属性的语句格式为:

ALTER TABLE 〔数据库名.〕表名 DROP

( 列名 数据类型 〔缺省值〕〔NOT NULL / NULL〕

〔,列名 数据类型 〔缺省值〕〔NOT NULL / NULL〕〕......)

例如:将基本表student中的列st_age删除

ALTER TABLE student DROP (st_age)

3.视图定义与删除

在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。这种构造方式必须使用SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在系统的数据中,而并不直接存储视图对应的数据,直到用户使用视图时才去求得对应的数据。

(1)视图的定义:定义视图可以使用CREATE VIEW语句实现,其语句格式为:

CREATE VIEW 视图名 AS SELECT语句

从一个基本表中导出视图:

例:从基本表student中导出只包括女学生情况的视图

CREATE VIEW WOMANVIEW AS //创建一个视图WOMANVIEW

SELECT st_class,st_no,st_name,st_age //选择列st_class,st_no,st_name,st_age显示

FROM student //从基本表student引入

WHERE st_sex=‘女’//引入条件为性别为“女”,注意字符变量都使用单引号引用

从多个基本表中导出视图:

例如:从基本表student和score中导出只包括女学生且分数在60分以上的视图

CREATEVIEW WOMAN_SCORE AS //定义视图WOMANSCORE

SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有选择性显示相关列

FROM student.score //从基本表student和score中引入

WHERE student.st_sex=‘女’AND score.sc_score=60 AND student.st_no=score.st_no //选择条件:性别为“女” 且分数在60分以上。并使用st_no将两表联系起来。

以后如果进行这一视图的应用,则只需使用语句

SELECT * FROM WOMAN_SCORE //其中“*”为通配符,代表所有元素

(2)视图的删除:用于删除已不再使用的视图,其语句格式如下:

DROP VIEW 视图名

例:将上面建立的WOMAN_SCORE视图删除

DROP VIEW WOMAN_SCORE

4.索引的定义与删除

索引属于物理存储概念,而不是逻辑的概念。在SQL中抛弃了索引概念,直接使用主键概念。值得一提的是,有些关系DBMS同时包括索引机制和主键机制,这里我们推荐使用主键机制,因为它对系统资源占用较低且效率较高。

(1)索引的定义:索引是建立在基本表之上的,其语句格式为:

CREATE 〔UNIQUE〕 INDEX 索引名 ON

〔数据库名.〕表名(列名 〔ASC/DESC〕〔,列名 〔ASC/DESC〕〕......)

这里,保留字UNIQUE表示基本表中的索引值不允许重复,若缺省则表示索引值在表中允许重复;DESC表示按索引键降序排列,若缺省或ASC表示升序排列。

例:对基本表student中的st_no和st_age建立索引,分别为升序与降序,且索引值不允许重复

CREATE UNIQUE INDEX STINDEX ON//创建索引STINDEX

student(st_no ASC,st_age DESC)//对student中的st_no和st_age建立索引

(2)索引的删除:

DROP INDEX 索引名

例:删除上面建立的索引STINDEX

DROP INDEX STINDEX

##2 (二)数据查询

SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能。SELECT语句的完整语法,可以有6个子句。完整的语法如下:

SELECT 目标表的列名或列表达式集合

FROM 基本表或(和)视图集合

〔WHERE条件表达式〕

〔GROUP BY列名集合

〔HAVING组条件表达式〕〕

〔ORDER BY列名〔集合〕…〕

整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列。

mysql 怎么定义变量

一、局部变量

局部变量一般用在sql语句块中,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。

局部变量一般用declare来声明,可以使用default来说明默认值。

二、用户变量

用户变量的作用域要比局部变量要广。用户变量可以作用于当前整个连接,但是当当前连接断开后,其所定义的用户变量都会消失。

用户变量使用如下(这里我们无须使用declare关键字进行定义,可以直接这样使用):

select @变量名

对用户变量赋值有两种方式,一种是直接用"="号,另一种是用":="号。其区别在于使用set命令对用户变量进行赋值时,两种方式都可以使用;当使用select语句对用户变量进行赋值时,只能使用":="方式,因为在select语句中,"="号被看作是比较操作符。

mysql 如何定义date 类型 例子

以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。

1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间

2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据

3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式

4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型

5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片

1. DBLE 启动时,读取用户在 rule.xml 配置的起始时间 sBeginDate、终止时间 sEndDate 和每个 MySQL 分片承载多少天数据 sPartionDay

2. 根据用户设置,建立起以 sBeginDate 开始,每 sPartionDay 天一个分片,直到 sEndDate 为止的一个环,把分片串联串联起来

3. 读取用户在 rule.xml 配置的 defaultNode

4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的日期类型

5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上

与MyCat的类似分片算法对比

中间件

DBLE

MyCat

分片算法种类 date 分区算法 按日期(天)分片

两种中间件的取模范围分片算法使用上无差别

开发注意点

【分片索引】1. 必须是字符串,而且 java.text.SimpleDateFormat 能基于用户指定的 dateFormat 来转换成 java.util.Date

【分片索引】2. 提供带状模式和环状模式两种模式

【分片索引】3. 带状模式以 sBeginDate(含)起,以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,理论上分片数量可以无限增长,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)

【分片索引】4. 环状模式以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,以 sBeginDate(含)到 sEndDate(含)的时间长度除以单个分片长度得到恒定的分片数量,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)

【分片索引】5. 无论哪种模式,分片索引字段的格式化字符串 dateFormat 由用户指定

【分片索引】6. 无论哪种模式,划分不是以日历时间为准,无法对应自然月和自然年,且会受闰秒问题影响

运维注意点

【扩容】1. 带状模式中,随着 sBeginDate 之后的数据出现,分片数量的增加无需再平衡

【扩容】2. 带状模式没有自动增添分片的能力,需要运维手工提前增加分片;如果路由策略计算出的分片并不存在时,会导致失败

【扩容】3. 环状模式中,如果新旧 [sBeginDate,sEndDate] 之间有重叠,需要进行部分数据迁移;如果新旧 [sBeginDate,sEndDate] 之间没有重叠,需要数据再平衡

配置注意点

【配置项】1. 在 rule.xml 中,可配置项为 propertyname="sBeginDate" 、 propertyname="sPartionDay" 、 propertyname="dateFormat" 、 propertyname="sEndDate" 和 propertyname="defaultNode"

【配置项】2.在 rule.xml 中配置 propertyname="dateFormat",符合 java.text.SimpleDateFormat 规范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate

【配置项】3.在 rule.xml 中配置 propertyname="sBeginDate",必须是符合 dateFormat 的日期字符串

【配置项】4.在 rule.xml 中配置 propertyname="sEndDate",必须是符合 dateFormat 的日期字符串;配置了该项使用的是环状模式,若没有配置该项则使用的是带状模式

【配置项】5.在 rule.xml 中配置 propertyname="sPartionDay",非负整数,该分片策略以 86400000 毫秒(24 小时整)作为一份,而 sPartionDay 告诉 DBLE 把每多少份放在同一个分片

【配置项】6.在 rule.xml 中配置 propertyname="defaultNode" 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义


文章名称:mysql怎么定义模式 盗圣传人
文章出自:http://azwzsj.com/article/doehgjh.html