课后总复习错题
10.设有E-R图,含有A、B两个实体,A、B之间的联系类型是M:N,则将该E-R图转换为关系模式时,关系模式的数量是3.
解释:
一般情况下,在设计数据库的时候,如果存在多对多的情况
那么就必须将其分解为两个一对多的情况。也就是说,两个实体多对
多的关系,分解后必然在它们之间再出现一个实体来连接它们的关系。
举个例子来说:学生和课程之间它们是多对多的关系,因此在设计的时候
就需添加选课表了。这样答案就是3.
当两个实体是一对多的关系时,那就不需要分解了,这是就是2.
15.数据库、数据库管理系统和数据库系统三者之间的关系是:
数据库系统包括数据库和数据库管理系统。
20.在讨论关系模型时,与“属性”同义的术语是列。
21.下列关于数据的叙述中,错误的是(A)
A.数据的种类包括文字、图形和图像三类; B.数字只是简单的一种数据;
C.数据是描述事物的符号记录; D.数据是数据库中存储的基本对象。
※phpMyAdmin:是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具。
注意:由于phpMyAdmin是PHP程序,因此需要LAMP或者WAMP运行环境。
※SQL:结构化查询语言,是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。
※SQL的特点(优点):
①综合统一,具有一体化特点
②高度非过程化,是一种是面向对象的操作方式
③语言简洁、易学易用
※DDL:数据定义语言
DML:数据操纵语言
DCL:数据控制语言
※比较运算符:
运算符
含义
=
相等
>
大于
<
小于
>=
大于等于
<=
小于等于
<>、!=
不等于
!!>
不小于/不大于
※逻辑运算符:
运算符
含义
ALL
如果一组的比较都为TRUE,那么就为TRUE
AND/&&
如果两个布尔表达式都为TRUE,那么就为TRUE
ANY/SOME
如果一组的比较中其中有任何一个为TRUE,那么就为TRUE
BETWEEN
如果操作数在某个范围以内,那么就为TRUE
EXISTS
如果子查询中包含一些行,那么就为TRUE
IN
如果操作数等于表达式列表中的一个,那么就为TRUE
LIKE
如果操作数与一种模式相匹配,那么就为TRUE
NOT/!
对任何其他布尔运算符的值取反
OR/ ||
如果两个布尔表达式中的一个为TRUE,那么就为TRUE
※位运算符:
运算符
运算规则
&
位AND
|
位OR
^
位XOR
~
位取反
>>
位右移
<<
位左移
※内置函数的主要分类:
①数学函数:用于执行一些比较复杂的算术操作的函数,例如ABS()函数、SORT()函数;
②聚合函数:特意为求和或者对表中的数据进行集中概括而设计的函数;例如,COUNT()函数。
③字符串函数:为2字符串操作而设计的函数;例如,ASCII()函数、CHAR()函数。
④日期和时间函数:操作日期和时间的函数;例如,NOW()函数、YEAR()函数。
⑤加密函数:对数据进行加密的函数;例如ENCODE()函数、ENCRYPT函数。
⑥控制流函数:用来进行条件操作的函数;例如IF()函数。
⑦格式化函数:为格式化数据设计的函数;例如FORMAT()函数。
⑧类型转化函数:可以把一个值转换为指定的数据类型的函数;例如,CAST()函数。
⑨系统信息函数:获得系统本身的信息的函数;例如USER()函数、VERSION()函数。
课后总复习错题
2.在MySQL中,NULL的含义是(C)
A.空串 B.数值0 C.无值 D.FALSE
NULL和空串的区别:NULL是指该字段没有值,而空串代表的是该字段有值。
5.在安装和配置MySQL实例的向导中,可选的MySQL服务器类型包括Developer Machine(开发者机器)、Server Machine (服务器)、Dedicated MySQL Server Machine(专用MySQL服务器)
7.使用MySQL时,可以在MySQL客户端中执行SQL语句,但下面无法用于执行SQL语句的客户端工具是mysqld(C)。
A.mysql命令行 B.phpMyAdmin C.mysqld D.Navicat工具
8.函数NOW()返回的结果是系统的当前日期和时间。
※数据对象:性质相同的数据元素的组合。
※数据类型:系统中所允许的数据的类型。
※在MySQL中可以利用SHOW ENGINES语句来显示可用的数据库引擎和默认引擎。InnoDB是系统的默认引擎,其支持可靠的事务处理。
※一般语法描述所使用的符号如下:
<>:表示在语句中必须指定数据对象,是不可缺少的。
[]:表示可以根据需要进行选择。
|:表示多个选项只能选择其一。
{}:表示必选项。
问题:mysql命令行输入时,忘记输入分号;就按了回车,就会出现->,然后回不到上一行怎么办?
若是没有分号结束的话,不管多少行都会视作一句,如果已经输好了程序但是忘了输入分号按了回车,接着在出现->的后边输入分号即可,然后按回车就会执行前面的sql。
例1:在MySQL中创建一个名为mytest的数据库。
Mysql>Create database mytest;
可以在这里加上if exists用于判断是否存在这个数据库,用于防止数据库不存咋时发生错误。
例2:修改已有数据库mytest的默认字符集和校对规则。
Mysql>alter database mytest
->default character set gb2312
->default collate gb2312_chinese_ci;
其中character set 子句用于更改默认的数据库字符集。
例3:首先删除一个尚未创建的数据库“an_test”,然后在删除语句中加上if exists语句以后再操作一次。
出现报错的现象;
加上if exists 语句以后,可以正常执行;
Mysql>drop database if exists an_test;
例4:列出当前用户可查看的数据库列表。
Mysql>show databases;——显示权限范围内的所有数据库名;
Mysql>show databases like 'mytest';——显示与‘mytest’相匹配的数据库名。
例5:在一个已有的数据库mytest中新建一个包含姓名、性别、年龄、专业、联系方式等字段的学生的基本信息表,要求将字段student_id号指定为该表的主键,并使用InnoDB引擎存储表数据。
mysql> use mytest
Database changed
mysql> create table students
-> (
-> student_id int not null auto_increment,
-> student_name char(50) not null,
-> student_sex char(1) not null default 0,
-> student_age int not null,
-> student_major char(50) not null,
-> student_contact char(50) null,
-> primary key(student_id))
-> engine=innodb;
※在mysql中写sql语句回车后如何更改上一句话?
右键单击“mysql”的“dos窗口”上面的 蓝色横条
选择编辑->标记->然后按住鼠标左键选中你要修改的语句,再去右击蓝色横条选择编辑->复制就把这条你要修改的语句复制到剪贴板了然后去记事本里粘贴修改!
在记事本里写好命令复制,然后右键单点“mysql”的“dos窗口”上面的蓝色横条编辑->粘贴然后执行,当然这只是windows下的办法,要一次执行很多行代码的时候比较省事。
例6:向数据库mytest的表students中添加一列,并且命名为student_from,用于描述学生的生源地,要求不能是NULL,且该列位于原表列student_sex列之后。
Mysql>use table mytest.students
->add column student_from char(10) not null after student_sex;
※change子句:同时修改表中指定列的名称和数据类型。
例7:将数据库mytest中标students的student_from 列重命名为student_city,且数据类型为char(20),允许为NULL。
Mysql>alter table mytest.students
->change column student_from student_city char(20) null;
※Alter子句可以修改或者删除表中指定列的默认值。
例8:将数据库mytest中表students的student_sex列的默认值改为1(代表‘女’).
Mysql>alter table mytest.students
->alter column student_sex set default 1;
※modify子句可以修改指定列的数据类型,但不会干涉它的列名。
与change的区别:change是可以将列名和数据类型都一起改了的。
例9:将数据库mytesr中的表students的students_name列的数据类型由char(50)更改为char(20),并且将此列设置为该表的第一列。
Mysql>alter table mytest.students
->modify column student_name char(20) first;
注意:add和modify都可以通过first或者after关键字来修改指定列在表中的位置。
例10:删除数据库mytest中students的student_contact列。
Mysql>alter table mytest.students
->drop column student_contct;
※rename子句可以为表重新赋予一个表名。
例11:使用rename子句,重新命名数据库mytest中表students的表名为university_students.
Mysql>alter table mytest.students
->rename to mytest.university_students;
或者使用另一种格式:
例12:使用rename table 子句将数据库中mytest的university_students重新命名为students
Mysql>rename table mytest.university_students to mytest.students;
※复制表的语法格式:
Create table [LIKE|AS]
LIKE:可以创建一个与旧表结构相同的表,其中列名、数据类型、空指定和索引都将复制到新表,但是表的内容不会复制,因此创建的是一个和原表结构相同的空表;
AS:如果在复制表结构的同时,复制表的内容,可以用AS子句来完成。使用AS子句可以复制表的内容,但是索引和完整性约束不会被复制。
例13:在数据库mytest中创建一份表students的拷贝students_copy。
Mysql>create table mytest.students_copy like mytest.students;
※删除表:可以使用drop table子句删除表(可以同时删除多个表)
例14:删除数据库mytest的表students_copy。
Mysql>drop table mytest.students_copy;
※显示表的名称:show tables
方法一:
Mysql>use mytest;
Mysql>show tables;
这里的use引用了数据库以后也可以不用“;”直接就接下一个show tables;
方法二:
Mysql>show tables from mytests;
※显示表的结构:show columns(可以理解为每一列相当于属性,也即为表中的结构)
例16:显示数据库mytest中表students的结构。
Mysql>show columns from mytest.students;
注意:mysql支持用describe或者desc作为show columns from的一种快捷方式。
Mysql>desc mytest.students;
※关于空值(NULL):表的关键字不允许为空值,且任意两个空值不相等。
※关于标志(IDENTITY)属性:每个表中只有一个列设置为标志属性,并且该列只能是DECIMAL、INT、NUMERIC、SMALLINT、BIGINT、TINYINT数据类型。
※关于列类型的隐含改变:
①长度小于4的VARCHAR类型会被改变为CHAR类型;
②当一张表中包含任何变长的列时,如VARCHAR、TEXT、BLOB类型的列,该表中所有大于3个字符的其他CHAR类型列会被改变为VARCHAR类型列;
③TIMESTAMP类型的列值显示尺寸必须是在偶数2~14范围内;
④不能在TIMESTAMP中存储空值NULL,所以当该列的值设置为NULL的时候,MySQL会默认设置为它当前的日期时间。