《第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语句的可读性,子句开头的关键字通常采用大写形式。SQL语句可写成一行或多行,习惯上每个子句占
3、用一行。关键字不能在行与行之间分开,并且很少采用缩写形式。SQL语句的结束符为分号“;”,分号必须放在语句中的最后一个子句后面,但可以不在同一行。,补充知识,3、mysql 数据库环境(1)、查看服务器上当前存在什么数据库:Show databases;Mysql数据库中自带的两个数据库:Mysql数据库:描述用户存取权限;Test数据库:经常作为一个工作区提供给用户试试身手;,2.1 命令行方式创建数据库和表,2.1.1 创建数据库1.创建数据库使用CREATE DATABASE命令可以创建数据库。语法格式:create database db_name叙述:创建一个具有指定名称的数据库。如
4、果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。注意:在Unix下,数据库名字是区分大小写的(不像SQL关键词)。【例2.1】创建一个名为test1的数据库。MySQL不允许两个数据库使用相同的名字,使用IF NOT EXISTS从句可以不显示错误信息,例如:,2.1.1 创建数据库,创建了数据库之后使用USE命令可指定当前数据库。语法格式:USE db_name;说明:这个语句也可以用来从一个数据库“跳转”到另一个数据库,在用CREATE DATABASE语句创建了数据库之后,该数据库不会自动成为当前数据库,需要用这条USE语句来指定。注意:在MySQL中,每一条SQL语句
5、都以“;”作为结束标志。,2.修改数据库数据库创建后,如果需要修改数据库的参数,可以使用ALTER DATABASE命令。语法格式:ALTER DATABASE|SCHEMA db_name alter_specification,alter_specification.其中alter_specification:DEFAULT CHARACTER SET charset_name|DEFAULT COLLATE collation_nameALTER DATABASE用于更改数据库的全局特性,这些特性储存在数据库目录中的db.opt文件中。用户必须有对数据库进行修改的权限,才可以使用 ALT
6、ER DATABASE。修改数据库的选项与创建数据库相同,功能不再重复说明。如果语句中数据库名称忽略,则修改当前(默认)数据库。,2.1.1 创建数据库,【例2.2】修改数据库mydata(假设mydata已经创建)的默认字符集和校对规则。ALTER DATABASE mydataDEFAULT CHARACTER SET gb2312DEFAULT COLLATE gb2312_chinese_ci;3.删除数据库 已经创建的数据库需要删除,使用DROP DATABASE命令。语法格式:DROP DATABASE IF EXISTS db_name其中,db_name是要删除的数据库名。可以
7、使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息。示例如下:注意:这个命令必须小心使用,因为它将删除指定的整个数据库,该数据库的所有表(包括其中的数据)也将永久删除。,补充知识,1、数据类型种类数值型分为整型和浮点型整型:可以由十进制和十六进制表示整型由数字序列组成,如:1,100。由十六进制表示方法:0 x且后面加19和AF 的任意数字或字母,并且0 x中的X不能大写。浮点型:浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。字符串:由单引号或者双引号括起来的字符或者数字。如:”abc”,abc10 字符串中要用转义字符才能表示的特殊符号,
8、补充知识,日期和时间值存储如“2005-1-1”或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。NULL值一种无类型的值,表示“空,什么也没有”。,补充知识,2、数值列类型 MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。数值列类型 所有数值列类型的类型名及其说明和所占的字节数见下表:,数值列类型包括整型和浮点型 说明:TINYINT,SAMLLINT,MEDIUMINT,INT,BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的
9、显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。,例如:INT(4)意思是指定了一个具有4个字符显示宽度的INT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。,AUTO_INCREMENT 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。举例:c
10、reate table t(id int auto_increment not null primary key);UNSIGNED 无符号,此属性禁用负值,将数值的取值范围从零开始。举例:create table t(num tinyint,num2 tinyint unsigned);,数值列的完整性约束,NULL和NOT NULL 默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOT NULL,则必须在插入值时在此字段添入值,不允许插入NULL值。DEFAULT 可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。ZERO
11、FILL 前导零填充数值类型值以达到列的显示宽度。举例:create table test2(num1 int default 1,num2 int zerofill);,字符串列类型所有字符串列类型及其说明和所占的字节数见下表:,说明:对于可变长的字符串类型,其长度取决于实际存放在列中的值的长度。此长度在上表中用L来表示。附加若干额外字节,用来记录字符串长度,也就是说总长度等于Ln(n1、2、3、4、8),CHAR和VARCHAR类型CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理存储的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短
12、的值)。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。,BLOB和TEXT类型BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BOLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。ENUM 和SET类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用),字符串列类型的可选属性BINARY使
13、用此属性可以使列值作为二进制串处理,即看成BLOB类型。NULL 和NOT NULL同数值型功能相同DEFAULT同数值型功能相同,日期和时间列类型所有时间和日期列类型的类型名及其说明和所占的字节数见下表:,说明:每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加表示日期时必须先按:年,月,日的顺序给出DATE,TIME,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm:ss”和“YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要给出。TIMESTAMP时间戳列类型以YYYYMMDDhhm
14、mss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录,总结:常用数据类型,2.1.2 创建表,创建表使用CREATE TABLE命令。语法格式:CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name(column_definition,.|index_definition)table_option select_statement;说明:TEMPORARY:该关键字表示用CREATE命令新建的表为临时表。不加该关键字创建的表通常称为持久表。IF NOT EXISTS:只有该表目前尚不存在时才执行
15、CREATE TABLE操作。table_name:要创建的表的表名。column_definition:列定义,包括列名、数据类型,可能还有一个空值声明和一个完整性约束。index_definition:表索引项定义,主要定义表的索引、主键、外键等。table_option:用于描述表的选项。select_statement:可以在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表。,2.1.2 创建表,列定义column_definition格式如下:col_name type NOT NULL|NULL DEFAULT default_value AUTO
16、_INCREMENT UNIQUE KEY|PRIMARY KEY COMMENT string reference_definition说明:col_name:表中列的名字。type:列的数据类型,有的数据类型需要指明长度n,并用括号括起。AUTO_INCREMENT:设置自增属性,只有整型列才能设置此属性。当插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。NOT NULL|NULL:指定该列是否允许为空。如
17、果不指定,则默认为NULL。,2.1.2 创建表,DEFAULT default_value:为列指定默认值,默认值必须为一个常数。其中,BLOB和TEXT列不能被赋予默认值。如果没有为列指定默认值,MySQL自动地分配一个。如果列可以取NULL值,默认值就是NULL。如果列被声明为NOT NULL,默认值取决于列类型:(1)对于没有声明AUTO_INCREMENT属性的数字类型,默认值是0。对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值。(2)对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,默认值是当前的日期
18、和时间。(3)对于除ENUM的字符串类型,默认值是空字符串。对于ENUM,默认值是第一个枚举值。UNIQUE KEY|PRIMARY KEY:PRIMARY KEY和UNIQUE KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主键一定要为NOT NULL。COMMENT string:对于列的描述,string是描述的内容。reference_definition:指定参照的表和列。,2.1.2 创建表,表选项table_option定义如下:ENGINE|TYPE=engine_name/*存储引擎*/|AUTO_INCREMENT=value
19、/*初始值*/|AVG_ROW_LENGTH=value/*表的平均行长度*/|DEFAULT CHARACTER SET charset_name COLLATE collation_name/*默认字符集和校对*/|CHECKSUM=0|1/*设置为1表示求校验和*/|COMMENT=string/*注释*/|CONNECTION=connect_string/*连接字符串*/|MAX_ROWS=value/*行的最大数*/|MIN_ROWS=value/*列的最小数*/|PACK_KEYS=0|1|DEFAULT|PASSWORD=string/*对.frm文件加密*/|DELAY_KE
20、Y_WRITE=0|1/*对关键字的更新*/|ROW_FORMAT=DEFAULT|DYNAMIC|FIXED|COMPRESSED|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 创建表,关于完
21、整性约束条件,需要说明以下几点:完整性约束条件分为列级完整性约束条件和表级完整性约束条件,它们之间的区别在于:列级完整性约束条件只能用于列,而表级完整性约束条件能够用于一张表中的多列。SQL的完整性约束条件有以下几种:NOT NULL 或NULL约束 这个约束条件为列级完整性约束条件。NOT NULL 为不允许该列存在空值,而NULL 为允许该列存在空值。UNIQUE约束 UNIQUE约束是惟一性约束。即不允许表中的某一列或者某几列有重复的属性值。DEFAULT约束 DEFAULT约束为默认值约束,是列级完整性约束条件。当向表中插入一个新行时,如果对于特定列没有指定数值,则使用DEFAULT子
22、句指定的默认值。,2.1.2 创建表,CHECK约束 CHECK约束是检验约束,为插入列中的数据指定约束条件。PRIMARY KEY 约束 PRIMARY KEY 约束即主键约束,是表级完整性约束条件。表中的主键可以是一列或列组,PRIMARY KEY 约束可以使得主键的数值在每一行中各不相同。注意:PRIMARY KEY约束类似于UNIQUE约束,差别在于PRIMARY KEY约束中的列不可以为空。FOREIGN KEY约束 FOREIGN KEY约束是参照完整性约束,是用于约束外键的,也是表级完整性约束条件。,2.1.2 创建表,在创建一个新的MySQL数据表时,可以为它设置一个类型,其中
23、最重要的3种类型是MyISAM:成熟、稳定和易于管理InnoDB:加入事务、数据行级锁定机制、外键约束条件、崩溃恢复等新功能HEAP:只存在于内存中,可做临时表create table tmp()ENGINE=MyISAM数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。主键必须是唯一的 主键应该是紧凑的,因此整数类型比较适合 外键:引用另外一个数据表的某条记录。外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
24、。外键又称作外关键字。例如:student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所在系别。dep(d#,dname),即院系有两个属性:系号、系名。则s、d是主键,也是各自所在关系的唯一候选键,d是student的外键,值来自于dep.d。外键列类型尽可能与主键列类型保持一致外键列应该加上NOT NULL,2.1.2 创建表,主键:创建学生表create table student(sid int not null auto_increment,name varchar(20)not null,primary key(sid);外键(自动检查外键是否匹配,仅适用In
25、noDB):创建成绩表create table score(cid int not null auto_increment primary key,score int,sid int,foreign key(sid)references student(sid);,2.1.2 创建表,主表和从表1、当主表中没有对应的记录时,不能将记录添加到子表成绩表中不能出现在学员信息表中不存在的学号;2、不能更改主表中的值而导致子表中的记录孤立把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变;3、子表存在与主表对应的记录,不能从主表中删除该行不能把有成绩的学员删除了4、删除主表前,先删子表先删学
26、员成绩表、后删除学员信息表,2.1.2 创建表,【例2.3】设已经创建了数据库XSCJ,在该数据库中创建学生情况表XS。USE XSCJCREATE TABLE XS(学号 char(6)NOT NULL PRIMARY KEY,姓名 char(8)NOT NULL,专业名 char(10)NOT NULL,性别 tinyint(1)NOT NULL DEFAULT 1,出生日期date NOT NULL,总学分 tinyint NULL,照片 blob NULL,备注 text NULL)ENGINE=InnoDB;在上面的例子里,每个字段都包含附加约束或修饰符,这些可以用来增加对所输入数据
27、的约束。“ENGINE=InnoDB”表示采用的存储引擎是InnoDB,InnoDB是MySQL在Windows平台默认的存储引擎,所以“ENGINE=InnoDB”可以省略。,2.1.2 创建表,例:创建“学生表”student,它由学号id、姓名name、性别sex、班级号class、出生日期birthday等5个属性组成。其中学号不能为空,值必须惟一,且姓名也必须惟一和非空。CREATE TABLE student(id CHAR(8)NOT NULL UNIQUE,name VARCHAR(20)NOT NULL UNIQUE,sex CHAR(1)DEFAULT 男 NOT NULL
28、,class CHAR(4),birthday DATE,CONSTRAINT C1 CHECK(sex IN(男,女);,例:创建“学生表”student,它由学号id、姓名name、性别sex、班级号class、出生日期birthday等5个属性组成。其中学号为主键,且姓名也必须惟一和非空。CREATE TABLE student(id CHAR(8)NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL UNIQUE,name VARCHAR(20)NOT NULL UNIQUE,sex CHAR(1)DEFAULT 男 NOT NULL,class
29、CHAR(4),birthday DATE);,2.1.2 创建表,或CREATE TABLE student(id CHAR(8)NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL UNIQUE,sex CHAR(1)DEFAULT 男 NOT NULL,class CHAR(4),birthday DATE,primary key(id);或CREATE TABLE student(id CHAR(8)NOT NULL,name VARCHAR(20)NOT NULL UNIQUE,sex CHAR(1)DEFAULT 男 NOT NULL,clas
30、s CHAR(4),birthday DATE,constraint c1 primary key(id);,2.1.2 创建表,例:创建“班级信息表”class,它由班级号id、班级名name、班长monitor等3个属性组成,其中班级号是主键,班长是外键,它是上例学生表student中学号的某个值。CREATE TABLE class(id CHAR(4)NOT NULL,name VARCHAR(50)NOT NULL,monitor CHAR(8)CONSTRAINT C2 PRIMARY KEY(id),CONSTRAINT C3 FOREIGN KEY(monitor)REFERE
31、NCES student(id);说明:本例定义了2个列级约束、2个表级约束。CONSTRAINT子句定义的是表级约束,C2、C3是约束名,分别将id定义为主键,monitor定义为外键。注意:定义student表的外键monitor时,注意数据类型必须与student表中的id为同类型。并且,student表不能单独删除。当需要删除student表时,需要先删除class表。,2.1.2 创建表,或CREATE TABLE class(id CHAR(4)NOT NULL,name VARCHAR(50)NOT NULL,monitor CHAR(8)PRIMARY KEY(id),FORE
32、IGN KEY(monitor)REFERENCES student(id);,2.1.2 创建表,选择主键的原则:最少性尽量选择单个键作为主键稳定性尽量选择数值更新少的列作为主键,2.1.2 创建表,练习:例:建立一个学生信息表(student)定义列sno学号,类型为5位定长字符串,非空,主键定义列sname姓名,类型为8位定长字符串,非空定义列ssex性别,取值1或0定义列sage年龄,类型为整型定义列sdept系名,数据类型为20位变长字符串,create table student(sno char(5)not null primary key,sname char(8)not nu
33、ll,ssex tinyint(1)check(ssex=1 or ssex=0),Sage int,Sdept varchar(20);或create table student(sno char(5)not null primary key,sname char(8)not null,ssex tinyint(1),Sage int,Sdept varchar(20)Constraint c1 check(ssex=1 or ssex=0),);,2.1.2 创建表,例:建立一个课程信息表(course)定义列courseid课程号,类型为整型,非空,自动增长,主键定义列cname课程名,
34、类型为16位变长字符串,非空 create table course(courseid int not null auto_increment,Cname varchar(16)not null,Primary key(courseid);或create table course(courseid int not null auto_increment Primary key,Cname varchar(16)not null);,2.1.2 创建表,例:建立一个学生考试成绩信息表(sc)定义列grade成绩,类型为整型定义列sno学号,类型为5位定长字符串,非空,主键定义列courseid课
35、程号,类型为整型,非空,主键Create table sc(grade int,Sno char(5)not null,Courseid int not null,Primary key(sno,courseid);,思考:,电话号码一般使用什么数据类型存储?性别一般使用什么数据类型存储?年龄信息一般使用什么数据类型存储?照片信息一般使用什么数据类型存储?学员姓名允许为空吗?家庭地址允许为空吗?电子邮件信息允许为空吗?考试成绩允许为空吗?,思考:,在主键列输入的数值,允许为空吗?不允许一个表可以有多个主键吗?不可以在一个学校数据库中,如果一个学校内允许重名的学员,但是一个班级内不允许学员重名,
36、可以组合班级和姓名两个字段一起来作为主键吗?,2.1.2 创建表,2.修改表ALTER TABLE用于更改原有表的结构。语法格式:ALTER IGNORE TABLE tbl_name alter_specification,alter_specification.alter_specification:ADD COLUMN column_definition FIRST|AFTER col_name/*添加列*/|ALTER COLUMN col_name SET DEFAULT literal|DROP DEFAULT/*修改默认值*/|CHANGE COLUMN old_col_name
37、 column_definition/*对列重命名*/FIRST|AFTER col_name|MODIFY COLUMN column_definition FIRST|AFTER col_name/*修改列类型*/|DROP COLUMN col_name/*删除列*/|RENAME TO new_tbl_name/*重命名该表*/|ORDER BY col_name/*排序*/|CONVERT TO CHARACTER SET charset_name COLLATE collation_name/*将字符集转换为二进制*/|DEFAULT CHARACTER SET charset_n
38、ame COLLATE collation_name/*修改默认字符集*/|table_options|列或表中索引项的增、删、改(见第5章索引部分),2.1.2 创建表,说明:tb1_name:表名。col_name:指定的列名。IGNORE:是MySQL相对于标准SQL的扩展。若在修改后的新表中存在重复关键字,如果没有指定IGNORE,当重复关键字错误发生时操作失败。如果指定了IGNORE,则对于有重复关键字的行只使用第一行,其他有冲突的行被删除。column_definition:定义列的数据类型和属性。,2.1.2 创建表,column_definition类型:ADDCOLUMN子句
39、:向表中增加新列。例如,在表t1中增加新的一列a:ALTER TABLE t1 ADD COLUMN a TINYINT NULL;FIRST|AFTER col_name:表示在某列的前或后添加,不指定则添加到最后。ALTER COLUMN子句:修改表中指定列的默认值。CHANGE COLUMN子句:修改列的名称。重命名时,需给定旧的和新的列名称和列当前的类型,old_col_name表示旧的列名。column_definition中定义新的列名和当前数据类型。例如,要把一个INTEGER列的名称从a变更到b:ALTER TABLE t1 CHANGE a b INTEGER;MODIFY
40、COLUMN子句:修改指定列的类型。例如,要把一个列的数据类型改为BIGINT:ALTER TABLE t1 MODIFY b BIGINT NOT NULL;,2.1.2 创建表,DROP子句:从表中删除列或约束。RENAME子句:修改该表的表名,new_tbl_name是新表名。例如,将表a改名为b:ALTER TABLE a RENAME TO b;ORDER BY子句:用于在创建新表时,让各行按一定的顺序排列。注意,在插入和删除后,表不会仍保持此顺序。在对表进行了大的改动后,通过使用此选项,可以提高查询效率。table_options:修改表选项。可以在一个ALTER TABLE语句里
41、写入多个ADD、ALTER、DROP和CHANGE子句,中间用逗号分开。这是MySQL相对于标准SQL的扩展。在标准SQL中,每个ALTER TABLE语句中每个子句只允许使用一次。【例2.4】假设已经在数据库XSCJ中创建了表XS,表中存在“姓名”列。在表XS中增加“奖学金等级”列并将表中的“姓名”列删除。USE XSCJALTER TABLE XS ADD 奖学金等级 tinyint NULL,DROP COLUMN 姓名;,2.1.2 创建表,举例1:向people表中添加字段address2,类型为varchar,最大长度为100alter table people add addre
42、ss2 varchar(100);举例2:将people表中的name列默认值改为100:alter table people alter name set default 100;举例3:向student表增加“入学时间”列,其数据类型为日期型。alter table student add scome date;注:无论基本表中原来是否已有数据,新增加的列一律为空值。举例4:将年龄的数据类型改为半字长整数。alter table student modify sage smallint;注:修改原有的列定义有可能会破坏已有数据,2.1.2 创建表,3.修改表名除了上面的ALTER TABL
43、E命令,还可以直接用RENAME TABLE语句来更改表的名字。语法格式:RENAME TABLE tbl_name TO new_tbl_name,tbl_name2 TO new_tbl_name2.说明:tbl_name:修改之前的表名。new_tbl_name:修改之后的表名。【例2.5】假设数据库XSCJ中已经存在table1表和table2表,将table1表重命名为student,table2表重命名为course。USE XSCJRENAME TABLE table1 TO student,table2 TO course;,2.1.2 创建表,4.复制表语法格式:CREATE
44、 TEMPORARY TABLE IF NOT EXISTS tbl_name()LIKE old_tbl_name|AS(select_statement);说明:使用LIKE关键字创建一个与old_table_name表相同结构的新表,列名、数据类型、空指定和索引也将复制,但是表的内容不会复制,因此创建的新表是一个空表。使用AS关键字可以复制表的内容,但索引和完整性约束是不会复制的。select_statement表示一个表达式,例如,可以是一条SELECT语句。【例2.6】假设数据库XSCJ中有一个表test,创建test表的一个名为test_copy1的拷贝。CREATE TABLE
45、test_copy1 LIKE test;【例2.7】创建表test的一个名为test_copy2的拷贝,并且复制其内容。CREATE TABLE test_copy2 AS(SELECT*FROM test);,2.1.2 创建表,5.删除表需要删除一个表时可以使用DROP TABLE语句。语法格式:DROP TEMPORARY TABLE IF EXISTS tbl_name,tbl_name.其中,tb1_name:要被删除的表名。IF EXISTS:避免要删除的表不存在时出现错误信息。这个命令将表的描述、表的完整性约束、索引及和表相关的权限等都全部删除。【例2.8】删除表test。US
46、E XSCJDROP TABLE IF EXISTS test;,2.2 界面创建数据库和表,2.2.1 创建数据库创建数据库的必须是系统管理员,或者拥有用户级别的CREATE权限。在安装MySQL的过程中已经创建了系统管理员,名为root,假设密码为123456。【例2.9】创建一个学生成绩数据库XSCJ。创建XSCJ数据库步骤如下:(1)“开始”“程序”“MySQL”“MySQLAdministrator”,如图2.1所示,Server host为“localhost”,Username为“root”,输入密码,单击“OK”按钮。,图2.1 登录MySQL Administrator,2.
47、2.1 创建数据库,(2)在MySQL Administrator窗口中展开“Catalogs”选项栏,出现如图2.2所示的数据库列表,在任意一个数据库名上右击鼠标,选择“Create New Schema”子选项。,图2.2 选择创建数据库选项,2.2.1 创建数据库,(3)出现如图2.3所示的界面,输入需要创建的数据库名XSCJ,单击“OK”按钮。这样数据库XSCJ就创建成功了。,图2.3 输入数据库名,2.2.2 创建、删除和修改表,在数据库中创建表,步骤如下:(1)在MySQL Administrator窗口中展开Catalogs选项栏,鼠标单击指定数据库,在右方的快捷选单上选择“Cr
48、eate New Table”子菜单,或者直接单击“Create Table”按钮。(2)在弹出的“MySQL Table Editor”窗口中填写表名(这里以KC表为例),在“Columns and Indices”子选框中填写表的各列及数据类型,如图2.4所示,单击“Apply Changes”按钮。在弹出的“Confirm Table Editor”对话框中单击“Execute”按钮,即可成功创建表KC。说明:创建完KC表之后,使用相同的方法创建附录A中的其他两个表,这里不再重复说明。,2.2.2 创建、删除和修改,图2.4 创建表的各列及数据类型,2.2.2 创建、删除和修改,如果要在
49、数据库中删除表,步骤如下:(1)MySQL Administrator窗口中展开“Catalogs”栏,选择数据库(如XSCJ),在右方的快捷选单上右击KC表,选择“Drop Table”子菜单,如图2.5所示。(2)在弹出对话框中单击“Drop Table(s)”按钮,即删除了表KC,这里不做删除。,图2.5 删除表,2.2.2 创建、删除和修改,在数据库中修改表,步骤如下:(1)在MySQL Administrator窗口中展开Catalogs,选择数据库(如XSCJ),在右方的快捷选单上右击KC表,选择“Edit Table”子菜单,图略。(2)在弹出的“MySQL Table Edit
50、or”窗口中即可修改表的结构,修改完后单击“Apply Changes”按钮。在弹出的“Confirm Table Editor”对话框中单击“Execute”按钮,即可修改表XS1。注意:由于MySQL Administrator管理工具还存在一些问题,当列的属性为NOT NULL时,修改列名可能会出错。,2.3 有关表结构,2.3.1 空值和列的identity(标志)属性下面着重对空值和列的identity(标志)属性进行说明。1.空值(NULL)概念空值通常表示未知、不可用或将在以后添加的数据。注意:表的关键字不允许为空值。空值不能与数值数据0或字符类型的空字符混为一谈。任意两个空值都