资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,数据库原理及应用,-,项目,4,创建与维护,MySQL,数据表,情景导入,在成功安装MySQL并完成配置,学会数据库的创建与维护操作之后,善于思考的王宁同学又有了新的疑问,数据库是怎样保存数据的呢?李老师告诉王宁,在关系数据库中,数据表是存储数据的基本单位,一个数据库中可以包含多个数据表。在软件开发中,学会数据库和数据表的基本操作,是实现轻松管理数据的基础。,那么,怎么创建一个数据表?表的结构怎么确定?怎么输入记录?怎么对数据记录进行维护?本项目将带领王宁一起学习数据表的创建与维护操作。,设计表结构,创建表,维护表,主要内容,项目,1,理解,数据库,职业能力目标,理解MySQL数据表的基本概念,掌握表的创建、维护与修改方法,掌握如何在表中添加、修改和删除数据记录,掌握表的复制与删除方法,任务,4,-1 设计表结构,【任务提出】,王宁同学通过预习了解到,在MySQL中,物理的数据是存储在数据表中的。那么,怎样才能设计出规范、合理的表结构呢,王宁同学要从设计学生信息管理系统数据库的各个表的结构开始本任务的学习。,在MySQL中,表是数据库中最重要、最基本的操作对象,是存储数据的基本单位。如果把数据库比喻成柜子,那么表就像柜子中各种规格的抽屉。,一个表就是一个关系,表实质上就是行列的集合,每一行代表一条记录,每一列代表记录的一个字段。,每个表由若干行组成,表的第一行为各列标题,其余行都是数据。,任务,4,-1 设计表结构,1、表的命名,完整的数据表名称应该由数据库名和表名两部分组成,其格式如下:,【注意】,MySQL对象包括数据库、表、视图、存储过程或存储函数等。这些对象名必须符合一定规则或约定,各个DBMS的约定不完全相同。,database_name.table_name,(一),理解表的概念,命名原则,1,、,名字可以由当前字符集中的任何字母数字字符组成,下划线(,_,)和美元符号(,$,)也可以。,2,、,名字最长为,64,个字符。但名字的长度受限于所用操作系统限定的长度。,3,、,如果要用引号,一定要用单引号,而双引号并不禁止变量解释。,4,、,文件系统的大小写敏感性影响到如何命名和引用数据库和表。,(一),理解表的概念,2、表的结构,MySQL的表的存在方式如同电子表格的工作表一样拥有列(Column)和行(Row)。用数据库的专业术语来表示,这些列即是字段(Field),每个字段分别存储着不同性质的数据,而每一行中的各个字段的数据构成一条数据记录(Record)。,表的结构定义工作即决定表拥有哪些字段以及这些字段的特性。,所谓“字段特性”是指这些字段的名称、数据类型、长度、精度、小数位数、是否允许空值(,NULL,)、设置默认值、主码等。,只有彻底了解字段特性的各个定义项,才能有办法创建一个功能完善和具有专业水准的表。,(一),理解表的概念,(一),理解表的概念,3、字段名,表可以拥有多个字段,各个字段分别用来存储不同性质的数据,为了加以识别,每个字段必须有一个名称。字段名同样必须符合MySQL的命名规则。,(1)字段名最长可达64个字符。,(2)字段名可包含中文、英文字母、数字、下划线符号(_)、井字符号(#)、货币符号($)及at符号()。,(3)同一个表中,各个字段的名称绝对不能重复。,(4)字段名可以用中文。,(一),理解表的概念,4、字段长度和小数位数,字段的长度是指字段所能容纳的最大数据量。但是对不同的数据类型而言,长度对字段的意义有些不同,说明如下。,(1)字符串类型。长度代表字段所能容纳字符的数目。,(2)整数类型。长度则代表该数据类型指定的显示宽度。即能够显示的最大数据的长度。在不指定宽度的情况下,每个整数类型都有默认的显示宽度。,(3)二进制类型。长度代表字段所能容纳的最大字节数。,(4)浮点数类型和定点数类型。长度代表的是数据的总长度,也就是精度。精度是指数据中数字的位数(包括小数点左侧的整数部分和小数点右侧的小数部分),而小数位数则是指数字中小数点右侧的位数。例如,数字12345.678,其精度是8,小数位数是3。,(一),理解表的概念,4、字段长度和小数位数,通常用下面所示的格式来表示数据类型及其所采用的长度(精度)和小数位数,其中,,n,代表长度、,p,代表精度、,s,代表小数位数。,binary(,n,),binary(10),长度为,10,的,binary,数据类型。,char(,n,),char(12),长度为,12,的,char,数据类型。,decimal(,p,s,),decimal(8,3),精度为,8,、小数位数为,3,的,decimal,数据类型。,(一),理解表的概念,(二),了解,MySQL,数据类型,确定表中每列的数据类型是设计表的重要步骤。,列的数据类型就是定义该列所能存放的数据的值的类型。,MySQL的数据类型非常丰富,常见的数据类型介绍见课本表4.1。,1、设置默认值,当向表中插入数据时,如果用户没有明确给出某列的值,MySQL自动指定该列使用默认值。它是实现数据完整性的方法之一。,(三)掌握列的其它属性,2、设置表的属性值自动增加,当向MySQL的表中加入新行时,可能希望给行一个唯一而又容易确定的ID号。可以,通过为表主键添加AUTO_INCREMENT关键字,来实现。该标识字段是唯一标识表中每条记录的特殊字段,初值默认为1,当一个新记录添加到这个表中时,这个字段就被自动赋给一个新值。默认情况下是加1递增。,(三)掌握列的其它属性,3、设置NULL与NOT NULL,在创建表的结构时,列的值可以允许为空值。NULL(空,列可以不指定具体的)值意味着此值是未知的或不可用的,向表中填充行时不必为该列给出具体值。注意,NULL不同于零、空白或长度为零的字符串。,NOT NULL是指不允许为空值,该列必须输入数据。,(三)掌握列的其它属性,任务,4,-1 设计表结构,【任务实施】,随着学习的深入,王宁同学掌握了表结构的设计方法,成功确定了学生信息管理系统中各个表的结构,见课本表4.2表4.9。,【任务提出】,在确定好每个表的表结构后,王宁同学迫不及待地要开始动手创建数据表。本任务将带领王宁首先从创建student表、course表、sc表开始,分别使用Navicat图形管理工具和使用SQL语句两种方法创建表。,任务4-,2,创建表,使用Navicat工具创建表,(一)使用Navicat工具创建表,(1)打开Navicat窗口,双击打开【gradem】数据库,用鼠标右键单击【表】节点,选择【新建表】命令。,(2)在设计表窗口中,输入列名、数据类型、字段的长度、小数点位数,设置是否允许为空,是否使用默认值等。逐个定义表中的列,设计完整的表结构。,(3)设置主键约束。,(4)确定表名,保存,完成表的创建工作。,语法格式,(二)使用CREATE TABLE语句创建表,CREATE TABLE,(,);,完整性约束条件,列级完整性约束条件如下。,a,PRIMARY KEY,:指定该字段为主键。,b,NULL/NOT NULL,:指定的字段允许为空,/,不允许为空,如果没有约束条件,则默认为,NULL,。,c,UNIQUE,:指定字段取值唯一,即每条记录的指定字段的值不能重复。,d,DEFAULT,:指定设置字段的默认值。,e,AUTO_INCREMENT,:指定设置字段的值自动增加。,(二)使用CREATE TABLE语句创建表,表级完整性约束条件如下。,a,PRIMARY,KEY用于定义表级主键约束,语法格式如下。,CONSTRAINT PRIMARY KEY(字段名1,字段名2,字段名n),b,FOREIGN KEY,用于设置参照完整性规则,即指定某字段为外键,语法格式如下。,CONSTRAINT FOREIGN KEY()REFERENCES,c,UNIQUE,既可用于列级完整性约束,也可用于表级完整性约束,语法格式如下。,CONSTRAINT UNIQUE(),(二)使用CREATE TABLE语句创建表,【任务实施】,王宁同学通过学习,,最终,给出的student表、course表和sc表的结构定义语句如下:,任务4-,2,创建表,USE gradem;,CREATE TABLE student -,创建学生表,(sno char(10)PRIMARY KEY,-,学号为主键,sname char(8),-,姓名,ssex char(2)DEFAULT,男,-,性别,sbirthday date DEFAULT 1992-01-01,-,出生日期,sid varchar(18),-,身份证号,saddress varchar(30),-,家庭住址,spostcode char(6),-,邮政编码,sphone char(18)DEFAULT,不详,-,电话,spstatus varchar(20),-,政治面貌,sfloor char(10),-,楼号,sroomno char(5),-,房间号,sbedno char(2),-,床位号,tuixue tinyint(1)NOT NULL DEFAULT 0,-,是否退学,xiuxue tinyint(1)NOT NULL DEFAULT 0,-,是否休学,smemo text,-,简历,sphoto blob,-,照片,classno char(8)-,班级号,);,【任务实施】,任务4-,2,创建表,USE gradem;,CREATE TABLE course -,创建课程关系表,(cno char(3)NOT NULL,-,课程号,cname varchar(20)NOT NULL,-,课程名称,cterm tinyint NOT NULL,-,学期,CONSTRAINT C1 PRIMARY KEY(cno,cterm)-,课程号,+,学期为主键,);,CREATE TABLE sc -,创建成绩关系表,(sno char(10)NOT NULL,-,学号,cno char(3)NOT NULL,-,课程号,degree decimal(4,1),-,成绩,cterm tinyint NOT NULL,-,学期,CONSTRAINT A1 PRIMARY KEY(sno,cno,cterm),-,学号,+,课程号,+,学期为主键,CONSTRAINT A2 CHECK(degree=0 and degree=100),-,成绩约束条件,CONSTRAINT A3 FOREIGN KEY(sno)REFERENCES STUDENT(sno),-,学号为外键,CONSTRAINT A4 FOREIGN KEY(cno,cterm)REFERENCES COURSE(cno,cterm),-(,课程号,学期,),为外键,);,任务4-3 维护表,【任务提出】,王宁同学想对已经完成设计的student表的结构做一下修改,他想把sphoto字段删除,想把该表的存储引擎改为MyISAM。该用到哪些SQL语句去实现呢?王宁同学带着这些问题走进了本任务的学习中。,使用Navicat工具查看表结构,(一)查看表结构,(,1,)启动,Navicat,工具软件,打开【,Navicat for MySQL,】窗口,并确保与服务建立连接。,(,2,)在【连接】窗格中依次展开【,mysql,】服务器、【,gradem,】数据库以及【表】结点,选中要查看其结构的表,student,,选择,Navicat,窗口中的“设计表”命令,即可打开设计表窗口,在该窗口中可以查看表中每个字段的字段名、数据类型、长度、是否允许空值、是否为主键、是否有默认值等,。,在MySQL中,可以使用DESCRIBE/DESC语句查看表的字段信息,包括:字段名、字段数据类型、是否为主键、是否有默认值等,语法格式如下。,DESCRIBE;,或简写为:,DESC;,(一)查看表结构,【,例,4.1】,分别用,DESCRIBE,和,DESC,语句查看,student,表和,course,表的表结构。,DESCRIBE student;,DESCRIBE course;,(一)查看表结构,在MySQL中,可以使用SHOW CREATE TABLE语句查看详细表结构,包括创建表时的CREATE TABLE语句,语法格式如下。,SHOW CREATE TABLE G;,【,例,4.2】,分别用,SHOW CREATE TABLE,语句查看,course,表的详细信息。,SHOW CREATE TABLE course;,在Navicat工具中的命令列界面中不认可参数“G”,在命令行中可以。,(一)查看表结构,使用SHOW TABLES语句显示表列表,在MySQL中,可以使用SHOW TABLES语句显示当前数据库中的表列表,语法格式如下。,SHOW TABLES;,常用的修改表的操作:,修改表名。,修改字段数据类型或字段名、增加或删除字段或修改字段的排列位置。,更改表的存储引擎或删除表的完整性约束条件。,(二)修改表结构,使用ALTER TABLE语句修改表结构,ALTER TABLE,ADD FIRST|AFTER,已存在字段名,|MODIFY FIRST|AFTER,字段名,2,|CHANGE ,|DROP|,|RENAME TO,|ENGINE=,;,(二)修改表结构,参数说明:,aADD FIRST|AFTER 已存在字段名:为指定的表添加一个新字段。其中,“FIRST”表示将新添加的字段设置为表的第1个字段。“AFTER”是将新字段添加到指定的“已存在字段名”的后面。,bMODIFY FIRST|AFTER字段名2:对指定表中字段的数据类型或完整性约束条件进行修改。如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。,(二)修改表结构,参数说明:,cCHANGE :对指定表中的字段名进行改名。如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。,dDROP|:对指定表中不需要的字段或完整性约束进行删除。,eRENAME TO:对指定表的表名进行重命名。,fENGINE=:对指定表的存储引擎进行修改。,(二)修改表结构,【,例,4.4】,在,student,表中添加一个数据类型为,char,、长度为,10,的字段,class,,表示学生所在班级,新字段添加在“,ssex,”字段的后面。,ALTER TABLE student ADD class char(10)AFTER ssex;,ALTER TABLE sc MODIFY degree smallint;,【例4.5】将sc表中的degree字段的数据类型改为smallint。,(二)修改表结构,【例,4.6,】将,student,表中,sbirthday,字段改名为,sbirth,。,ALTER TABLE student CHANGE sbirthday sbirth date;,ALTER TABLE sc RENAME score;,【例,4,.,7,】将sc表的表名改为score。,(二)修改表结构,1、向表中添加数据,启动Navicat管理工具后,在【连接】窗格中双击【mysql】服务器,再双击要操作的数据库,在右侧窗口中显示该数据库中的所有表,双击要操作的表(如student),或用鼠标右键单击表,选择快捷菜单中的【打开表】命令,打开该表的数据窗口。,(三)在表中添加、查看、修改与删除数据记录,在数据窗口中,用户可以添加多行新数据,同时还可以修改、删除表中数据。使用该窗口的快捷菜单或下方的操作栏,可以实现表中数据在各行记录间跳转、剪切、复制和粘贴等。,2、快速查看、修改和删除数据记录,修改数据记录。若想修改某字段的数据,只需将光标移到该字段然后开始修改即可。,删除数据记录。选中该记录,按【Ctrl+Delete】组合键,或在快捷菜单中执行【删除记录】命令,或单击窗口下方操作栏的“”按钮,然后在【确认删除】对话框中单击【删除一条记录】按钮。,快速查看数据记录。利用方向键和翻页键来浏览数据记录,,ak,利用窗口下方的导航按钮快速移到第1条、最后一条或特定记录编号的数据记录。,(三)在表中添加、查看、修改与删除数据记录,使用Navicat工具复制表,右键单击要复制的表,在弹出的快捷菜单中选择【复制表】命令,执行后会生成一个新表,表名称为“原表名_copy”。,(四)复制表,使用SQL语句复制表,语法格式:,CREATE TABLE,新表名,SELECT*FROM,旧表名,;,【例如】复制,student,表到,studbak,表中。,CREATE TALBE studbak SELECT*FROM student;,使用Navicat工具删除表,在【,Navicat for MySQL,】窗口中右键单击要删除的表,选择【删除表】命令;或单击该表,按【,Delete,】键。,使用DROP TABLE语句删除表,语法格式:,DROP TABLE IF EXISTS,表名,2,;,在,MySQL,中,使用,DROP TABLE,可以一次删除一个或多个没有被其他表关联的数据表。,(五)删除表,任务4-3 维护表,【任务实施】,通过本任务的学习,王宁同学的问题得到了解决,其实现代码如下:,1.将student表中sphoto字段删除。,ALTER TABLE student DROP sphoto;,2.,将student表的存储引擎改为MyISAM。,ALTER TABLE student ENGINE=MyISAM;,项目总结,本项目带领,大家学习了数据表的结构、命名,MySQL中的数据类型,表的创建、修改、维护、删除等操作。,要求大家加强复习,增进理解。把各个知识点学会、领悟,能举一反三。,主要内容,重点要求大家,结合实训内容进行练习,灵活掌握表结构的设计、表的创建与维护操作。为下一个项目的内容学习打好基础。,重难点要求,志存高远 自强不息,
展开阅读全文