版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式数据库-第一部分 MySQL教程,第21章 创建和删除表,21.1 创建表 21.2 更新表 21.3 删除表 21.4 重命名表 本章小结 练习题,创建表,Mysql不仅用于表数据操作,而且还可以用来执行数据库和表的所有操作,包括表本身创建和处理。 创建表的方法: 使用具有交互式创建和管理表的工具 可以直接用Mysql语句操作,表创建基础,语句格式: CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name ( column_definition , . | index_definition ) table_option select_statemen
2、t;,说明, TEMPORARY:该关键字表示用CREATE命令新建的表为临时表。不加该关键字创建的表通常称为持久表,在数据库中持久表一旦创建将一直存在,多个用户或者多个应用程序可以同时使用持久表。有时候需要临时存放数据,例如,临时存储复杂的SELECT语句的结果。此后,可能要重复地使用这个结果,但这个结果又不需要永久保存。这时,可以使用临时表。用户可以像操作持久表一样操作临时表。只不过临时表的生命周期较短,而且只能对创建它的用户可见,当断开与该数据库的连接时,MySQL会自动删除它们。 IF NOT EXISTS:在建表前加上一个判断,只有该表目前尚不存在时才执行CREATE TABLE操作
3、。用此选项可以避免出现表已经存在无法再新建的错误。 table_name:要创建的表的表名。该表名必须符合标志符规则,如果有MySQL保留字必须用单引号括起来。 column_definition:列定义,包括列名、数据类型,可能还有一个空值声明和一个完整性约束。,说明, index_definition:表索引项定义,主要定义表的索引、主键、外键等。 table_option:用于描述表的选项。 select_statement:可以在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表。,列定义column_definition格式如下: col_name t
4、ype NOT NULL | NULL DEFAULT default_value AUTO_INCREMENT UNIQUE KEY | PRIMARY KEY COMMENT string reference_definition,说明: col_name:表中列的名字。列名必须符合标志符规则,长度不能超过64个字符,而且在表中要唯一。如果有MySQL保留字必须用单引号括起来。 type:列的数据类型,有的数据类型需要指明长度n,并用括号括起,MySQL支持的数据类型在附录C中介绍。 AUTO_INCREMENT:设置自增属性,只有整型列才能设置此属性。当插入NULL值或0到一个AUTO_
5、INCREMENT列中时,列被设置为value+1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。,类型: (1)对于没有声明AUTO_INCREMENT属性的数字类型,默认值是0。对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值。 (2)对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,默认值是当前的日期和时间。 (3)对于除ENUM的字符串类型,默认值是空字符串。对于ENUM,默认值是第一个枚举值。 UNIQU
6、E KEY | PRIMARY KEY:PRIMARY KEY和UNIQUE KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主键一定要为NOT NULL。 COMMENT string:对于列的描述,string是描述的内容。 reference_definition:指定参照的表和列,创建customers表格,CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , cust_address char(50) NULL
7、 , cust_city char(50) NULL , cust_state char(5) NULL , cust_zip char(10) NULL , cust_country char(50) NULL , cust_contact char(50) NULL , cust_email char(255) NULL , PRIMARY KEY (cust_id) ) ENGINE=InnoDB;,表名,列名唯一,数据类型,主键,使用NULL值,CREATE TABLE orders ( order_num int NOT NULL AUTO_INCREMENT, order_date
8、 datetime NOT NULL , cust_id int NOT NULL , PRIMARY KEY (order_num) ) ENGINE=InnoDB;,CREATE TABLE vendors ( vend_id int NOT NULL AUTO_INCREMENT, vend_name char(50) NOT NULL , vend_address char(50) NULL , vend_city char(50) NULL , vend_state char(5) NULL , vend_zip char(10) NULL , vend_country char(5
9、0) NULL , PRIMARY KEY (vend_id) ) ENGINE=InnoDB;,注意: 不要把NULL与空串相混淆,NULL值是没有值,他不是空串,如果指定 ,这个在NOT NULL中是允许的。 空串是一个有效值,它不是无值。 NULL值用关键字NULL而不是空串指定。 NULL为默认值,如果不指定NOT NULL,则认为指定的是NULL。,主键的介绍,主键必须是唯一的。表中的每个行必须有唯一的主键值。如果主键使用单个列,则它的值必须是唯一的。如果主键有多个列,则这些列的组合值必须唯一。,例:多个主键的情况 CREATE TABLE orderitems ( order_nu
10、m int NOT NULL , order_item int NOT NULL , prod_id char(10) NOT NULL , quantity int NOT NULL , item_price decimal(8,2) NOT NULL , PRIMARY KEY (order_num, order_item) ) ENGINE=InnoDB;,主键的定义,使用AUTO_INCREMENT,观察customers表格 CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50)
11、 NOT NULL , cust_address char(50) NULL , cust_city char(50) NULL , cust_state char(5) NULL , cust_zip char(10) NULL , cust_country char(50) NULL , cust_contact char(50) NULL , cust_email char(255) NULL , PRIMARY KEY (cust_id) ) ENGINE=InnoDB;,观察orders表格 CREATE TABLE orders ( order_num int NOT NULL A
12、UTO_INCREMENT, order_date datetime NOT NULL , cust_id int NOT NULL , PRIMARY KEY (order_num) ) ENGINE=InnoDB;,AUTO_INCREMENT告诉Mysql,本列每当增加一行时,自动增量。每次执行一个insert操作时,Mysql自动对该列增量,给该列赋予下一个可用的值。 给个表只允许有一个AUTO_INCREMENT列,而且它必须被索引(如:通过使它成为主键),指定默认值,如果插入行时没有给出值,Mysql允许指定此时使用的默认值。 默认值在 create table语句的列定义中的DE
13、FAULT关键字指定。,CREATE TABLE orderitems ( order_num int NOT NULL , order_item int NOT NULL , prod_id char(10) NOT NULL , quantity int NOT NULL default 1, item_price decimal(8,2) NOT NULL , PRIMARY KEY (order_num, order_item) ) ENGINE=InnoDB;,未给出数量的情况下数量为1,引擎类型,以上的列子使用的create table语句全部以ENGINE=InnoDB语句结束。
14、 Mysql有一个具有管理和处理数据的内部引擎,当你使用create table语句,该引擎具体创建表,而当你使用select语句或进行其他数据库处理时,该引擎内部处理你的请求。,Mysql有多种引擎,它们具有各自不同的功能和特性,为不同的任务选择正确的引擎能获得良好的功能和灵活性。 InnoDB是一个可靠的事物处理引擎,它不支持全文本搜索 MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事物处理。 注意:外键不能跨引擎。,更新表,语句格式: alter table tablename ( add column datatype null|not null constraints,
15、 change column columns datatype null|not null constraints, drop column, . ),必须给出更改的表名,所作更改的列表,例:给表添加一个列 alter table vendors add vend_phone char(20); 例:删除刚才添加的列 alter table vendors drop column vend_phone;,用alter table定义外键,Alter table orderitems add comstraint fk_orderitems_orders foreign key(order_nu
16、m) references orders (order_num);,复杂表结构的删除,用新的列布局创建一个新表 使用insert select语句,从旧表复制到新表 重命名旧表(如果确定可以删除它) 用旧表原来的名字重新命名新表 根据需要,重新创建触发器、存储过程、索引和外键。,删除表,语句格式: drop table tablename; 例:删除表格customers2 drop table customers2;,重命名表,语句格式 rename table used_name to new_name; 例:将表customers2改名为customers rename table customers2 to customers;,多个表的重命名 rename table backup_customers to customers, backup_vendors to vendors, backup_products to products;,小结,本章介绍了几条新的SQL语句。Create table用来创建新表,alter table用来更改表列,而用drop table用来删除一个表。这些语句必须小心使用。本章还介
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论