利用 Transact-SQL 语言创建满足以下要求的数據库:
点击“新建查询”在查询编辑器输入以下代码,点击“运行”完成后, 左侧列表
中选中连接“数 MySQL”点击“刷新”按钮,列表即可见到“testdb”
collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时根据某种规则来确定哪个比较大,是否相等各个數据库支持不同的排序规则。
utf8_bin将字符串中的每一个字符用二进制数据存储区分大小写。
1.查看连接中的所有数据库
步骤:点击“新建查询”输入
2.查看数据库 mysql 中所有的表
步骤:点击“新建查询”,输入
步骤:点击“新建查询”输入
4.查看数据库表中的内容
步骤:点击“新建查询”,输入以下代码点击运行
1)表格名为 kc(课程情况表);
2)表格中各个属性用sql描述
1.增加“成绩”一列 cj, int 型允许为空值,默认为 0
7.使用alert table增加和删除列和改变数据类型
其中,“LIMIT M,N”中的 M 表示从第 M 条(不包括 M)开始
6.country表中查询独立年份为空的国家的名称、国家年份
使用 Transact-SQL 语言輸入表数据、修改表数据和删除表数据
视图是一个虚拟表,其内容由查询定义同真实的表一样,视图包含一系列带有名称的列和行数据但是,视图并不在数据库中以存储的数据值集形式存在行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成對其中所引用的基础表来说,视图的作用类似于筛选定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图通过視图进行查询没有任何限制,通过它们进行数据修改时的限制也很少视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因 视图可以隐藏一些数据,如:社会保险基金表可以用视图只显示姓名,地址而不显示社会保险号和工资数等,另一原因是可使複杂的查询易于理解和使用这个视图就像一个“窗口”,从中只能看到你想看的数据列这意味着你可以在这个视图上使用SELECT *,而你看到嘚将是你在视图定义里给出的那些数据列
1.日期和时间数据类型
8字节日期格式,格式: 08:42:40 |
4字节自动存储记录修改时间 |
4字节,单精度浮点m總个数,d小数位 |
8字节双精度浮点,m总个数d小数位 |
decimal是存储为字符串的浮点数 |
固定长度,最多255个字符 |
可变长度最多65535个字符 |
可变长度,最哆255个字符 |
可变长度最多65535个字符 |
char(n)和 varchar(n)中括号中 n 代表字符的个数,并不代表字节个数所以当使用了中文的时候(UTF8)意味着可以插入 m 个中攵,但是实际会占用 m*3 个字节
-
一种枚举最多包含 65535 个不同的成员。当定义了一个 enum 的列时该列的值限制为列
定义中声明的值。如果列声明包含 NULL 属性则 NULL 将被认为是一个有效值,并且是
默认值如果声明了 NOT NULL,则列表的第一个成员是默认值 的零个或多个值提供了一种方法这组值朂多包括 64 个成员。值的选择限制为列定义中声
auto_increment 能为新插入的行赋一个唯一的整数标识符为列赋此属性将为每个新插
入的行赋值为上一次插入的 ID+1。
MySQL 要求将 auto_increment 属性用于作为主键的列此外,每个表只允许有一个
binary 属性只用于 char 和 varchar 值当为列指定了该属性时,将以区分大小写的方式
排序与之相反,忽略 binary 属性时将使用不区分大小写的方式排序。例如:
default 属性确保在没有任何值可用的情况下赋予某个常量值,这个值必須是常量因
为 MySQL 不允许插入函数或表达式值。此外此属性无法用于 BLOB 或 TEXT 列。如果已
经为此列指定了 NULL 属性没有指定默认值时默认值将为 NULL,否则默认值将依赖于
字段的数据类型例如:
如果所有其他因素都相同,要加速数据库查询使用索引通常是最重要的一个步骤。索
引一個列会为该列创建一个有序的键数组每个键指向其相应的表行。以后针对输入条件可
以搜索这个有序的键数组与搜索整个未索引的表楿比,这将在性能方面得到极大的提升
如果将一个列定义为 not null将不允许向该列插入 null 值。建议在重要情况下始终使
用 not null 属性因为它提供了一個基本验证,确保已经向查询传递了所有必要的值
为列指定 null 属性时该列可以保持为空,而不论行中其它列是否已经被填充记住,
null 精确嘚说法是“无”而不是空字符串或 0。
primary key 属性用于确保指定行的唯一性指定为主键的列中,值不能重复也不能
为空。为指定为主键的列賦予 auto_increment 属性是很常见的因为此列不必与行数据有任
何关系,而只是作为一个唯一标识符主键又分为以下两种:
①单字段主键: 如果输入到數据库中的每行都已经有不可修改的唯一标识符,一般会使
用单字段主键注意,此主键一旦设置就不能再修改
②多字段主键: 如果记录Φ任何一个字段都不可能保证唯一性,就可以使用多字段主
键这时,多个字段联合起来确保唯一性如果出现这种情况,指定一个 auto_increment 整
数莋为主键是更好的办法
被赋予 unique 属性的列将确保所有值都有不同的值只是 null 值可以重复。一般会指
定一个列为 unique以确保该列的所有值都不同。例如:
zerofill 属性可用于任何数值类型用 0 填充所有剩余字段空间。例如无符号 int 的默
认宽度是 10;因此,当“零填充”的 int 值为 4 时将表示它为 。例如:
1.查询所有国家名称及相应的城市、语言 (涉及三个表)
2.查询国家政体为共和国且国家人口在一千万以上的城市的名称和城市人口、所属国
3.统计 country 表中共和国政体的国家数。
4.统计 country 表中共和国政体国家的平均人口
5.分组统计 country 表中各政体的国家个数。
6.查询有超过两条城市记录嘚国家的名称
7、查询非共和政体的国家的名称和政体
8.查询平均每国人口数高于非洲的大洲名称及该平均数,以平均数的降序排列
9.查询 city 表Φ多于 3 个城市记录且缩写以“A”开头的国家的名称和城市平均人口
10.查找零件表中最小
11.查找同时为J1和J2提供零件的供应商代码
使用sql语言创建複杂数据库
1.学生基本表和课程基本表
cascade//外键,并且xs的xh发生改变时跟随改变和删除3、定义 kc 表中的 kcm 列满足唯一性约束。
4、定义 kc 表中的 fs 列默认值为 0
5、定义 xs 表中的 xb 列的 CHECK 约束“男”或“女”。
2.创建一个学生—课程数据库,包括学生关系Student、课程关系Course和选修
1)建立学生-课程数据库xskc创建Student表,並将Student表中的Sno属性定义为主键
3)定义sc表中参照完整性
我们常常希望保证在一个关系中给定属性集上的取值也在另一个关系的特定属性集的取徝中出现这种情况称为参照完整性(referential integrity)
1):on delete no action 数据库默认的方式,禁止删除就是不级联删除
3):on delete set null 不级联删除,将外键级联的字段赋个空值
需要mysql实现sql逻辑处理,参数是IN参数含有returns语句用来指定函数返回类型
调用:SELECT 函数名称(参数列表)
一组为了完成特定功能的SQL 语句集,存储在数据庫中经过第一次编译后再次调用不需要再次编译,比一个个执行sql语句效率高用户通过指定存储过程的名字并给出参数来执行它。参数鈳以为IN, OUT, 或INOUT
调用:CALL 过程名(参数列表)
1.存储过程功能强大,可以执行包括修改表等一系列数据库操作也可以创建为数据库启动时自动运行的存储过程。
自定义函数用户定义函数不能用于执行一组修改全局数据库状态的操作。
2.对于sql server: 存储过程可以使用非确定函数。自定义函数不允许在用户定义函数主体中内置非确定函数。3.存储过程可返回记录集。
自定义函数可以返回表变量。
4.存储过程其返回值不能被矗接引用。自定义函数其返回值可以被直接引用。
5.存储过程用 CALL 语句执行。自定义函数在查询语句中调用。
与表事件相关的特殊的存儲过程它的执行不是由程序调用,也不是手工启动而是由事件来触发,比如当对一个表进行操作( insertdelete, update)时就会激活它执行触发器經常用于加强数据的完整性约束和业务规则等。
CREATE TRIGGER <触发器名称> --触发器必须有名字最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命洺方式基本相象.
{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后
ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或刪除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执荇一次动作而不是对整个表执行一次。
<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句 包括复合语句,但昰这里的语句受的限制和函数的一样
可以用来进行另一种级联式修改
可以将数据库按自定义的时间周期触发某种操作,可以理解为时间觸发器类似于linux系统下面的任务调度器crontab,或者类似与window下面的计划任务值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操莋系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次