您好,欢迎访问三七文档
第二部分数据库第一章数据库基础1.1数据库优点降低数据的沉余度;更高的数据一致性;存储的数据可以共享;可以建立数据库所遵循的标准;便于维护数据完整性;1.2关系模型关系模型把世界看作是有实体(Entity)和联系(Relationshap)组成的,所谓实体就是指在现实世界中客观存在并可相互区别的事物。实体所具有的某一特性称为属性。表是关系型数据库的核心单元,是数据存储的地方。主键(primarykey):在关系型数据表中,用一个唯一的标识符来标识每一行,这个标示符就是主键.主键的属性不一定只有一个,只要能区分,多个也可以。外键(forergnkey):是用来表达表和表之间的关联关系。外键允许多个,不需要标识每一行。关系数据库的三种关系:一对一关系一对多关系多对多关系:转成两个一对多关系,通过中间表或过度表转换。数据库管理系统(DatabaseManegementSystem简称DBMS)1.3结构化查询语言(SQL)SQL(StructuredQueryLanguage):是一种用于管理关系数据库,并与数据库中的数据进行通讯的计算机语言。最新版本的SQL为SQL-2003.SQL语句作用:(1)数据定义语言(DDL)创建、修改、删除数据库的内部数据结构(2)数据查询语言(DQL)用于数据库中数据查询(3)数据操作语言(DML)修改数据(添加、删除、修改)(4)数据控制语言(DCL)控制数据库访问权限第二章管理数据库和表2.1管理数据库2.1.1数据库的穿件和使用数据库名规则:建议使用英文和下划线组成.标识符不能使多用RDBNS的保留字。不允许嵌入空格或其他特殊字符。数据库的创建:CREATEDATABASE数据库名;激活数据库:USE数据库名;删除数据库:DROPDATABASE数据库命;2.2数据类型字符串数据类型:类型类型大小范围用途CHAR(N)N0-255字符型VARCHAR(N)N0-65535字符型2.3管理表创建表的基础SQ语法:CREATETABLE表名(列名列的数据类型{列的约束});showDATABASES;--显示所有数据库删除表:DROPTABLE表名;复制表:CREATETABLE新表名SELECT*FROM原表名;复制表的同时表的约束不能复制查询表的结构:DESC表名;查看表详细结构语句:SHOWCREATETABLE表名;修改表语句:添加新列:ALTERTABLE表名ADD属性名类型;替换属性:ALTERTABLE表名CHANGE需要改变的属性名该变后的属性名类型;删除属性(列):ALTERTABLE表名DROPCOLUMN列名;修改表名:ALTERTABLE旧表名RENAME新表名;修改属性的数据类型:ALTERTABLE表名MODIFY属性名属性数据类型;2.4管理索引索引是对数据库表中一列或多列的值进行排序的一种结果,使用索引可快速访问数据库表中的特定信息。创建索引:CREATEINDEX索引名ON表名(列名一,[列名二],。。。);删除索引:ALTERTABLE表名DROPINDEX索引名;索引的优点:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以加快数据的检索速度,这也是创建索引的最主要原因可以加速度表与表之间的连接,特别在数显数据的参考完整性方面有特别意义。在使用分组和排序字句进行数据检索时,同样可以减少查询中分组和排序时间。通过使用索引,可以再查询的过程中,使用优化掩藏器,提高系统性能。索引的缺点:创建索引和维护索引要消耗时间,这种时间随着数据量的增加而增加。索引需要占用物理空间,除了数据表占用数据空间之外,每个索引还需要占用一定的物理空间,如果建立聚簇索引,那么需要的空间就很大。当对表中的数据进行增加,删除和修改时,索引页要动态维护,这样降低了数据的维护速度。索引的使用原则:不要索引数据量不大的表,对于小表来讲,来遍历的成本并不好。不要创建过多的索引,在没有聚集索引的表中,最大可以创建249个非聚集索引,过多索引会占用更大的磁盘空间,而且在数据发生修改时,对索引的维护时特别消耗性能的。合理应用复合索引,有某些情况下可以考虑创建含所有属性的覆盖索引。对经常使用范围查询的属性,可以考虑聚集索引。避免对不经常用的属性,大字段属性创建索引。第三章数据库的完整性数据完整性的分类3.1实体完整性实体完整性:保证一行数据是完整的,行不重复。(1)用主键约束,不能为空。指令:CREATETABLEt_student(属性名数据类型PRIMARYKEY,--指定该属性为主键属性名VARCHAR(50))方法二:CREATETABLEt_student_bak(s_id数据类型,s_nameVARCHAR(50)NOTXULL,PRIMARYKEY(s_id)-指定主键约束)(2)唯一约束(UniqueConstraint):唯一约束是指定列的所有值必须是唯一,该列在表中每一行的值必须唯一,与主键的区别是该列可以为空,并且在一张表中给多个列设置约束。设置唯一约束:CREATETABLEt_student(s_idintPRIMARYKEY,s_nameVARCHAR(50)_increment);给已创建的表添加唯一约束:ALTERTABLE表名ADDUNIQUE(属性名);3.2域完整性域完整性:保证一列数据是完整的。域的完整性是指定列的输入有效性。实现方法:非空约束:NotNull;默认约束:Default;检查约束:Chedk(MySQL不支持);设置非空约束:CREATETABLEt_student(s_idintPRIMARYKEY,s_nameVARCHAR(50)UNIQUENOTNULL,s_ageINTNOTNULL);注意:非空约束默认为非空。设置默认值:CREATETABLEt_student(s_idintPRIMARYKEY,s_nameVARCHAR(50)UNIQUENOTNULL,s_ageINTs_gendarCHAR(2)DEFAULT‘男’);设置受检查约束:设置输入范围。3.3引用完整性引用完整性:保证引用的编号是有效地。外键与主表数据保持一致。外键与外键约束没有直接关系。外键是指从表的某列与主表的某列存在依附关系。外键约束是指在外键关联的主键上强制加上一个约束,如果违反,则不允许修改数据。注意:没有建立外键约束不等于没有外键。一个表中外键(FOREIGNKEY)指向另一个表中的主键(PRIMAREKEY)叫表的关联。MySQL有两种常用的引用引擎类型:MyISAM和InnoDB.目前只有后者引擎类型支持外键约束。查看数据库存储引擎:SHOWVARIABLESlike'%engine%';--设置外键约束主键CREATETABLEt_class(C_idINTPRIMARYKEY,C_NAMEVARCHAR(50)UNIQUENOTNULL)ENGINE=INNODB;--再创建从表外键CREATETABLEt_students(S_idINTPRIMARYKEY,S_C_idINT,S_NAMEVARCHAR(50)UNIQUENOTNULL,S_ageINT,s_gendarCHAR(2)DEFAULT'男',CONSTRAINTFOREIGNKEY(S_C_id)REFERENCESt_class(C_id))ENGINE=INNODB;3.4用户自定义完整性用户自定义完整性:保证自定义规则。auto_increment来实现列的自动编号。加在需要自动编号的语句后面。可以设置从多少开始排auto_increment=100;sexVARCHAR(4)CHECK(sex='男'||sex='女')设置是只能是男是女DEFAULTNOW(),默认为当前时间3.5修改数据完整性(CONSTRAINT)创建约束名;CONSTRAINT约束名--删除唯一约束--ALTERTABLE表名DROPCONSTRAINT约束名;--删除外键约束--ALTERTABLE外键名DROPFOREIGNKEY约束名;--增加约束--ALTERTABLEt_classCHANGES_C_idINTPRIMARYKER;第四章使用DML语句更改数据4.1数据添加4.1.1插入单行记录(INSERT)--不指定属性,表示需要插入所有的属性。语法:INSERTINTO表名(属性列表)VALUES(值列表);表示在某个属性列里添加值;注意:主键是自动编号,插入使用NULL;属性有默认约束,插入时欲显示默认值,插入值只用DEFAULT;插入的属性允许为空时,插入时不显示值,插入值使用NULL;同时插入多条数据(MYSQL):INSERTINTO表名(属性1,属性2,属性3…)VALUES(值1,值2,值3…);可以不写列名,但是值必须对应表中的所有属性类型。4.1.2表数据的复制(ELECT*FROM)复制语法(都不能复制约束):一起使用建表的方式复制:CREATETABKE新表名SELECT*FROM原表名;//复制表INSERTINTO的方式复制:INSERTINTO新表名SELECT*FROM原表名;//只复制数据4.2更改已有数据(UPDATE表set)(1)更新张三的属性为女UPDATE表名SET性别=‘女’WHERE姓名=‘张三’;(2)将所有年龄小于18岁的同学增加3岁UPDATE表名SET年龄=年龄+3WHERE年龄18;(3)更新多行:4.3删除(DELETE)删除值:注意删除列值只是将该值设置为空,而不是将该列从表中去掉,去掉用DDL语句。输出数据(DELETE):标准结构:DELETEFROM表名WHERE过滤条件;过滤条件决定删除几行;例如:DELETEFROM表名WHERE姓名=‘张三’;//删除张三的信息DELETEFROM表名WHERE年龄BETWEEN18AND20;//删除年龄18-20之间的学生信息。删除所有数据:1.使用DELETE删除//不加过滤条件;——建议使用2.使用TRUNCATE语句//TRUNCATETABLE表名;区别:前者会纪律日志,可以恢复,但效率低。后者不能恢复。第五章简单数据查询5.1基本机构标准结构:SELECT[DISTINCT]{*|列名[别名],。。。}FROM表名[WHERE过滤条件][ORDERBY列1,列2.。。]上面中括号是可选内容,不一定所有查询都有。DISTINCT是避免查询内容重复。ORDERBY是排序。整表查询:SELECT*FROM表名;*全表查询,显示所有5.2投影操作SELECTlimit投影就是选择需要显示的属性。投影操作时查询语句里必须有的子句,他将选择对表中那些列进行操作。语法:SELECT需要查询的属性名称FROM表名;计算列:查询的结果可以进行处理;语法:SELECT年龄+10FROM表名;SELECTCONCAT(姓名,‘%’,年龄)FROM表名;排除重复:SELECTDISTINCT列名FROM表名;列别名:使用别名,可以使用SQL语句和返回的数据更容易读懂,更容易理解,在多个表中有相同的列名的时候,使用别名区分。在列名或表名用AS关键字类提供别,语法:SELECT列AASA,列BASBFROM表名AST当使用表的别名是,可以再同一SQL语句中的列名使用别名,语法:SELECTT.列AASA,T.列BASBFROM表名AST;返回限定行数的查询:语法:SELECT列1,列2FROM表名LIMIT开始行数,显示行数;注意LIMIT序号是从0开始,LIMIT只用于MySQL中。查询有所有不些LIMIT。5.2.1limit查询行的使用1、查询第一行记录:select*fromtablelimit12、查询第n行到第m行记录select*fromtable1limitn-1,m-n;SELECT*FROMtableLIMIT5,10;返回第6行到第15行的记录select*fromemployeelimit3,1
本文标题:数据库sql学习
链接地址:https://www.777doc.com/doc-3632289 .html