Mysql数据库
Mysql数据库
建表
Mysql中没有 number 和 varchar2
varchar必须要指明长度;
数据库的命名只能包含:数字,字母,_(下划线)
数据库中是不区分大小写的
create table student(
id int primary key auto_increment comment 'id',
name varchar(200) not null comment '姓名',
age int comment '年龄',
gender enum('male','female') comment '性别',
birthday date comment '生日'
);
drop table student;
insert into student(name,age,gender,birthday) values('jack',11,'male',20220620);
alter table student rename jz_customer;
- 上面这张表不能插入中文,会有乱码,解决办法如下(三种)
alter table jz_customer convert to character set utf8;
# 将这个表的编码改为utf-8或者gbk,因为mysql默认的编码是latin1
create table student(...)character set utf8;
# 在建表的时候设置好,注意这里不能写utf-8,可能是它里面本来就不支持 - 这个符号吧
create database xxx character set utf8 collate utf8_general_ci;
# 在建数据库的时候设置好
外键
create table dept( #主表
did int primary key auto_increment
)character set utf8;
create table emp( #从表
eid int primary key auto_increment,
deptId int,
constraint jackson foreign key (deptId) references dept(did)
)character set utf8;
# 写法:[constraint xxx] foreign key (从表的某个字段) references 主表(被参考字段)
# 巧记:写在括号里面的一定是表中的字段
# 外键命名规则(即上方的xxx):fk_当前表名_关联表名_当前表的外键字段名 (其中 fk 是 foreign key 的意思)
注意:
- (从表的某个字段) 的数据类型必须与 主表(被参考字段)的数据类型一致,逻辑意义也一致
- 主表(被参考字段)必须是主表中的一个 key(键)
- (从表的某个字段) 的字段名可以与 主表(被参考字段)的字段名一样,也可以不一样
- [constraint xxx] 代表可选,写不写效果都一样,xxx是外键约束的名称。巧记constraint=const+raint
- 列级约束和表级约束是可以同时使用的
- 建表顺序与删除表的顺序我想你应该是滚瓜烂熟了,所以我就不啰嗦了
关于 key 和 primary key
-
key
最简单和普通的索引,一般用来加快查询速度,大多数用来当作外键使用,在没有声明主键的情况下,key声明的就是主键
PRI 主键约束、UNI 唯一约束、MUL 可以重复
- 如果 key 是空的,那么该列的值可以重复
- 如果 key 是PRI,那么该列是主键的组成部分
- 如果 key 是UNL,那么该列是一个唯一值索引的第一列(前导列),且不能含有空值(null)
- 如果 key 是MUL,表示该列的值可以重复
列级约束和表级约束
-
列级约束
六大约束语法都支持,但是别在有主键的情况下再添加一个key,那种情况你用表级约束实现
-
表级约束
除了非空、默认,其它都支持
DDL、DML等
- DDL
主要是对数据库、表进行操作 - DML
主要是对数据进行修改,比如增、删、改。注意,不包括查,查 是DQL
额外补充
-
官方文档
utf8mb3字符集已被弃用,它在未来的MySQL版本中将会被删除,请使用utf8mb4代替。在目前的8.0版本中,utf8指的就是utf8mb3,虽然未来可能改成utf8mb4,但是为了避免产生歧义,可以考虑为字符集引用显式指定utf8mb4,而不是utf8。
-
关于check约束
MYSQL5.7 可以使用check约束,但check约束对数据验证没有任何作业,添加数据时,没有任何错误或警告。如果要使用,我们可以用 enum 来代替
但是在 MYSQL8.0 及更高版本可以正常使用check约束
-
关于自动递增
假如你的这一个字段设置了自动递增,那么你可以在传参数的时候给它传个null,它就会认为让它来帮你填充值,即自动递增。这样你就可以在插入的时候不用再这么写了table(xxx,xxx,...),直接用全部字段插入,遇见自增的id给它传个null,它会自动帮你生成的
-
查看版本
mysql -V
-
Navicat的使用
1.设计外键时,它里面的 被引用表 就是 其它表 的意思,被引用的字段 就是 其它表的字段
做笔记是我说我学了这门课程的底气
这一路,灯火通明