MysqL中模式就是数据库
数据库名称
数据库
删除名为TEST的数据库
数据库
显示当前数据库所有表格
查看表TEST的结构,同show columns from TEST
包括建表语句
创建基本表:
<数据类型>[列级完整性约束条件],
<数据类型>[列级完整性约束条件],
属性studentId,name,address,其中studentId为主键
修改基本表:
RENAME <修改后表名>
ADD COLUMN <列名> <属性类型>
CHANGE COLUMN <列名> <修改后列名> <属性类型>
修改TEACHER表中的列,将ADDRESS的列名改为address
DROP [COLUMN] <列名>
删除列名为address的列,column可有可无
删除基本表:
[RESTRICT|CASCADE]
删除表格
删除STUDENT表。受限制的删除,欲删除的基本表不能被其他表的约束所引用(如check,foreign key等约束),
函数等。
删除没有限制。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。
MysqL测试的时候给错误提示Cannot delete or update a parent row: a foreign key constraint fails,不予以删除,不知道是什么原因。
文章:
ADD CONSTRAINT <约束名> <约束条件>
增加名为pk_teacher_id的主键约束。
DROP <约束条件>
删除teacher表的主键约束。
增加名为fk_student_teacher的约束条件,约束条件为外键约束。
索引的建立与删除:
ON <表名>(<列名> [次序][,<列名> [次序]]……);
删除:
ON <表名>
删除索引,索引名为id_index
方法:
ADD [UNIQUE]|[CLUSTER] INDEX [<索引名>](<列名> [<次序>],[<列名> [<次序>]]……)
删除索引:
DROP INDEX <索引名>
删除teacher表名为id_index的索引
数据库索引的建立有利也有弊,参考文章:
数据查询:
[,<目标列表达式>]……
[<表名或视图名>]……
]
[HAVING <条件表达式>]]
[ASC|DESC] [,<列名3> [ASC|DESC]]……];
查询经过计算的值:
查询经过计算的值,从teacher表中查询出teacherId字段,别名为id,并且查询出salary字段减去100后的字段,别名为S
函数和字符串:
可以是字符串常量和函数等,'birth' 为字符串常量,lower(name)为函数,将name字段以小写字母形式输出
查询满足条件的元组:
查询条件:
查询条件 |
谓词 |
比较 |
=,>,<,>=,<=,!=,<>,!>,!< |
确定范围 |
BETWEEN AND,NOT BETWEEN AND |
确定集合 |
IN,NOT IN |
字符匹配 |
LIKE,NOT LIKE |
空值 |
IS NULL,IS NOT NULL |
多重条件(逻辑运算) |
AND,OR,NOT |
500;
500;
' [ESCAPE '<换码字符>']
可以是一个完整的字符串,也可以含有通配符%和_
查询:
查询:
查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为(ASC)
聚集函数(aggregate functions):
统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列值的个数
SUM([DISTINCT|ALL]<列名>) 计算一列值的总和
AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值
MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值
MIN([DISTINCT|ALL]<列名>
查询没有重复的名字的个数
查询teacher表格总记录数
查询teacher表的salary字段的总和
查询teacher表的salary字段的平均值
查询teacher表的salary字段的最大值
查询teacher表的salary字段的最小值
查询结果按某一列或多列的值分组,值相等的为一组。
对查询结果分组的目的是为了细化聚集函数的作用对象。分组后聚集函数将作用于每一个组,即每一组都有一个函数值。
输出满足指定条件的组,则可以使用HAVING语句指定筛选条件。
= 4;
查询:
查询是关系数据库中最主要的的查询,包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询和复合条件连接查询等。
等值与非等值连接查询:
查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,格式为:
.]<列名> <比较运算符> [<表名2>.]<列名2>
,!=(或<>)等
查询,将student表和teacher的信息连接查询出来,连接条件是s.teacherid = t.teacherid
自身连接:
查询,在people表里有两种角色,一种是教师,一种是学生,利用自身连接查询,得到name字段和teacher字段相等的元组
[,<目标列表达式>]…… FROM <表名1> LEFT [OUTER] JOIN <表名2> ON <连接条件>
右外连接:SELECT<目标列表达式>[,<目标列表达式>]…… FROM <表名1> RIGHT [OUTER] JOIN <表名2> ON <连接条件>
student表和class表进行右外连接,连接条件为s.cno=c.cno
student表数据:
+-----+-----+------+
| sno | cno | name |
+-----+-----+------+
| 1 | 1 | 地心 |
| 2 | 2 | 华雄 |
| 3 | 1 | 孝慈 |
| 4 | 3 | 必须 |
+-----+-----+------+
+-----+-----+------+
| cid | cno | name |
+-----+-----+------+
| 1 | 1 | 化学 |
| 2 | 2 | 物理 |
| 3 | 3 | 政治 |
+-----+-----+------+
效果:
效果:
MysqL不支持全外连接!
score from student s,class c where s.cno = c.cno and s.score < 60;
复合条件连接查询,查询学生信息和课程信息,并且成绩小于60的记录
查询:
查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
查询的SELECT语句中不能使用ORDER BY子句,ORDER BY 子句只能对最终查询结果排序
查询:
查询和"华雄"选同一课程的所有学生的学号和姓名。
查询条件依赖于父查询,这类子查询称为相关子查询,
整个查询语句称为相关嵌套查询语句。
带有比较运算符的子查询:
score) from student s2
查询学生的大于各科平均成绩的科目
查询。
查询
查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰。使用ALL或ALL谓词时必须使用比较运算符。
ANY 大于子查询结果的某个值
>ALL 大于子查询结果的所有值
>=ALL 大于等于子查询结果的所有值
<=ANY 小于等于子查询结果的某个值
<=ALL 小于等于子查询结果的所有值
=ANY 等于子查询结果的某个值
=ALL 等于子查询结果的所有值(通常没有实际意义)
!=(或<>)ANY 不等于子查询结果的某个值
!=(或<>)ALL 不等于子查询结果的任何一个值
MySQL数据库不支持INTERSECT和EXCEPT操作!
INTO <表名> [(<属性列1>)[,<属性列2>]……]
VALUES (<常量1>[,<常量2>]……);
[(<属性1>[,<属性2>]……)]
修改数据:
=<表达式>[,<列名>=<表达式>]……
]
FROM <表名>
[WHERE <条件>];
[(<列名>[,<列名>]……)]
AS <子查询>
查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT语句。
删除的行满足视图定义中的谓词条件
属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。
属性名,而是聚集函数或列表达式。
score)
score
修改了基本表的结构,则基本表与视图的映射关系就被破坏了,该视图就不能正确工作了。为避免出现这类问题,最好在修改基本表之后删除由该基本表导出的视图,然后重建这个视图。
删除视图:
[CASCADE];
删除语句,把该视图和由它导出的所有视图一起删除。
查询视图:
查询视图和查询基本表类似。