第2章数据库和表.ppt
《第2章数据库和表.ppt》由会员分享,可在线阅读,更多相关《第2章数据库和表.ppt(66页珍藏版)》请在三一文库上搜索。
1、第2章 数据库和表,2.1 命令行方式创建数据库和表,2.2 界面创建数据库和表,2.3 有关表结构,补充知识,SQL(Structured Query Language) 的字面意思是结构化的查询语言,但它的功能并不仅仅是查询,它是关系数据库管理系统的标准语言。 1、SQL对象命名约定 SQL对象包括数据库、表、视图、属性名等。这些对象名必须符合一定规则或约定,一般应遵守下列规则。 数据对象名可以为1-30个字符(在MS Access为64个字符),但有些DBMS限制为8个字符,例如:Oracle数据库就是如此。 数据对象名应以字母开头,其余字符可以由字母、数字、下划线组成。 2、SQL语句
2、结构和书写准则 在SQL语句语法格式中的一些约定符号: 尖括号“”中的内容为实际语义。 中括号“ ”中的内容为任选项。 ,. . .意思是“等等”,即前面的项可以重复。,补充知识,大括号“”与竖线“|”表明此处为选择项,在所列出的各项中仅需选择一项。 例如: A | B | C | D 意思是A、B、C、D中取其一。 SQL中的数据项(包括列项、表和视图)分隔符为“,”;其字符串常数的定界符用单引号“”表示。 在编写SQL语句时,遵从某种准则以提高语句的可读性,使其易于编辑,是很有好处的。 以下是一些通常的准则: SQL语句对大小写不敏感 为了提高SQL语句的可读性,子句开头的关键字通常采用大
3、写形式。 SQL语句可写成一行或多行,习惯上每个子句占用一行。 关键字不能在行与行之间分开,并且很少采用缩写形式。 SQL语句的结束符为分号“;”,分号必须放在语句中的最后一个子句后面,但可以不在同一行。,补充知识,3、mysql 数据库环境 (1)、查看服务器上当前存在什么数据库: Show databases; Mysql数据库中自带的两个数据库: Mysql数据库:描述用户存取权限 ; Test数据库:经常作为一个工作区提供给用户试试身手;,2.1 命令行方式创建数据库和表,2.1.1 创建数据库 1. 创建数据库 使用CREATE DATABASE命令可以创建数据库。 语法格式:cre
4、ate database db_name 叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。 注意:在Unix下,数据库名字是区分大小写的(不像SQL关键词)。 【例2.1】 创建一个名为test1的数据库。 MySQL不允许两个数据库使用相同的名字,使用IF NOT EXISTS从句可以不显示错误信息,例如:,2.1.1 创建数据库,创建了数据库之后使用USE命令可指定当前数据库。 语法格式: USE db_name; 说明:这个语句也可以用来从一个数据库“跳转”到另一个数据库,在用CREATE DATABASE语句创建了数据库之后,该数
5、据库不会自动成为当前数据库,需要用这条USE语句来指定。 注意:在MySQL中,每一条SQL语句都以“;”作为结束标志。,2. 修改数据库 数据库创建后,如果需要修改数据库的参数,可以使用ALTER DATABASE命令。 语法格式: ALTER DATABASE | SCHEMA db_name alter_specification , alter_specification . 其中alter_specification: DEFAULT CHARACTER SET charset_name | DEFAULT COLLATE collation_name ALTER DATABASE用
6、于更改数据库的全局特性,这些特性储存在数据库目录中的db.opt文件中。用户必须有对数据库进行修改的权限,才可以使用 ALTER DATABASE。修改数据库的选项与创建数据库相同,功能不再重复说明。如果语句中数据库名称忽略,则修改当前(默认)数据库。,2.1.1 创建数据库,【例2.2】 修改数据库mydata(假设mydata已经创建)的默认字符集和校对规则。 ALTER DATABASE mydata DEFAULT CHARACTER SET gb2312 DEFAULT COLLATE gb2312_chinese_ci; 3. 删除数据库 已经创建的数据库需要删除,使用DROP D
7、ATABASE命令。 语法格式:DROP DATABASE IF EXISTS db_name 其中,db_name是要删除的数据库名。可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息。示例如下: 注意:这个命令必须小心使用,因为它将删除指定的整个数据库,该数据库的所有表(包括其中的数据)也将永久删除。,补充知识,1、数据类型种类 数值型 分为整型和浮点型 整型: 可以由十进制和十六进制表示 整型由数字序列组成,如:1,100。 由十六进制表示方法:0x且后面加19和AF 的任意数字或字母,并且0x中的X不能大写。 浮点型: 浮点数由一个数字加一个小数点再加上一
8、个数字组成。两个数字序列不能同时为空。 字符串: 由单引号或者双引号括起来的字符或者数字。如:”abc”,abc10 字符串中要用转义字符才能表示的特殊符号,补充知识,日期和时间值 存储如“2005 -1-1” 或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。 NULL值 一种无类型的值,表示“空,什么也没有”。,补充知识,2、数值列类型 MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。 数值列类型 所有数值列类型的类型名及其说明和所占的字节数见下表:,数值列类型包括整型和浮点型
9、 说明:TINYINT, SAMLLINT, MEDIUMINT, INT, BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。,例如:INT(4) 意思是指定了一个具有4个字符显示宽度的INT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。,AUTO_INCREMENT 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一
10、个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。 举例: create table t(id int auto_increment not null primary key); UNSIGNED 无符号,此属性禁用负值,将数值的取值范围从零开始。 举例: create table t(num tinyint , num2 tinyint unsigned);,数值列的完整性约束,NULL和NOT NULL 默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果
11、指定了NOT NULL,则必须在插入值时在此字段添入值,不允许插入NULL值。 DEFAULT 可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。 ZEROFILL 前导零填充数值类型值以达到列的显示宽度。 举例: create table test2(num1 int default 1,num2 int zerofill);,字符串列类型 所有字符串列类型及其说明和所占的字节数见下表:,说明: 对于可变长的字符串类型,其长度取决于实际存放在列中的值的长度。此长度在上表中用L来表示。附加若干额外字节,用来记录字符串长度,也就是说总长度等于Ln(n1、
12、2、3、4、8),CHAR和VARCHAR类型 CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理存储的方式: CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。 VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短 )。,BLOB和TEXT类型 BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BOLOB按照二进制编码排序(区分大小写),TEXT
13、按照字符文本模式排序(不区分大小写)。 ENUM 和SET类型 是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用),字符串列类型的可选属性 BINARY 使用此属性可以使列值作为二进制串处理,即看成BLOB类型。 NULL 和NOT NULL 同数值型功能相同 DEFAULT 同数值型功能相同,日期和时间列类型 所有时间和日期列类型的类型名及其说明和所占的字节数见下表 :,说明: 每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加 表示日期时必须先按:年,月,日的顺序给出 DATE ,TIME ,DATETIME
14、分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”, “hh:mm:ss”和“YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要给出。 TIMESTAMP 时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录,总结:常用数据类型,2.1.2 创建表,创建表使用CREATE TABLE命令。语法格式: CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name ( column_definition , .
15、 | index_definition ) table_option select_statement; 说明: TEMPORARY:该关键字表示用CREATE命令新建的表为临时表。不加该关键字创建的表通常称为持久表。 IF NOT EXISTS:只有该表目前尚不存在时才执行CREATE TABLE操作。 table_name:要创建的表的表名。 column_definition:列定义,包括列名、数据类型,可能还有一个空值声明和一个完整性约束。 index_definition:表索引项定义,主要定义表的索引、主键、外键等。 table_option:用于描述表的选项。 select_st
16、atement:可以在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表。,2.1.2 创建表,列定义column_definition格式如下: col_name type NOT NULL | NULL DEFAULT default_value AUTO_INCREMENT UNIQUE KEY | PRIMARY KEY COMMENT string reference_definition 说明: col_name:表中列的名字。 type:列的数据类型,有的数据类型需要指明长度n,并用括号括起。 AUTO_INCREMENT:设置自增属性,只有整型列
17、才能设置此属性。当插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。 NOT NULL | NULL:指定该列是否允许为空。如果不指定,则默认为NULL。,2.1.2 创建表, DEFAULT default_value:为列指定默认值,默认值必须为一个常数。其中,BLOB和TEXT列不能被赋予默认值。如果没有为列指定默认值,MySQL自动地分配一个。如果列可以取NULL值,默认值就是NULL。如果列被声明为NO
18、T NULL,默认值取决于列类型: (1)对于没有声明AUTO_INCREMENT属性的数字类型,默认值是0。对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值。 (2)对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,默认值是当前的日期和时间。 (3)对于除ENUM的字符串类型,默认值是空字符串。对于ENUM,默认值是第一个枚举值。 UNIQUE KEY | PRIMARY KEY:PRIMARY KEY和UNIQUE KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主
19、键一定要为NOT NULL。 COMMENT string:对于列的描述,string是描述的内容。 reference_definition:指定参照的表和列。,2.1.2 创建表,表选项table_option定义如下: ENGINE | TYPE = engine_name /*存储引擎*/ | AUTO_INCREMENT = value /*初始值*/ | AVG_ROW_LENGTH = value /*表的平均行长度*/ | DEFAULT CHARACTER SET charset_name COLLATE collation_name /*默认字符集和校对*/ | CHECK
20、SUM = 0 | 1 /*设置为1表示求校验和*/ | COMMENT = string /*注释*/ | CONNECTION = connect_string /*连接字符串*/ | MAX_ROWS = value /*行的最大数*/ | MIN_ROWS = value /*列的最小数*/ | PACK_KEYS = 0 | 1 | DEFAULT | PASSWORD = string /*对.frm文件加密*/ | DELAY_KEY_WRITE = 0 | 1 /*对关键字的更新*/ | ROW_FORMAT = DEFAULT|DYNAMIC|FIXED|COMPRESSED
21、|REDUNDANT|COMPACT /*定义各行应如何储存*/ | UNION = (tbl_name,tbl_name.) /*表示哪个表应该合并*/ | INSERT_METHOD = NO | FIRST | LAST /*是否执行INSERT语句*/ | DATA DIRECTORY = absolute path to directory /*数据文件的路径*/ | INDEX DIRECTORY = absolute path to directory /*索引的路径*/,2.1.2 创建表,关于完整性约束条件,需要说明以下几点: 完整性约束条件分为列级完整性约束条件和表级完整性
22、约束条件,它们之间的区别在于:列级完整性约束条件只能用于列,而表级完整性约束条件能够用于一张表中的多列。 SQL的完整性约束条件有以下几种: NOT NULL 或NULL约束 这个约束条件为列级完整性约束条件。NOT NULL 为不允许该列存在空值,而NULL 为允许该列存在空值。 UNIQUE约束 UNIQUE约束是惟一性约束。即不允许表中的某一列或者某几列有重复的属性值。 DEFAULT约束 DEFAULT约束为默认值约束,是列级完整性约束条件。当向表中插入一个新行时,如果对于特定列没有指定数值,则使用DEFAULT子句指定的默认值。,2.1.2 创建表,CHECK约束 CHECK约束是检
23、验约束,为插入列中的数据指定约束条件。 PRIMARY KEY 约束 PRIMARY KEY 约束即主键约束,是表级完整性约束条件。表中的主键可以是一列或列组,PRIMARY KEY 约束可以使得主键的数值在每一行中各不相同。 注意:PRIMARY KEY约束类似于UNIQUE约束,差别在于PRIMARY KEY约束中的列不可以为空。 FOREIGN KEY约束 FOREIGN KEY约束是参照完整性约束,是用于约束外键的,也是表级完整性约束条件。,2.1.2 创建表,在创建一个新的MySQL数据表时,可以为它设置一个类型,其中最重要的3种类型是 MyISAM:成熟、稳定和易于管理 InnoD
24、B:加入事务、数据行级锁定机制、外键约束条件、崩溃恢复等新功能 HEAP:只存在于内存中,可做临时表 create table tmp()ENGINE=MyISAM 数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。 主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。 主键必须是唯一的 主键应该是紧凑的,因此整数类型比较适合 外键:引用另外一个数据表的某条记录。外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。例如: student(s#,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库
链接地址:https://www.31doc.com/p-3424196.html