MySQL之数据类型,建表以及约束

数据库

目录

数据库

1、MySQL数据类型

2、六大约束

3、表操作

1、创建表

2、删除表

3、修改表

4、复制表


1、MySQL数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

①字符类型:char,varchar,text,blob

②数值类型:int,bigint,float,decimal

int -> int

bigint -> long

float -> 成绩

decimal -> 货币类型(精度,小数)

③时间类型:date,time,datetime,timestamp

date -> yyyy:MM:dd HH:mm:ss

time -> HH:mm:ss

datetime -> yyyy:MM:dd

timestamp(时间戳) -> 长整数

2、六大约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

①NOT NULL:非空,用于保证该字段的值不能为空。比如学号,姓名...

②DEFAULT:默认,用于保证该字段有默认值。比如性别

③PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空。比如学号、员工编号等

④UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。比如座位号

⑤CHECK:检查约束【mysql中不支持】。比如年龄、性别

⑥FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值在从表添加外

键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号

3、表操作

1、创建表

#通用的写法:★
USE students;#使用students数据库
CREATE TABLE IF NOT EXISTS stuinfo(
  id       INT         PRIMARY KEY,#主键
  stuname  VARCHAR(20) NOT NULL,#非空
  sex      CHAR(1)     check(sex ='男' OR sex = '女'),#检查
  age      INT         DEFAULT 18,#默认
  seat     INT         UNIQUE,#唯一
  majorid  INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
);

#其他写法
CREATE TABLE stuinfo(
id      INT,
stuname VARCHAR(20),
gender  CHAR(1),
seat    INT,
age     INT,
majorid INT,
    
CONSTRAINT pk PRIMARY KEY(id),#主键
CONSTRAINT uq UNIQUE(seat),#唯一键
CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
);

注意:添加外加约束时嘚保证与该表建立外键关系的表存在!!!

上述代码:如果没有major表,那么创建stuinfo表是会报下述错误:

1824 - failed to open the referenced table 'major'

2、删除表

DROP TABLE 表名

注意:如果该表和其他表建立了外键约束!删表要注意顺序。

如果stuinfo表和major表存在主外键约束!

stuinfo表的majorID字段作为该表的外键与major表的主键id建立了约束!

如果进行删除表操作,如果先删除了major表,会报错!!!

3730 - Cannot drop table 'major' referenced by a foreign key constraint 'fk_stuinfo_major' on table 'stuinfo'.

如何理解主外键?↓↓↓

可以理解为建立了依赖关系!学生表中的外键班级idcid与班级表的主键cid建立了外键约束!

那么学生表的班级idcid字段会依赖班级表中的cid字段学生表依赖班级表!!!

如果班级表被删除,那么学生表中的班级idcid字段依赖的数据从何而来!?很明显是不合理的,因此该操作是不

被允许的!删除了学生表,但是班级表并不依赖学生表,操作成功!

3、修改表

/*
 * 语法
 * alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;
 */

#修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;

#修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

#添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;

#删除列
ALTER TABLE book_author DROP COLUMN annual;

#修改表名
ALTER TABLE author RENAME TO book_author;

#二、修改表时添加约束

#1、添加列级约束
#alter table 表名 modify column 字段名 字段类型 新约束;

#2、添加表级约束
#alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;

#1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

#2.添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

#3.添加主键
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#②表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);

4、复制表

#1.仅仅复制表的结构
CREATE TABLE copy LIKE author;

#2.复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;

#只复制部分数据
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中国';

#仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张同学_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值