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 的意思)

注意:

  1. (从表的某个字段) 的数据类型必须与 主表(被参考字段)的数据类型一致,逻辑意义也一致
  2. 主表(被参考字段)必须是主表中的一个 key(键)
  3. (从表的某个字段) 的字段名可以与 主表(被参考字段)的字段名一样,也可以不一样
  4. [constraint xxx] 代表可选,写不写效果都一样,xxx是外键约束的名称。巧记constraint=const+raint
  5. 列级约束和表级约束是可以同时使用的
  6. 建表顺序与删除表的顺序我想你应该是滚瓜烂熟了,所以我就不啰嗦了

关于 key 和 primary key

  • key

    最简单和普通的索引,一般用来加快查询速度,大多数用来当作外键使用,在没有声明主键的情况下,key声明的就是主键

    PRI 主键约束、UNI 唯一约束、MUL 可以重复

    1. 如果 key 是空的,那么该列的值可以重复
    2. 如果 key 是PRI,那么该列是主键的组成部分
    3. 如果 key 是UNL,那么该列是一个唯一值索引的第一列(前导列),且不能含有空值(null)
    4. 如果 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.设计外键时,它里面的 被引用表 就是 其它表 的意思,被引用的字段 就是 其它表的字段

做笔记是我说我学了这门课程的底气

posted @ 2022-06-20 20:30  朱在春  阅读(134)  评论(0编辑  收藏  举报