版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章MySQL概述《MySQL数据库应用教程》刘瑞新主编配套资源目录第1章MySQL概述1.1MySQL的体系结构1.2MySQL的安装和设置1.3MySQL客户端程序1.1MySQL的体系结构客户端连接器连接层SQL层存储引擎层文件系统层1.2.1MySQL的版本根据操作系统。根据用户群体。根据发布顺序分。1.2MySQL的安装和设置1.2.2下载MySQL的安装包MySQL官网(/)1.2MySQL的安装和设置1.2.3安装MySQL服务器双击下载的MySQL安装文件mysql-installer-community-.msi1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2MySQL的安装和设置1.2.4MySQL服务器的启动或停止1.通过系统服务管理器来启动或停止MySQL服务1.2MySQL的安装和设置2.在命令提示符下启动或停止MySQL服务“命令提示符”“以管理员身份运行”。打开“管理员:命令提示符”窗口。停止MySQL服务:netstopmysql80启动MySQL服务:netstartmysql801.2MySQL的安装和设置1.2.5MySQL配置文件my.ini文件的位置对于MySQL安装版,my.ini文件在隐藏文件夹C:\ProgramData\MySQL\MySQLServer8.01.2MySQL的安装和设置2.配置参数(1)客户端参数[client]和[mysql]都是客户端的参数,常用参数说明如下:port:端口号,默认的端口号为3306。default-character-set:表示MySQL客户端默认的字符集。例如,my.ini配置中常见的客户端参数如下:[client]port=3306[mysql]default-character-set=gbk1.2MySQL的安装和设置(2)服务器端参数[mysqld]是服务器端的参数。1.2MySQL的安装和设置例如,my.ini配置中常见的服务器参数如下:[mysqld]port=3306basedir="C:/ProgramFiles/MySQL/MySQLServer8.0/"datadir=C:/ProgramData/MySQL/MySQLServer8.0/Datacharacter-set-server=gbkdefault-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"1.3MySQL客户端程序1.3.1命令方式客户端常用程序1.命令行客户端程序【例1-1】通过MySQL8.0CommandLineClient或MySQL8.0CommandLineClient–Unicode,使用管理员账号“root”、密码“123456”登录到本机的MySQL服务器。1.3MySQL客户端程序1.3.1命令方式客户端常用程序SHOWDATABASES;QUIT1.3MySQL客户端程序2.通过“命令提示符”窗口执行客户端程序(1)设置环境变量1.3MySQL客户端程序1.3MySQL客户端程序1.3MySQL客户端程序(2)登录到MySQL服务器其命令格式如下:mysql[-hhostname|hostIP-Pport]-uusername-p"userpassword"【例1-2】通过“命令提示符”窗口,使用管理员账号“root”、密码“123456”登录到本机的MySQL服务器。C:\Users\Administrator>mysql-uroot-pEnterpassword:123456mysql>在登录MySQL服务器时,也可以使用以下命令:mysql-uroot-p123456mysql-hlocalhost-uroot-p"123456"mysql-h-P3306-uroot-p123456mysql-h-uroot-p1.3MySQL客户端程序(3)断开MySQL服务器断开MySQL服务器的命令如下:QUIT或者EXIT1.3MySQL客户端程序1.3.2图形方式客户端程序1.MySQL常用图形客户端管理程序(1)MySQLWorkbench下载地址:http://dev.MySQL.com/downloads/workbench/。(2)NavicatforMySQL下载地址:/,产品试用期为14天。(3)phpMyAdmin下载地址:。1.3MySQL客户端程序2.NavicatforMySQL客户端程序的安装和配置(1)NavicatforMySQL客户端程序的安装1.3MySQL客户端程序2.NavicatforMySQL客户端程序的安装和配置(1)NavicatforMySQL客户端程序的安装1.3MySQL客户端程序1.3MySQL客户端程序1.3MySQL客户端程序2.NavicatforMySQL客户端程序的启动和配置1.3MySQL客户端程序1.3MySQL客户端程序1.3MySQL客户端程序祝贺你有了良好的开端.《MySQL数据库应用教程》刘瑞新主编配套资源第2章数据库的操作、字符集和存储引擎目录第2章数据库的操作、字符集和存储引擎2.1MySQL数据库概述2.2数据库的操作2.3MySQL的字符集和校对规则2.4MySQL的存储引擎2.1.1MySQL数据库简介2.1.2MySQL数据库的分类1.系统数据库2.1MySQL数据库概述(1)mysql系统数据库(2)information_schema信息数据库(3)performance_schema性能数据库(4)sys数据库(5)样例数据库2.用户数据库2.1MySQL数据库概述2.2.1创建数据库1.使用SQL语句创建数据库CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name[[DEFAULT]CHARACTERSET[=]charset_name][[DEFAULT]COLLATE[=]collation_name];2.2数据库的操作【例2-1】创建一个名为studentinfo的学生管理数据库,在创建之前用IFNOTEXISTS先判断数据库是否存在;默认采用简体中文字符集和校对规则。SQL语句如下:CREATEDATABASEIFNOTEXISTSstudentinfoDEFAULTCHARACTERSET=gb2312DEFAULTCOLLATE=gb2312_chinese_ci;2.2数据库的操作2.使用NavicatforMySQL创建数据库【例2-2】使用NavicatforMySQL的菜单方式创建名为school的数据库。2.2数据库的操作2.2数据库的操作2.2.2查看数据库1.使用SQL语句查看数据库SHOWDATABASES|SCHEMAS;【例2-3】查看当前用户(root)权限下的数据库列表。SQL语句如下:SHOWDATABASES;2.2数据库的操作2.使用NavicatforMySQL查看数据库在NavicatforMySQL中,可以在“导航窗格”中看到该服务器的数据库列表。2.2数据库的操作2.2.3选择数据库1.使用SQL语句选择数据库USEdb_name;【例2-4】执行SQL语句USE,选择名为studentinfo的数据库。SQL语句如下:USEstudentinfo;2.2数据库的操作2.使用NavicatforMySQL选择数据库2.2数据库的操作2.2.4修改数据库使用SQL语句修改数据库ALTER{DATABASE|SCHEMA}[db_name][DEFAULT]CHARACTERSET[=]charset_name[[DEFAULT]COLLATE[=]collation_name];2.2数据库的操作【例2-5】修改studentinfo数据库的字符集为gbk。SQL语句如下:ALTERDATABASEstudentinfoCHARACTERSETgbk;2.2数据库的操作2.使用NavicatforMySQL修改数据库2.2数据库的操作2.2数据库的操作2.2.5删除数据库1.使用SQL语句删除数据库DROPDATABASE|SCHEMA[IFEXISTS]db_name;【例2-6】删除数据库school。SQL语句如下:DROPDATABASEstudentinfo;2.2数据库的操作2.使用NavicatforMySQL删除数据库DROPDATABASEschool;2.2数据库的操作2.3.1MySQL的字符集SHOWCHARACTERSET;也可以使用下面查询语句:SELECT*FROMinformation_schema.character_sets;2.3MySQL的字符集和校对规则2.查看MySQL当前字符集SHOWVARIABLESLIKE'character_set%';2.3MySQL的字符集和校对规则3.查看数据库的字符集SHOWCREATEDATABASE数据库名;【例2-7】查看world数据库的字符集。SQL语句如下:SHOWCREATEDATABASEworld;2.3MySQL的字符集和校对规则4.查看表的字符集SHOWCREATETABLE数据库名.表名;【例2-8】查看city表的字符集。SQL语句如下:SHOWCREATETABLEworld.city;2.3MySQL的字符集和校对规则2.3.2MySQL的校对规则SHOWCOLLATIONLIKE'字符集名%';【例2-9】查看gbk字符集的校对规则。SQL语句如下:SHOWCOLLATIONLIKE'gbk%';2.3MySQL的字符集和校对规则2.4.1存储引擎的概念2.4.2常用的存储引擎的种类InnoDB存储引擎MyISAM存储引擎MEMORY存储引擎2.4MySQL的存储引擎2.4.3存储引擎的操作1.查看默认的存储引擎SHOWVARIABLESLIKE'default_storage_engine';2.查看支持的存储引擎SHOWENGINES;SHOWVARIABLESLIKE'have%';2.4MySQL的存储引擎【例2-10】使用MySQL命令行客户端程序登陆MySQL服务器,查看所安装版本默认存储引擎和支持的存储引擎。mysql-uroot–pMysql>SHOWVARIABLESLIKE'default_storage_engine';2.4MySQL的存储引擎mysql>SHOWENGINES;2.4MySQL的存储引擎mysql>SHOWVARIABLESLIKE'have%';2.4MySQL的存储引擎SELECTenginefrominformation_schema.engineswheretransactions='yes';2.4MySQL的存储引擎3.设置默认存储引擎例如,设置默认存储引擎为InnoDB,服务器参数如下:[mysqld]default-storage-engine=INNODB2.4MySQL的存储引擎4.将已存在表的存储引擎修改成其他的存储引擎例如,将表student的存储引擎从InnoDB改为MyISAM,SQL语句如下:ALTERTABLEstudentengine=MyISAM;2.4MySQL的存储引擎祝贺你学完了一章《MySQL数据库应用教程》刘瑞新主编配套资源第3章表的操作和数据的完整性约束《MySQL数据库应用教程》刘瑞新主编配套资源目录第3章表的操作和数据的完整性约束3.1表的概述3.2数据类型3.3表的操作3.4数据的完整性约束3.1.1表的基本概念1)表名。2)列名。3)行或记录。4)列或属性。5)数据项。6)数据的完整性约束。3.1表的概述3.1表的概述3.1.2数据类型概述3.2数据类型2.浮点数类型和定点数类型及其取值范围3.2数据类型3.2.2字符串类型3.2数据类型3.2.3日期和时间类型3.2数据类型3.2.4二进制类型3.2.5复合类型1.SET(集合)类型列名SET('值1','值2',…,'值n')2.ENUM(枚举)类型列名ENUM('值1','值2',…,'值n')3.3表的操作3.3.1创建表1.使用SQL语句创建表CREATE[TEMPORARY]TABLE[db_name.]tb_name(column_definition1[列级完整性约束条件1,][column_definition2[列级完整性约束条件2],][…,][column_definitionN[列级完整性约束条件N],][表级完整性约束条件])[table_option];3.3表的操作列的定义格式如下:column_namedata_type[DEFAULTdefault_value][AUTO_INCREMENT][COMMENT'String']…table_option格式如下:[ENGINE=engine_name][DEFAULTCHARSET=characterset_name][COLLATE=collation_name]3.3表的操作【例3-1】在学生信息数据库studentinfo中,创建学生表student,student表的定义见表3-6。要求对表使用InnoDB存储引擎,设置该表的字符集为utf8,其对应校对规则是utf8_bin。3.3表的操作USEstudentinfo;CREATETABLEstudent(StudentIDCHAR(12)COMMENT'学号',StudentNameVARCHAR(20)COMMENT'姓名',SexENUM('男','女')DEFAULT'男',BirthdayDATECOMMENT'出生日期',AddressVARCHAR(30),ClassIDCHAR(10)COMMENT'班级编号')ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_bin;3.3表的操作3.3表的操作【例3-2】创建临时表temp_table。SQL语句如下:CREATETEMPORARYTABLEtemp_table(IDINTNOTNULL,NameVARCHAR(10),ValueINTNOTNULL);3.3表的操作2.使用NavicatforMySQL对话方式创建表【例3-3】在studentinfo数据库中,创建班级表class,该表的定义见表3-7。3.3表的操作3.3表的操作3.3表的操作3.3表的操作3.3.2查看表1.查看表的名称SHOWTABLES[{FROM|IN}db_name];【例3-4】在数据库studentinfo中,查看所有的表名。USEstudentinfo;SHOWTABLES;3.3表的操作2.查看表的基本结构SHOWCOLUMNS语句的语法格式为:SHOWCOLUMNS{FROM|IN}tb_name[{FROM|IN}db_name];DESCRIBE/DESC语句的语法格式为:{DESCRIBE|DESC}tb_name;【例3-5】在数据库studentinfo中,查看表student的结构。SHOWCOLUMNSFROMstudent;或DESCstudent;3.3表的操作3.3表的操作3.3表的操作3.查看表的详细结构SHOWCREATETABLEtb_name;【例3-6】在数据库studentinfo中,查看表class的详细信息。USEstudentinfo;SHOWCREATETABLEclass\G;3.3表的操作3.3表的操作3.3.3修改表1.使用SQL语句修改表结构ALTERTABLEtb_nameADD[COLUMN]new_col_nametype[constraint_condition][{FIRST|AFTER}existing_col_names]|MODIFY[COLUMN]col_nametype[constraint_condition][{FIRST|AFTER}existing_col_names]|CHANGE[COLUMN]col_namenew_col_nametype[constraint_condition]|ALTER[COLUMN]col_name{SET|DROP}DEFAULT|DROP[COLUMN]col_name|AUTO_INCREMENT[=n]|RENAME[{AS|TO}]new_tb_name;3.3表的操作【例3-7】在studentinfo数据库中,向class表中添加班长一列ClassMonitor,数据类型是VARCHAR(20),并将该列添加到原表Grade列之后。ALTERTABLEstudentinfo.classADDCOLUMNClassMonitorVARCHAR(20)AFTERGrade;DESCstudentinfo.class;3.3表的操作【例3-8】在studentinfo数据库中,向class表中添加一列入学日期EntryDate,添加到ClassName列后;把ClassMonitor的数据类型宽度改为VARCHAR(10)。ALTERTABLEclassADDEntryDateDATEAFTERClassName;ALTERTABLEclassMODIFYClassMonitorVARCHAR(10);DESCclass;3.3表的操作2.使用SQL语句更改存储引擎ALTERTABLEtb_nameENGINE=engine_name;【例3-9】将表student的存储引擎修改为MyISAM。ALTERTABLEstudentENGINE=MyISAM;SHOWCREATETABLEstudent;ALTERTABLEstudentENGINE=InnoDB;3.3表的操作3.使用SQL语句重命名表名ALTERTABLEtb_nameRENAME[{AS|TO}]new_tb_name;RENAMETABLEtb_name1TOnew_tb_name1[,tb_name2TOnew_tb_name2]…;【例3-10】分别使用上面两种语句,在数据库studentinfo中,修改student表名。先把student表名改为stu,然后再改回student。ALTERTABLEstudentRENAMETOstu;RENAMETABLEstuTOstudent;3.3表的操作4.使用NavicatforMySQL对话方式修改表结构【例3-11】使用NavicatforMySQL对话方式修改表结构,在数据库studentinfo中修改student表。3.3表的操作3.3.4删除表1.使用SQL语句删除表DROPTABLE[IFEXISTS]tb_name1[,tb_name2]...;【例3-12】在studentinfo数据库中,删除student表。DROPTABLEIFEXISTSstudent;2.使用NavicatforMySQL对话方式删除表3.4数据的完整性约束3.4.1数据完整性约束的概念和子句1.数据完整性约束的概念1)实体完整性约束。2)参照完整性约束。3)用户自定义完整性约束。3.4数据的完整性约束2.数据完整性约束条件子句在CREATETABLE语句中定义数据完整性约束条件子句的格式为:[NULL|NOTNULL][UNIQUE[KEY]]|[PRIMARY[KEY]][reference_definition]3.4数据的完整性约束3.4.2定义实体完整性1.主键约束(PRIMARYKEYConstraint)(1)主键列必须遵守的规则1)每一个表只能定义一个主键。2)主键的值,也称为键值,必须能够唯一标识表中的每一行记录,且不能为NULL。3)复合主键不能包含不必要的多余列。4)一个列名在复合主键的列表中只能出现一次。3.4数据的完整性约束(2)实现主键约束的方式1)列级完整性约束。列名数据类型[其他约束]PRIMARYKEY3.4数据的完整性约束【例3-13】在数据库studentinfo中,重新创建学生表student,要求以列级完整性约束方式定义StudentID列为主键。SQL语句如下:USEstudentinfo;DROPTABLEIFEXISTSstudent;CREATETABLEstudent(StudentIDCHAR(12)PRIMARYKEY,StudentNameVARCHAR(20)NOTNULL,SexCHAR(2)NOTNULL,BirthdayDATE,AddressVARCHAR(30),ClassIDCHAR(10));3.4数据的完整性约束3.4数据的完整性约束同样,在数据库studentinfo中,创建院系表department,要求以列级完整性约束方式定义DepartmentID列为主键。CREATETABLEdepartment(DepartmentIDCHAR(2)PRIMARYKEY,DepartmentNameVARCHAR(20)NOTNULL);3.4数据的完整性约束2)表级完整性约束。PRIMARYKEY(列名,…)【例3-14】在studentinfo数据库中,创建选课表selectcourse,结构见表3-8,要求以表级完整性约束方式定义主键,将学号、课程编号(StudentID,CourseID)的列组合设置为selectcourse表的主键。3.4数据的完整性约束USEstudentinfo;DROPTABLEIFEXISTSselectcourse;CREATETABLEselectcourse(StudentIDCHAR(12),CourseIDCHAR(6),ScoreDECIMAL(4,1),SelectCourseDateDATE,PRIMARYKEY(StudentID,CourseID));3.4数据的完整性约束【例3-15】如果选课表selectcourse已经存在,可以删除原来的主键,把selectcourse表的主键修改为学号、课程号(StudentID,CourseID)的列组合。ALTERTABLEselectcourseDROPPRIMARYKEY,ADDPRIMARYKEY(StudentID,CourseID);3.4数据的完整性约束2.完整性约束的命名CONSTRAINT<约束名>{PRIMARYKEY(主键列的列表)|UNIQUEKEY(唯一键列的列表)|FOREIGNKEY(外键列的列表)REFERENCES被参照关系的表(主键列的列表)|CHECK(约束条件表达式)};3.4数据的完整性约束【例3-16】在数据库studentinfo中,定义课程表course,表结构见表3-9。3.4数据的完整性约束USEstudentinfo;DROPTABLEIFEXISTScourse;CREATETABLEcourse(CourseIDCHAR(6),CourseNameVARCHAR(30)NOTNULL,CreditSMALLINTNOTNULL,CourseHourSMALLINTNOTNULL,PreCourseIDCHAR(6),TermTINYINT,CONSTRAINTPK_coursePRIMARYKEY(CourseID));3.4数据的完整性约束【例3-17】在studentinfo数据库中,修改选课表selectcourse,要求以表级完整性约束方式定义主键(StudentID,CourseID),并指定主键约束名称为PK_selectcourse。在修改表结构语句中,要先删除原来的主键,然后添加新的主键。ALTERTABLEselectcourseDROPPRIMARYKEY,ADDCONSTRAINTPK_selectcoursePRIMARYKEY(StudentID,CourseID);3.4数据的完整性约束3.唯一约束(UNIQUEKEYConstraint)(1)列级完整性约束列名数据类型[其他约束]UNIQUEKEY(2)表级完整性约束UNIQUEKEY(列名,…)3.4数据的完整性约束【例3-18】在数据库studentinfo中,重新定义和创建班级表class。班级表class中的班级编号ClassID和班级名称ClassName这两列的值都是唯一的,在ClassID列上定义主键约束,在ClassName列上定义唯一键约束,都定义为列级的完整性约束。USEstudentinfo;DROPTABLEIFEXISTSclass;CREATETABLEclass(ClassIDCHAR(10)PRIMARYKEY,ClassNameVARCHAR(20)NOTNULLUNIQUEKEY,ClassNumTINYINT,GradeSMALLINT,DepartmentIDCHAR(2)NOTNULL);3.4数据的完整性约束ALTERTABLEclassMODIFYClassNameVARCHAR(20)NOTNULLUNIQUEKEY;DROPTABLEIFEXISTSclass;CREATETABLEclass(ClassIDCHAR(10)NOTNULL,ClassNameVARCHAR(20)NOTNULL,ClassNumTINYINT,GradeSMALLINT,DepartmentIDCHAR(2)NOTNULL,CONSTRAINTPK_classPRIMARYKEY(ClassID),CONSTRAINTUQ_classUNIQUEKEY(ClassName));3.4数据的完整性约束3.4数据的完整性约束SHOWINDEXFROMtb_name;例如,显示class表上定义的唯一键约束,SQL语句如下:SHOWINDEXFROMclass;4.PRIMARYKEY与UNIQUEKEY的区别3.4数据的完整性约束3.4.3定义参照完整性1.外键(FOREIGNKEY)的概念3.4数据的完整性约束2.外键约束(FOREIGNKEYConstraint)(1)在列级完整性上定义外键约束在从表中的列上定义外键约束的语法规则为。列名数据类型[其他约束]REFERENCES主表(主表中主键列的列表)[ONDELETE{CASCADE|RESTRICT|SETNULL|NOACTION}][ONUPDATE{CASCADE|RESTRICT|SETNULL|NOACTION}]3.4数据的完整性约束(2)在表级完整性上定义外键约束的子句在从表中定义外键约束子句的语法规则为。FOREIGNKEY(从表中外键列的列表)REFERENCES主表(主表中主键列的列表)[ONDELETE{CASCADE|RESTRICT|SETNULL|NOACTION}][ONUPDATE{CASCADE|RESTRICT|SETNULL|NOACTION}]3.4数据的完整性约束【例3-19】在数据库studentinfo中,重新定义学生表student,要求以列级完整性约束方式定义与class表的外键ClassID,采用默认的RESTRICT参照动作。USEstudentinfo;DROPTABLEIFEXISTSstudent;CREATETABLEstudent(StudentIDCHAR(12)PRIMARYKEY,StudentNameVARCHAR(20)NOTNULL,SexCHAR(2)NOTNULL,BirthdayDATE,AddressVARCHAR(30),ClassIDCHAR(10)REFERENCESclass(ClassID)ONUPDATERESTRICTONDELETERESTRICT);3.4数据的完整性约束【例3-20】在数据库studentinfo中,重新学生表student,要求以表级完整性约束方式定义与class表的外键ClassID。DROPTABLEIFEXISTSstudent;CREATETABLEstudent(StudentIDCHAR(12),StudentNameVARCHAR(20)NOTNULL,SexCHAR(2)NOTNULL,BirthdayDATE,AddressVARCHAR(30),ClassIDCHAR(10),CONSTRAINTPK_studentPRIMARYKEY(studentID),CONSTRAINTFK_studentFOREIGNKEY(ClassID)REFERENCESclass(ClassID));3.4数据的完整性约束SHOWCREATETABLEstudent;3.4数据的完整性约束【例3-21】在数据库studentinfo中,重新创建选课表selectcourse,指定主键为StudentID和CourseID,指定外键分别为student表的StudentID,course表的CourseID。DROPTABLEIFEXISTSstudentinfo.selectcourse;CREATETABLEstudentinfo.selectcourse(StudentIDCHAR(12)NOTNULL,CourseIDCHAR(6)NOTNULL,ScoreDECIMAL(4,1),SelectCourseDateDATE,PRIMARYKEY(StudentID,CourseID),CONSTRAINTFK_selectcourse_studentFOREIGNKEY(StudentID)REFERENCESstudent(StudentID)ONUPDATERESTRICTONDELETERESTRICT,CONSTRAINTFK_selectcourse_courseFOREIGNKEY(CourseID)REFERENCEScourse(CourseID)ONUPDATERESTRICTONDELETERESTRICT);3.4数据的完整性约束3.4数据的完整性约束(3)通过ALTERTABLE语句添加外键约束ALTERTABLE外键所在的表名
ADD[CONSTRAINT外键名]FOREIGNKEY(外键列名,…)REFERENCES关联外键的表名(主键列名,…)ONDELETE{CASCADE|RESTRICT|SETNULL|NOACTION}]ONUPDATE{CASCADE|RESTRICT|SETNULL|NOACTION}];3.4数据的完整性约束【例3-22】将选课表selectcourse的StudentID列设置为外键,该列的值参照学生表student的StudentID列的取值。由于selectcourse表已经在上例中创建,这里修改添加外键。ALTERTABLEselectcourseADDFOREIGNKEY(StudentID)REFERENCESstudent(StudentID)ONUPDATERESTRICTONDELETECASCADE;3.4数据的完整性约束【例3-23】在数据库studentinfo中,重新定义学生表student,要求在定义外键时,同时定义相应的参照动作。ALTERTABLEselectcourseDROPFOREIGNKEYFK_selectcourse_student;ALTERTABLEselectcourseDROPFOREIGNKEYselectcourse_ibfk_1;DROPTABLEIFEXISTSstudent;CREATETABLEstudent(StudentIDCHAR(12),StudentNameVARCHAR(20)NOTNULL,SexCHAR(2)NOTNULL,BirthdayDATE,AddressVARCHAR(30),ClassIDCHAR(10),CONSTRAINTPK_studentPRIMARYKEY(StudentID),CONSTRAINTFK_studentFOREIGNKEY(ClassID)REFERENCESclass(ClassID)ONUPDATERESTRICTONDELETECASCADE);3.4数据的完整性约束3.4.4用户定义的完整性1.非空约束(NOTNULLConstraint)列名数据类型NOTNULL[其他约束]【例3-24】将student表的StudentName列修改为非空约束。SQL语句如下:ALTERTABLEstudentMODIFYStudentNameCHAR(20)NOTNULL;3.4数据的完整性约束2.默认值约束(DEFAULTConstraint)列名数据类型[其他约束]DEFAULT默认值【例3-25】将student表的Sex列的约束修改为非空、只能取值“男”或“女”、默认值为“男”。ALTERTABLEstudentMODIFYSexENUM('男','女')DEFAULT'男'NOTNULL;SHOWCREATETABLEstudent;3.4数据的完整性约束3.检查约束(CHECKConstraint)CONSTRAINT<检查约束名>CHECK(expr)3.4数据的完整性约束【例3-26】创建student1表,定义Sex列为非空、只能取值“男”或“女”、默认值为“男”。CREATETABLEstudent1(StudentIDCHAR(12),StudentNameVARCHAR(20)NOTNULL,SexCHAR(2)DEFAULT'男'NOTNULL,BirthdayDATE,AddressVARCHAR(30),ClassIDCHAR(10),CONSTRAINTCK_studentCHECK(Sex='男'ORSex='女'),CONSTRAINTPK_studentPRIMARYKEY(StudentID),CONSTRAINTFK_studentFOREIGNKEY(ClassID)REFERENCESclass(ClassID)ONUPDATERESTRICTONDELETECASCADE);3.4数据的完整性约束如果要查看语句,在命令列界面窗格中输入下面SQL语句。SHOWCREATETABLEstudent1;3.4数据的完整性约束4.自增约束(AUTO_INCREMENTConstraint)列名数据类型[其他约束]AUTO_INCREMENT【例3-27】在studentinfo数据库中创建临时表temp1,设置ID列为INT类型,要求其为主键,自动增加;Name列为CHAR(10)。CREATETABLEtemp1(IDINTPRIMARYKEYAUTO_INCREMENT,NameCHAR(10));DESCtemp1;3.4数据的完整性约束3.4.5更新完整性约束1.删除约束(1)删除主键约束ALTERTABLEtb_nameDROPPRIMARYKEY;3.4数据的完整性约束【例3-28】在studentinfo数据库中创建临时表temp2,定义NameID列为INT类型,主键;Name列为CHAR(10),非空,唯一键;Sex列为CHAR(2),默认值为“男”;Age列为SMALLINT,要求Age>=16ANDAge<=30;ID列为INT,是temp1表的外键。CREATETABLEtemp2(NameIDINTPRIMARYKEY,NameCHAR(10)NOTNULLUNIQUEKEY,SexCHAR(2)DEFAULT'男',AgeSMALLINT,CONSTRAINTCK_AgeCHECK(Age>=16ANDAge<=30),IDINT,CONSTRAINTFK_temp2FOREIGNKEY(ID)REFERENCEStemp1(ID)ONUPDATERESTRICT);3.4数据的完整性约束在temp2表中,删除定义的主键约束。SQL语句如下:ALTERTABLEtemp2DROPPRIMARYKEY;3.4数据的完整性约束(2)删除唯一键约束ALTERTABLEtb_nameDROPINDEX{约束名|唯一键约束名};【例3-29】在临时表temp2中,删除Name列上定义的唯一键约束。如果没有给唯一键命名,则使用DROPINDEX子句删除的是定义唯一键的列名,SQL语句如下:ALTERTABLEtemp2DROPINDEXName;3.4数据的完整性约束(3)删除非空约束【例3-30】在临时表temp2中,删除Name列的非空约束。ALTERTABLEtemp2MODIFYNameCHAR(10)NULL;3.4数据的完整性约束(4)删除检查约束ALTERTABLEtb_nameDROPCHECK约束名;【例3-31】删除在temp2和course表中定义的检查约束。SQL语句如下:ALTERTABLEtemp2DROPCHECKCK_Age;ALTERTABLEcourseDROPCHECKCK_course_credit;3.4数据的完整性约束(5)删除自增约束ALTERTABLEtb_nameMODIFY列名INT;【例3-32】在临时表temp1中,删除ID列上定义的自增约束。SQL语句如下:ALTERTABLEtemp1MODIFYIDINT;3.4数据的完整性约束(6)删除默认值约束ALTERTABLEtb_nameALTER列名DROPDEFAULT;【例3-33】在临时表temp2中,删除Sex列的默认值。ALTERTABLEtemp2ALTERSexDROPDEFAULT;3.4数据的完整性约束(7)删除外键约束ALTERTABLEtb_nameDROPFOREIGNKEYforeign_key_name;【例3-34】在temp2表中,删除ID列上定义的外键约束FK_temp2。ALTERTABLEtemp2DROPFOREIGNKEYFK_temp2;3.4数据的完整性约束【例3-35】在表temp2中,在ID列上定义一个无命名的外键约束,然后删除它。定义一个无命名的外键约束,SQL语句如下:ALTERTABLEtemp2ADDFOREIGNKEY(ID)REFERENCEStemp1(ID);SHOWCREATETABLEtemp2;3.4数据的完整性约束3.4数据的完整性约束2.添加约束(1)添加主键约束ALTERTABLEtb_nameADD[CONSTRAINT<约束名>]PRIMARYKEY(主键列名);【例3-36】在temp2表中,为NameID列添加主键约束。ALTERTABLEtemp2ADDCONSTRAINTPK_temp2PRIMARYKEY(NameID);3.4数据的完整性约束(2)添加唯一键约束ALTERTABLEtb_nameADD[CONSTRAINT<约束名>]UNIQUEKEY(列名);【例3-37】在temp2表中,为Name列添加唯一键约束。ALTERTABLEtemp2ADDCONSTRAINTUQ_temp2UNIQUEKEY(Name);ALTERTABLEtemp2ADDUNIQUEKEY(Name);3.4数据的完整性约束(3)添加非空约束ALTERTABLEtb_nameMODIFY列名数据类型NOTNULL;【例3-38】在临时表temp2中,为Name列添加非空约束。SQL语句如下:ALTERTABLEtemp2MODIFYNameCHAR(10)NOTNULL;3.4数据的完整性约束(4)添加检查约束ALTERTABLEtb_nameADDCONSTRAINT<检查约束名>CHECK(expr)【例3-39】在临时表temp2中,为Age列添加检查约束,要求年龄取值只能在16~30之间。ALTERTABLEtemp2ADDCONSTRAINTCK_temp2CHECK(Age>=16ANDAge<=30);3.4数据的完整性约束【例3-40】在数据库studentinfo中,为selectcourse表的添加检查约束,要求成绩Score在0~100。ALTERTABLEselectcourseADDCONSTRAINTCK_ScoreCHECK(Score>=0ANDScore<=100);3.4数据的完整性约束(5)添加自增约束ALTERTABLEtb_nameMODIFY列名INTAUTO_INCREMENT;【例3-41】在temp1表中,为ID列添加的自增约束。SQL语句如下:ALTERTABLEtemp1MODIFYIDINTAUTO_INCREMENT;3.4数据的完整性约束(6)添加默认值约束ALTERTABLEtb_nameALTER列名SETDEFAULT值;【例3-42】在temp2表中,设置Sex列的默认值为“女”;设置Age列的默认值是20。ALTERTABLEtemp2ALTERSexSETDEFAULT'女';ALTERTABLEtemp2ALTERAgeSETDEFAULT20;3.4数据的完整性约束7)添加外键约束ALTERTABLEtb_nameADD[CONSTRAINT<约束名>]FOREIGNKEY(外键列名)REFERENCES被参照表名(主键列名);【例3-43】在temp2表中,为ID列添加与temp1表的ID列的外键约束。ALTERTABLEtemp2ADDCONSTRAINTFK_temp1_IDFOREIGNKEY(ID)REFERENCEStemp1(ID);祝贺你又完成了一章《MySQL数据库应用教程》刘瑞新主编配套资源第4章表记录的操作《MySQL数据库应用教程》刘瑞新主编配套资源目录第4章表记录的操作4.1插入记录4.2修改记录4.3删除记录4.1.1插入完整记录INSERTINTOtb_name[(column1,column2,…)]VALUES(value1,value2,…);4.1插入记录1.在INSERT语句中指定列名INSERTINTOtb_name(column1,column2,…)VALUES(value1,value2,…);【例4-1】在studentinfo数据库中,向department表中插入一条新记录,包括所有列。USEstudentinfo;INSERTINTOdepartment(DepartmentID,DepartmentName)VALUES('10','哲学学院');4.1插入记录4.1插入记录2.在INSERT语句中不指定列名INSERTINTOtb_nameVALUES(value1,value2,…);4.1插入记录【例4-2】在studentinfo数据库中,按表4-1中的数据,向department表中插入一条新记录('40','法学院')。INSERTINTOdepartmentVALUES('40','法学院');4.1插入记录4.1.2插入部分记录INSERTINTOtb_name(column1,column2,…)VALUES(value1,value2,…);【例4-3】在studentinfo数据库中,向课程表course中插入一条新记录,只给指定的列添加值。INSERTINTOcourse(CourseID,CourseName,Credit,CourseHour,Term)VALUES('100101','哲学基础',2,32,1);4.1插入记录4.1.3插入多条记录INSERTINTOtb_name[(column1,column2,…,columnn)]VALUES(value11,value21,…,valuen1),(value12,value22,…,valuen2),…,(value1m,value2m,…,valuenm);4.1插入记录【例4-4】在studentinfo数据库中,向班级class表中插入5条新记录。INSERTINTOstudentinfo.class(ClassID,ClassName,ClassNum,Grade,DepartmentID)VALUES('2022100101','哲学2022-1班',25,2022,'10'),('2022400102','法律2022-2班',NULL,2022,'40'),('2022600103','数学2022-3班',20,2022,'60'),('2022700101','物理2022-1班',NULL,2022,'70'),('2022630501','软件2022-1班',40,2022,'63');4.1插入记录4.1插入记录4.1.4使用NavicatforMySQL菜单方式添加记录【例4-5】按表4-4输入学生表student中的记录。4.1插入记录4.1插入记录语法格式为:UPDATEtb_nameSETcolumn1=value1,column2=value2,…,columnN=valueN[WHEREconditions];4.2修改记录4.2.1修改特定记录【例4-6】在studentinfo数据库中,将student表中StudentID为“202270010104”的值改为“202270010105”,Address改为“河北”,Sex改为默认值。UPDATEstudentSETStudentID='202270010105',Address='河北',Sex=DEFAULTWHEREStudentID='202270010104';4.2修改记录【例4-7】将class表中Grade为2022的班级人数ClassNum都改为30。UPDATEclassSETClassNum=30WHEREGrade='2022';4.2修改记录4.2.2修改所有记录【例4-8】将class表中,所有班级人数ClassNum都在原来的人数上加10。UPDATEclassSETClassNum=ClassNum+10;4.2修改记录【例4-9】将selectcourse表中所有学生的成绩提高5%。先为selectcourse表添加检查约束,要求成绩Score在0~100。SQL语句如下:ALTERTABLEselectcourseADDCONSTRAINTCK_ScoreCHECK(Score>=0ANDScore<=100);修改成绩的SQL语句如下:UPDATEselectcourseSETScore=Score*1.05;4.2修改记录4.3.1删除特定记录DELETEFROMtb_name[WHEREconditions];【例4-10】在selectcourse表中,删除StudentID为202263050132的记录。USEstudentinfo;DELETEFROMselectcourseWHEREStudentID='202263050132';4.3删除记录4.3.2删除所有记录TRUNCATE[TABLE]tb_name;【例4-11】删除selectcourse表中的所有记录。SQL语句如下:TRUNCATEselectcourse;4.3删除记录【例4-12】删除department表中的所有记录。ALTERTABLEclassADDCONSTRAINTFK_departmentFOREIGNKEY(DepartmentID)REFERENCESdepartment(DepartmentID)ONUPDATERESTRICTONDELETECASCADE;TRUNCATEdepartment;DELETEFROMdepartment;4.3删除记录4.3.3使用NavicatforMySQL菜单方式删除记录【例4-13】以操作studentinfo数据库中的course表为例,介绍NavicatforMySQL对记录的操作。4.3删除记录4.3删除记录精彩即将开始《MySQL数据库应用教程》刘瑞新主编配套资源第5章表记录的查询《MySQL数据库应用教程》刘瑞新主编配套资源目录第5章表记录的查询5.1单表记录查询5.2聚合函数查询5.3多表连接查询5.4子查询5.1.1单表查询语句SELECT[ALL|DISTINCT]selection_list1[,selection_list2…]FROMtable_source;5.1单表记录查询【例5-1】在数据库studentinfo中查询学生表student中的所有记录。USEstudentinfo;SELECT*FROMstudent;5.1单表记录查询2.查询指定的列【例5-2】在数据库studentinfo中,查询学生表student中的StudentName、Sex、StudentID和ClassID列。SELECTStudentName,Sex,StudentID,ClassIDFROMstudent;5.1单表记录查询5.1单表记录查询3.查询计算的值【例5-3】在数据库studentinfo中,查询学生表student中的全体学生,显示StudentName、Sex列,以及“年龄:”字符串和年龄。SELECTStudentName,Sex,'年龄:',YEAR(NOW())-YEAR(Birthday)FROMstudent;5.1单表记录查询【例5-4】计算表达式的值。SELECT101+3*50/7,"abc"="ABC",2>=3;5.1单表记录查询3.为列取别名【例5-5】在数据库studentinfo中,查询student表中的全体学生的姓名、性别和年龄,要求对应的列名显示为中文名称。SELECTStudentNameAS'姓名',Sex性别,YEAR(NOW())-YEAR(Birthday)AS年龄
FROMstudent;5.1单表记录查询4.不显示重复记录【例5-6】在数据库studentinfo中,查询student表中的性别。SELECTSexFROMstudent;5.1单表记录查询SELECTDISTINCTSexFROMstudent;5.1单表记录查询SELECTStudentName,SexFROMstudent;5.1单表记录查询5.1.2使用WHERE子句过滤结果集SELECT[ALL|DISTINCT]selection_list1[,selection_list2…]FROMtable_source[WHEREsearch_condition];5.1单表记录查询1.使用关系表达式和逻辑表达式的条件查询关系运算符有<,<=,=,>,>=,<>,!=,!<,!>,<=>。“<>”表示不等于,等价“!=”;“!>”表示不大于,等价“<=”;“!<”表示不小于,等价“>=”。逻辑运算符有ANOT或!,AND或&&,OR或||,XOR。AND和OR连接多个条件。5.1单表记录查询【例5-7】查询selectcourse表中成绩在60到75之间或者成绩为100的学号、课程号。SQL语句和查询结果如下:SELECTStudentID,CourseID,ScoreFROMselectcourseWHEREScore>=60ANDScore<=75ORScore=100;5.1单表记录查询2.使用BETWEEN…AND关键字的范围查询expression[NOT]BETWEENexpressionlANDexpression2“xBETWEEN200AND500”相当于表达式“x>=200ANDx<=500”。5.1单表记录查询【例5-8】对例5-7改用BETWEEN…AND关键字实现查询。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化产业发展合作原则
- 补充合同范例文本
- 食堂调味品采购合同
- 政府采购合同性质的立法完善建议
- 合同补充协议的签订与解除方法
- 长期纸张制品购销合同
- 新型购销合同范本
- 设计毕业作品招标通知
- 太阳能光伏发电设备安装服务合同
- 摩托车运输协议
- 旧社区改造案例课件
- 灭火器维修检测报告
- 日间化疗相关管理制度
- 人教版小学数学三年级下册全册教学课件(2023年2月修订)
- 信息社会的伦理道德 课件【知识精讲+备课精研】高中信息技术教科版(2019)必修2
- 人际交往与沟通技巧学习通课后章节答案期末考试题库2023年
- 2023年高考英语必备-语法填空八-自然环境(教师版)
- Kistler测力台操作手册
- 高中英语试卷分析失分原因和改进措施6篇,高中英语试卷分析及改进措施
- C语言冒泡排序
- 铁路线路工更换钢轨作业指导书
评论
0/150
提交评论