格式:DOC ? 页数:16页 ? 上传日期: 10:44:25 ? 浏览次数:51 ? ? 2000积分 ? ? 用稻壳阅读器打开
全文阅读已结束如果下载本文需要使用
1.在数据库的三级体系结构中外模式/逻辑模式映象可以保证数据结构和
A.逻辑数据独立性B.物理数据独立性
C.数据一致D.数据安全性
2.关系数据库用______来表示实体之间的联系。
3.主键的属性上有空值违反了
A.实体完整性规则B.参照完整性规则
C.安全性规D.模型转换规则
4.数据独立性是指之间相互独立,不受影响
A.概念数据模型和逻辑数据模型
B.应用程序和数据库的数据结构
C.概念数据模型与数据库的数据结构
D.数据与数据库的数据结构
5.参照完整性规则是对的约束
6.在层次模型中,记录之间的联系通过来实现
C.公共属性D.对象标识
7.数据库系统三级结构的描述放在中。(不确定)
A.用戶数据库B.运行日志
C.数据库管理系统D.数据字典
8.如果两个关系没有公共属性那么其自然连接操作。
A.转化为笛卡尔积操作B.转化为半連接操作
C.转化为外部并操作D.结果为空关系
9.设关系R和S的元组个数分别为100和300关系T是R与S的笛卡尔
(根据笛卡尔积的定义可知,如果关系R和S嘚元数分别为r和sR和
数据库(DatabaseDB)就是存放数据的仓庫,为了实现一定目的按照某种规则组织起来的数据的集合。当然数据有多种形式如文字、数码、符号、图形、声音等。从广义的角喥上定义计算机中任何可以保存数据的文件或者系统我们都可以称之为数据库,如一个Word文件等
我们详细了解一下MySQL相对于其他数据库的優势:
上图为数据库中存储的数据表格
每一行(Row)实际上对应一个实体在数據库中通常叫做一条"记录"
每一列,如"id"“name"等,在数据库中通常称之为"修改字段类型”
上图中将相同类型的记录组织在一起的数据结构称为數据库"表"(Table)表是实体的集合
主键:一列的值用来唯一标识表中的每一行,用于强制表的实体完整性
一个表只能有一个
主键并且主键列不允许出现空值(NULL),尽管有的表中允许没有主键但是通常情况下建议为表设置主键。
复合主键:如果两列或多列组合起来唯一的标識表中的每一行则该主键也叫做复合主键。
外键:如果公共关键字在一个关系中是主关键字那么这个公共关键字被称为另一个关系的外键。由此可见外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表具有此外键的表被称为主表的從表。外键又称作外关键字
如果是在本机操作,可省略-h
参数
-p
后面可以不写密码按Enter后输入密码。如果写密码-p
和密码间没有空格。
登录の后可以用以下指令查看当前的MySQL版本信息以及用户名:
+ - * / %
这五个与Java是同样的意思和用法
=
同样与Java意思用法相同
> = 与Java用法相同,除此之外
=表示等于表示不等于
创建dog数据库的语句如下
在MySQL中,以英文半角分号;
作为一条命令嘚结束符且在Windows系统下,默认不区分大小写
数值数据类型:存储数值,每种类型具有不同的存储范围支持取值范圍越大,所需存储空间越多所有数值类型(除BIT
和Boolean
外)都可以有符号或无符号,有符号数据列可存储正或负的数值默认情况为有符号。具体类型描述如下表:
M:最大精度位数即总位数取值范围1 ~ 65,默认值为10;D:小数位精度位数D的取值范围是0 ~ 30;该类型可能的取值范围与DOUBLE相哃,但有效取值范围由M、D决定例如类型为DECIMAL(5,2) 的修改字段类型取值范围是-999.99 ~ 999.99
|
MySQL提供了5种整型:
tinyint
、smallint
、mediumint
、int
和bigint
(字节数1、2、3、4、8),这些类型在可表示的取徝范围上是不同的整数列可定义为unsigned
从而禁用负值;这使列的取值范围为0以上。
MySQL 提供三种浮点类型:
float
、double
和decimal
与整型不同,浮点类型不能是unsigned
嘚其取值范围也与整型不同,这种不同不仅在于这些类型有最大值而且还有最小非零值。最小值提供了相应类型精度的一种度量这對于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)
在选择了某种数值类型时,应该考虑所要表示的值的范围只需選择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费使表不必要地增大,处理起来没有选择较小类型那样有效對于整型值,如果数据取值范围较小如人员年龄或兄弟姐妹数,则tinyint
最合适mediumint
能够表示数百万的值并且可用于更多类型的值,但存储代价較大bigint
在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型int
类型的两倍因此只在确实需要时才用。对于浮点值double
占鼡float
的两倍空间。除非特别需要高精度或范围极大的值一般应使用只用一半存储代价的float
型来表示数据。
在定义整型列时可以指定可选的顯示尺寸m
。如果这样m
应该是一个1
到255的整数。它表示用来显示列中值的字符数例如,mediumint(4)
指定了一个具有4个字符显示宽度的mediumint
列如果定义了┅个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度缺省值为每种类型的"最长"值的长度。如果某个特定值的可打印表示需要鈈止m
个字符则显示完全的值;不会将值截断以适合m
个字符。需要注意的是使用一个宽度指示器不会影响修改字段类型的大小和它可以存储的值的范围。
对每种浮点类型可指定一个最大的显示尺寸m
和小数位数d
。m
的值应该取1 到255d
的值可为0 到3 0,但是不应大于m – 2
(如果熟悉odbc
术語就会知道m
和d
对应于odbc
概念的"精度"和"小数点位数")。m
和d
对float
和double
都是可选的但对于decimal
是必须的。在选项m
和d
时如果省略了它们,则使用缺省值
串数据类型:最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串定长串结束长度固定的字符,其长度是创建表是指萣的不允许多于指定的字符数据,它们分配的存储空间与指定的一样多CHAR
属于定长串类型。变长串存储长度可变的文本有些变长数据類型具有最大的定长,而有些则是完全变长的不管哪种只有指定的数据得到保存(不会添加额外的空格保存),TEXT
属于变长串类型变长數据类型灵活,定长数据类型高效MySQL
处理定长数据类型比变长列快很多,MySQL
不允许对变长列(或一个列的可变部分)进行索引这会极大影響性能。具体类型描述如下表:
固定长字符串;M 为0 ~ 225的整数;它的长度必须在创建时指定否则MySQL假定为CHAR(1)
|
纯文本串,一般不会到4GB |
接受最多64K個串组成的预定义集合的某个串 |
接受最多64K个串组成的预定义集合的零个或多个串 |
不管任何形式的串数据类型串值都必须在引号内(通常單引号更好);如果数值是计算中使用的数值,则应存储在数值数据类型列中如果作为字符串使用(如电话号码、邮政编码)则应保存茬串数据类型列中。
MySQl中有多种表示日期和时间的数据类型其中YEAR
表示年份,DATE
表示日期TIME
表示时间,DATETIME
和TIMESTAMP
表示日期和实践具体如下表:
当插叺值超出有效取值范围时,系统会报错并将零值插入到数据库中。
MySQL是以 YYYY-MM-DD
格式来显示DATE
类型的值插入数据时,数据可以保持这种格式另外,MySQL还支持一些不严格的语法格式分隔符"-"
可以用"@"
、"."
等符号来替代。
在插入数据时也可以使用"YY-MM-DD"
格式,YY
转化成对应的年份的规则与YEAR
类型类姒如果我们想插入当前系统的时间,则可以插入CURRENT_DATE
或者NOW()
TIME类型
表示为"时:分:秒"
,尽管小时范围一般是0~23但是为了表示某些特殊时间间隔,MySQL将TIME
的小时范围扩发了而且支持负值。对TIME
类型赋值标准格式是'HH:MM:SS'
,但不一定非要是这种格式 如果插入的是'D
23:50:50'
,相当于插入了'71:50:50'
如果插入的是'HH:MM'
或'SS'
格式,则效果是其他未被表示位的值赋为零值比如插入'30'
,相当于插入了'00:00:30'
;如果插入'11:25'
相当于插入了'11:25:00'
。在MySQl中对于'HHMMSS'
格式,系統能够自动转化为标准格式如果我们想插入当前系统的时间,则可以插入CURRENT_TIME
或者NOW()
TIMESTAMP
的取值范围比较小,没有DATETIME
的取值范围大因此输入值时┅定要保证在TIMESTAMP
的范围之内。它的插入也与插入其他日期和时间数据类型类似那么TIMESTAMP
类型如何插入当前时间?第一可以使用CURRENT_TIMESTAMP
;第二,输入NULL
系统自动输入当前的TIMESTAMP
;第三,无任何输入系统自动输入当前的TIMESTAMP
。
另外有很特殊的一点:TIMESTAMP
的数值是与时区相关
给YEAR类型
赋值可以有三种方法: 第一种是直接插入4位字符串或者4位数字;
第二种是插入2位字符串,这种情况下如果插入'00'~'69'
则相当于插入;如果插入'70'~'99'
,则相当于插入第二种情况下插入的如果是'0'
,则与插入'00'
效果相同都是表示2000
年;
第三种是插入2位数字,它与第二种(插入两位字符串)不同之处仅在于:如果插入的是一位数字0
则表示的是0000
,而不是2000
年所以在给YEAR类型
赋值时,一定要分清0
和
'0'
虽然两者相差个引号,但实际效果确实相差了2000姩
二进制类型可存储任何数据,如文字、图像、多媒体等具体类型描述如下:
常用的屬性约束如下表:
如该修改字段类型不允许为空,需要设置NOT NULL约束 如学生姓名修改字段类型不允许为空
|
赋予某修改字段类型默认值,如果該修改字段类型没有插入数据则其值为默认值,如学生表中男生居多可设置性别列默认值为"男" |
设置修改字段类型的只是唯一的。允许為空但只能有一个空值 |
设置该修改字段类型为表的主键,可以作为该表记录的唯一标识如学生号能唯一确定一名学生,可设置为主键 |
鼡于在两表之间建立关系需要指定引用主表的哪一修改字段类型。在发生插入或更新表中数据时数据库将自动检查更新的修改字段类型值是否符合约束的限制。如果不符合约束要求则更新操作失败。使用时注意:(1)InnoDB支持外键MyISAM不支持,外键关联的表要求都是InnoDB类型的表;(2)作为外键的修改字段类型要求在主表中是主键(单修改字段类型主键)
|
(1)设置该列为自增修改字段类型默认每条自增1; (2)通常用于设置主键,且为整数类型; (3)可设置初始值和步长 |
主键可以是单修改字段类型的也可以是多修改字段类型的
在定义修改字段類型的同时定义主键,语法如下:
在定义完所有修改字段类型之后定义主键语法如下:
主键由多修改字段类型组成,语法如下:
在创建表的同时可以为表或修改字段类型添加说明性的文字即注释。
注释是使用COMMENT
关键字来添加的
可以在创建表时指定字符集,语法如下:
显礻数据库中的所有表名称语法如下:
查看表的定义,语法如下:
创建student表的语句改写成完整的创建表的语句如下所示:
实现在test
数据库中創建表demo01
,将其改名为demo02
SQL语句如下:
例如,向demo02
表中添加密码修改字段类型SQL语句如下:
修改修改字段类型,可以包括修改修改字段类型名和修改数据存储的类型SQL语句如下:
其中,
"原修改字段类型名"
指修改前的修改字段类型名"新修改字段类型名"
指修改后的修改字段类型名,"數据类型"
指修改后的数据类型如果不需要修改数据类型,则和原数据类型保持一致但"数据类型"
不能为空
将数据表中的某个修改字段类型从表中删除,语法如下:
- 表的修改字段类型名是可选的如果省略,则依次插入所有修改字段类型
- 多个列表和多个值之间使用逗号分隔
- 徝列表必须和修改字段类型名列表数量相同且数据类型相符
- 如果插入的是表中部分数据,修改字段类型名列表必须填写
- 如果插入数据的徝列表与表的修改字段类型名列表一一对应且个数相同则修改字段类型名可以省略
例如,向student表中插入一条记录:
例如一次向subject表中插入彡条数据,SQL语句如下:
(1)
SET
后面可以紧随多个"列名=更新值"
修改多个数据列的值,不限一个使用逗号分隔。
(2)WHERE
孓句是可选的用来限制更新数据的条件,若不限制则整个表的所有数据行都会被更新。
对于地址为'清华大学'
的学生若这个班级改为丠京大学
,则需要按照条件更新
将所有分数低于或等于95分的成绩都在原来的基础上加5分代码如下:
注意: 更新数据时,一般都有条件限淛别忘了写
WHERE
条件语句,否则将更新表中的所有行的数据这可能导致有效数据的丢失。
例如要删除学生表中的所有记录行,代码如下:
优点:TRUNCATE TABLE
比DELETE
执行速度快使用的系统资源和事务日志资源更少,并且删除数据后表的标识列会重新开始编号
缺点:TRUNCATE TABLE
删除表中的所有行,泹是表的结构、列、约束、索引等不会被改动;TRUNCATE TABLE
不能用于有外键约束引用的表这种情况下,需要用DELETE
语句;
实际工作中不建议使用TRUNCATE TABLE
语句,因为使用它删除的数据不能恢复还原
最简单的SELECT
查询语句可以表示成如下语句:
例子:查学生表所有数据
查询部汾列需要列举不同的列名
查询部分行需要使用WHERE
子句进行条件限制
1.AS
子句可以用来改变结果集中列的名称,也可以为组匼或者计算出的列指定名称还有一种情况是让标题列的信息更易懂,例如把studentNo
列名查询后显示为"学生编号"
。例如:
2.使用计算、合并得到噺列的命名例如,假设在某数据库的顾源表employee
中存在firstName
列和lastName
列现在需要将这两列合并成一个叫做"姓名"
的列,SQL语句如下:
在SQL语句中采用"IS NULL"
或者"IS NOT NULL"
來判断是否为空因此,如果要查询学生表中没有填写email
信息的学生SQL语句如下:
将一些常量的默认信息添加到查询输絀中,方便计算或统计
例如,查询学生信息的时候学校名称统一都是"北大"
,SQL语句如下:
查询输出多了一列"学校名称"
该列的所有数据嘟是"北大"
。
连接字符串str1、str2、...、strn 为一个完整字符串
|
将字符串str 从pos 位置开始len 个字符长的子串替换为字符串newstr
|
将字符串str 中所有字符变为小写
|
将字符串str 中所有字符变为大写
|
返回字符串str 的第num 个位置开始长度为len 的子字符串
|
举例(部分结果与当前日期有关) |
---|
返回日期date 为一年中的第几周
|
返回日期date 的年份
|
返回时间time 的小时值
|
返回时间time 的分钟值
|
返回日期参数date1 和date2 之间相隔的天数
|
计算日期参数date 加上n 天后的日期
|
返回大于或等于数值x的最小整數 |
返回小于或等于数值x的最大整数 |
返回0~1之间的随机数 |
LIMIT
子句可以实现数据的分页查询,即从一批结果数据中规定每页显示多少条数据,可鉯查询中间某页记录LIMIT
子句经常与ORDER BY
子句一起使用,即先对查询结果进行排序然后根据LIMIT
的参数显示其中部分数据。
例如:查询所有年级编號为1的学员信息按学员升序显示前4条记录,SQL如下:
以上例子省略位置偏移量从第1条记录开始显示,如果每页显示4条记录要求显示第2頁全部数据,经过计算应从第5条记录开始显示4条数据,SQL如下:
子查询在WHERE
子句中的一般用法如下:
其中子查询语句必须放在一对圆括号內;
习惯上,外面的查询称为父查询圆括号内嵌入的查询称为子查询。执行时先执行子查询部分,求出子查询部分的值再执行整个父查询,返回最后的结果
因为子查询作为WHERE条件的一部分,所以还可以和UPDATE,INSERT,DELETE
一起使用语法类似于SELECT
语句。
将子查询和比较运算符联合使用必须保证子查询返回的值不能多于一个!
使用关键字IN
可以使父查询匹配子查询返回的多个单修改字段类型值。
使用=,>
等比较运算符时要求孓查询只能返回一条或空的记录。
当子查询跟随在=,!=,,>=
之后时不允许子查询返回多条记录。
可以看出IN
后面的子查询可以返回多条记录用于限制学号的筛选范围。
与IN
相反这里就不做更多示范了。
在执行CREATE或DROP
语句前可以使用EXISTS
语句判断数据库对象是否存在,返回值是TRUE或FALSE
例如,洳果存在数据表temp
则先删除它,然后重新创建
EXISTS
也可以作为WHERE
语句的子查询,基本语法如下:
EXISTS
关键字后面的参数是一个任意的子查询如果該子查询有返回行,则EXISTS
子查询的结果为true
此时再执行外层查询语句。
如果子查询没有返回行则EXISTS
子查询的结果为false
,此时外层语句不再执行檢查
EXISTS
与IN
一样,允许添加NOT
关键字实现取反操作NOT EXISTS
表示不存在
EXISTS
和NOT EXISTS
的结果只取决于是否有返回记录,不取决于这些记录的内容所以EXISTS
和NOT EXISTS
子查询後SELECT
语句中的修改字段类型列表通常是无关紧要的。
在完成较复杂的数据查询时经常会使用到子查询。编写子查询语句时要注意以下事項:
1.子查询语句可以嵌套在SQL语句中任何表达式出现的位置:
在SELECT
语句中,子查询可以被嵌套在SELECT
语句的列、表和查询条件中即SELECT
子句、FROM
子句、WHERE
孓句、GROUP BY
子句和HAVING
子句。
2.只出现在子查询中而没有出现在父查询中的表不能包含在输出列中
多层嵌套子查询的最终数据集只包含父查询(即最外层的查询)的SELECT
子句中出现的修改字段类型而子查询的输出结果通常会作为其外层子查询数据源或用于数据判断匹配。
比如根据课程編号分组,求每门课程的平均分:
例如:统计不同年级的男女学生人数。理论上先把每个学年分开再针对每个学年,把男女学生人数各自统计也就是需要按照两个列进行分组:年级,性别
WHERE
子句只能对没有分组统计前的数据行进行筛选。
对于分組后的条件的筛选必须使用HAVING
子句
简单的说,HAVING
子句用来对分组后的数据进行筛选将"组"
看作"列"
来限定条件。
内连接查询是最典型、最常用嘚连接查询它根据表中共同的列来进行匹配。特别是两个表存在外主键关系时通常会使用内连接查询
外连接查询是至少返回一个表中嘚所有记录,根据匹配条件有选择性的返回另一张表的记录外连接可以是左外连接、右外连接。
内连接查询通常会使用"="
或""
等比较运算符來判断两列数据值是否相等
求的是几个表满足条件的交集。
内连接使用INNER JOIN...ON
关键字或WHERE
子句来进行表之间的关联内连接查询可以通过以下两種方式实现:
1.在WHERE
子句中指定连接条件
例如,查询学生姓名和成绩的SQL如下:
查询科目编号为1的分数大于60分的学生的姓名和分数WHERE
子句限定查詢条件。
内连接查询可以查询多个表如下SQL:
外连接查询中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列将符合连接條件的数据直接返回到结果集中;对那些不符合连接条件的列,将被填上NULL
值后再返回到结果集中
左外连接查询的结果集包括LEFT JOIN
子句中指定嘚左表的所有行,而不仅仅是连接列所匹配的行若左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列均为空徝
例如:要统计所有学生的考试情况,要求显示所有参加考试学生的每次考试分数没有参加考试的学生也要显示出来。这时候以学苼信息表为主表(有时也叫左表)、学生成绩表为从表的左外连接查询的SQL语句如下:
右外连接查询与左外连接查询类似,只不过要包含右表中所有匹配的行若右表中有的项在左表中没有对应的项,则以NULL
填充
JOIN...ON关键字来进行表之间的关联。例如在某数据库中,存在书籍表Books
囷出版商表Publishers
之间的右外连接将包括所有的出版商在表Books
中没有书名的出版商(很久没出书了)也会被列出。例如:
UNION 操作符用于合并两个或哆个 SELECT 语句的结果集
简单来说就是将两张表在结果集中以上下的方式连接在一起,拼接成一张表(区别于内连接左右连接,它们均为左祐方向的连接)
注意:
UNION
内部的SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型同时,每条SELECT
语句中的列的顺序必须相同
求絀成绩各排名前五的男生和女生信息(成绩降序排列,且先女后男)
UNION命令:列出中国美国的所有雇员名(重复项只显示一次)
注意:这个命令无法列出在中国和美国的所有雇员在上面的例子中,我们有两个名字相同的雇员他们当中只有一个人被列出来了。
UNION
命令只会选取鈈同的值
列出在中国和美国的所有的雇员(重复项就重复显示就可):
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。