这里有重复内容,因为我听了2遍
约束类型与作用域
列级约束的定义为对单一字段起作用,表级约束定义为对多字段起作用
设置数据库默认引擎方法
在MySQL配置文件(my.ini)中写入或更改该句,更改完记得重新启动MySQL服务.
查看数据表创建命令
show create table 表名;
第一个表,也是父表
父表的id被设为主键,主键会自动创建索引
第二个表,也就是子表/外键表
第一次数据类型不一样
第二次符号位不一样
直到第三次才成功
查看子表的索引
子表有2个索引,一个是主键索引,一个是参照列索引
外键约束的具体操作
主要作用为,子表在父表更新的时候是否也自动进行相应的操作
再创建一个自动删除的子表
如果设置了外键约束,需要先给参照列添加数据才能给外键列添加数据
先给父表添加数据,因为id是主键,而且自动编号,所以只需要给pname添加数据就可以
然后给子表的添加数据
成功给子表外键列(pid)添加一个3,是因为参照列(id)有3,
7添加失败是因为参照列(id)没有7
同上
了解一般计算机语言中的枚举是怎么回事基本都能理解其中原理
查看users1表中的数据id之所以是1 3 是因为第二次的7添加失败,但自动编号还是会加1(个人猜测为添加之后检查不符合规则然后又将其删除)
现在将参照列(id)中的3 字段删除,再看看users1表的数据
在添加delete on cascade条件下子表的外键列(pid)的对应记录确实消失了
set null 即为,当父表参照列字段删除时,子表外键列对应的字段设置为空值
外键约束分为逻辑外键约束与物理外键约束
物理外键约束即为基于innodb引擎在表之间使用外键关键词建立的约束
逻辑外键约束为:我们在定义两张表的结构的时候,我们是按照两张表存在着某种结构的方式去定义,但是不去使用外键约束关键词来定义
数据表的修改包括,列的增删,约束的增删
在表建立完之后再添加一个列
ALTER 意为修改 TABLE 意为表 ADD意为添加 FIRST 置顶 AFTER 某列后面
ALTER TABLE 表名 ADD 列名 数据类型 符号位 空值约束 默认值约束 列位置
//如果没添加列的位置关键词,则默认在最后一列
添加多列的时候无法修改列的位置,只能在列的最后
ALTER TABLE 表名 ADD [列] (列名1 各种列定义,列名2 各种列的定义,列名3...);
删除列
删除多列只需要用逗号隔开,每个列名前面加一个DROP就行,例子如下:
也可以删除的同时增加 一个,例子如下
增添约束
添加主键约束
语句为:ALTER TABLE 表名 ADD CONSTRAINT 自定义约束名 索引类型(列名);
先创建一个无主键的表
再添加了一个id列
图中CONSTRAINT为约束关键词
PK_user2_id 为约束自定义名称
id 确实变成了主键.
其中还有索引的类型,索引的类型有2种:B树索引和哈希索引,后面讲.
添加唯一约束
和上面的主键约束语句差不多,不同之处在于约束类型和列名不同
添加约束时可以不写constraint,直接写约束类型,可以被MySQL自动识别.
自定义约束名也可以省略掉,可以简化为下面这样:
ALTER TABLE 表名 ADD 索引类型(列名);
成功了,将id变成主键,username增加了唯一约束.
添加外键约束
可以简化为:ALTER TABLE 表名 ADD FOREIGN KEY (外键列) REFERENCES 父表名 (参照列);
REFERENCES意为:参照值
添加删除默认约束
先添加一个普通的列
然后给age添加默认值约束,其实说是修改默认值比较合适,因为每个列都自带默认值为null
所以可以简化为:ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认的值;
原以为将默认值修改回null 相当于删除了默认值,
结果没法将null当做默认值,想将默认值变回null,只能使用删除命令.
也就是这条命令 ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
主键约束的删除:ALTER TABLE 表名 DROP PRIMARY KEY; /因为主键只有一个,所以不需要指定列名
唯一约束的删除:ALTER TABLE 表名 DROP INDEX 索引名 ;
索引名查看命令: SHOW INDEXES FROM 表名;
图中的key_name就是索引名,其实翻译过来是键名,也就是约束名
成功了,删除了约束,列依旧存在.
删除外键约束
命令简化为:ALTER TABLE 表名 DROP FOREIGN KEY 约束名称
约束名称查询可用命令:SHOW CREATE TABLE 表名;
删除成功了
删除外键约束的时候不会自动删除索引,需要手动删除,用上面的删除索引命令就可以彻底删除.
先查询索引名,再删除索引.
修改列定义
修改列定义所包含的是列的各种设定,比如数据类型,列名,列的位置等等..
命令: ALTER TABLE 表名 MODIFY [COLUMN] 列名 列的各种设定(如果不修改也要写原本的设定(列名也是列属性之一)) [FIRST | AFTER 放置于某列后面]
意译: 要修改某表 表名 要修改某列的列名 列的某些属性 列的位置
该命令用于列创建完之后修改列而使用
比如现在要修改id列的位置
具体例子:
结果
修改数据类型时,将长类型修改为短类型会容易导致数据丢失,原因是数据截取,学过机器语言的应该了解什么情况的,不解释了.
修改数据类型例子:
修改列名称
修改列名例子:
注意关键词,使用的是CHANGE,而且也能修改列的其他设定,确实比MODIFY多一个功能.
修改表名称
第一种方法例子:
语句:ALTER TABLE 表名 RENAME [TO | AS ] 新表名;
第二种方法例子:
第二种方法支持同时修改多个表名,用逗号隔开
少使用表或者列的更名,原因和修改原文件名会导致快捷方式失效一样
本章知识点总结
NOT NULL 非空约束
PRIMARY KEY 主键约束
UNIQUE KEY 唯一约束
DEFAULT 默认约束
FOREIGN KEY 外键约束
注意,是对表的操作
创建新表:
删除与查看表:
表的约束:
这里约束是指列约束,一般是对一条记录内的不同字段起限制
表中一般都要有一个主键,但也可以有两个
实际开发中,主键列一般没有实际作用.
新约束对旧记录无效,
添加单条记录
INSERT 表名 VALUES(字段1,字段2,...);
字段可以是直接值或表达式,或者是MySQL提供的api算法
添加多条记录
将每一条记录用逗号隔开,例子如下:
添加查询结果记录
后面讲,这个添加记录的方法类似于自动复制黏贴,将指定的记录从表a导入表b
讲师:任小龙
文中所有图片中的信息皆为讲师所写,本人仅仅将其截图作为笔记.