视频链接:https://www.bilibili.com/video/BV12b411K7Zu?t=7&p=304
Date Define Language ,用于对数据库和表的管理和操作
主要内容:
一、库的管理
二、表的管理
三、数据类型
一、库的管理
#一、如何创建库
CREATE DATABASE studb;
#提高容错性,在java中用下面语句写
CREATE DATABASE IF NOT EXISTS studb;
#二、如何删除库
DROP DATABASE studb;
DROP DATABASE IF NOT EXISTS studb;
复制
二、表的管理
1.创建表
语法:
CREATE TABLE 表名(
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】
);
#(无约束)案例:创建一个学生信息表
CREATE TABLE IF NOT EXISTS stuinfo(
stuid INT ,
stuname VARCHAR(20),
gender CHAR,
email VARCHAR(20),
borndate DATETIME
);
DESC stuinfo;
复制
2.常见的六大约束
说明:用于限制表中字段的数据的,从而进一步保证数据表的数据是一致的准确的
NOT NULL 非空 :限制字段为必填项
DEFAULT 默认 :用于限制该字段没有显式插入值,则直接显式默认值
PRIMARY KEY 主键 :用于限制该字段的值不能重复,并默认不能为空,一个表只能有一个主键
UNIQUE 唯一 :用于限制该字段的值不能重复,一个表可以有n个
CHECK 检查 : 用于限制该字段的值必须满足指定条件,mysql不支持CHECK命令,但是也不报错
CHECK(age BETWEEN 1 AND 100)
FOREIGN KEY 外键 :用于限制两个表的关系,要求外键列的值必须来自于主表的关联列
要求:1.主表关联列和从表的关联列的类型必须一致,意思一样
2.主表的关联列要求必须是主键
#(有约束)案例:
CREATE TABLE IF NOT EXISTS stu_info(
stuid INT PRIMARY KEY , # 添加主键约束
stuname VARCHAR(20) UNIQUE NOT NULL, # 添加唯一约束+非空约束,可以叠加
gender CHAR(1) DEFAULT '男', # 添加默认约束
email VARCHAR(20) NOT NULL,
borndate DATETIME,
age INT CHECK(age BETWEEN 0 AND 100) , # 添加检查约束,mysql不支持
majorid INT,
CONSTRAINT fk_stu_info_major FOREIGN KEY (majorid) REFERENCES major(id) # 外键
);
#案例:不同方式添加主键
CREATE TABLE IF NOT EXISTS stu_info(
stuid INT ,
stuname VARCHAR(20) UNIQUE NOT NULL, # 添加唯一约束+非空约束,可以叠加
gender CHAR(1) DEFAULT '男', # 添加默认约束
email VARCHAR(20) NOT NULL,
borndate DATETIME,
age INT CHECK(age BETWEEN 0 AND 100) , # 添加检查约束,mysql不支持
majorid INT,
primary key(stuid), # 添加主键
constraint uq unique (stuname) , #添加唯一键
CONSTRAINT fk_stu_info_major FOREIGN KEY (majorid) REFERENCES major(id) # 外键
);
复制
外键的设置:
主表:
选择:
3.修改表
语法:ALTER TABLE 表名 ADD | MODIFY | CHANGE | DROP COLUMN 字段名 字段类型 【字段约束】
#1.修改表名
ALTER TABLE stuinfo RENAME TO students;
#2.添加字段
ALTER TABLE students ADD COLUMN borntime TIMESTAMP NOT NULL;
ALTER TABLE students DROP COLUMN borntime ;
DESC students;
#3.修改字段名
ALTER TABLE students CHANGE COLUMN borndate birthday DATETIME NULL;
#4.修改字段类型
ALTER TABLE students MODIFY COLUMN birthday TIMESTAMP ;
DESC students;
#5.删除字段
ALTER TABLE students DROP COLUMN birthday ;
复制
4.删除表
DROP TABLE IF EXISTS students;
复制
5.复制表
#复制表结构
CREATE TABLE newTable LIKE stu_info;
#复制表的结构加数据
CREATE TABLE newTable2 SELECT * FROM girls.`beauty`;
#案例:复制employees表中的last_name,department_id,salary字段到新表emp
CREATE TABLE emp
SELECT last_name,department_id,salary
FROM myemployees.`employees`
WHERE 1=2;
复制
三、常用的数据类型
int(10):整型,括号内显示的是宽度是10,也可以不写括号
tinyint:
smallint:
bigint:
double/float:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
decimal:浮点型,精度更高,在表示钱方面使用该类型,因为不会出现精度缺失问题;
char:固定长度字符串类型;char(4) 范围是0-255
varchar:可变长度字符串类型;
text:字符串类型;表示存储较长文本
意思 | 格式 | n的解释 | 特点 | 效率 | |
---|---|---|---|---|---|
Char | 固定长度字符 | Char(n) | 最大的字符个数,可选默认:1 | 不管实际存储,开辟的空间都是n个字符 | 高 |
Varchar | 可变长度字符 | Varchar(n) | 最大的字符个数,必选 | 根据实际存储决定开辟的空间 | 低 |
blob:字节类型;//jpg mp3 avi 存储图片型
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp/datetime:时间戳类型;日期+时间 yyyyMMdd hhmmss
保存范围 | 所占字节 | |
---|---|---|
Datetime | 1900-1-1~xxxx年 | 8 |
Timestamp | 1970-1-1~2038-12-31 | 4 |
补充:之前的小测试
# 测试题
#1.使用分页查询实现,查询员工信息表中的部门为50号的工资最低的5名员工的信息
SELECT * FROM employees
WHERE department_id = 50
ORDER BY salary
LIMIT 5;
#2.使用子查询实现城市为'Seattle'的,且工资>10000的员工姓名
#步骤1:查询城市toroto的部门编号,需要使用内连接
SELECT department_id
FROM departments d
JOIN locations l ON d.`location_id`=l.`location_id`
WHERE city = 'Seattle';
#步骤2:查询部门号在1中的员工姓名
SELECT last_name
FROM employees
WHERE salary > 10000
AND
department_id IN (
SELECT department_id
FROM departments d
JOIN locations l ON d.`location_id`=l.`location_id`
WHERE city = 'Seattle'
);
#3.创建表qqinfo,里面包含qqid,添加主键约束(昵称nickname),添加唯一约束、邮箱email(非空)、性别gender
CREATE TABLE IF NOT EXISTS qqinfo (
nickname VARCHAR(20) PRIMARY KEY,
qqid INT,
email VARCHAR(20) UNIQUE NOT NULL,
gender CHAR(2)
);
#4.删除表qqinfo
DROP TABLE IF EXISTS qqinfo;
#5.试写出sql查询语句的定义顺序和执行顺序
SELECT DISTINCT 查询列表
FROM 表名 别名
JOIN 连接表
ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选
ORDER BY 排序
LIMIT 条目数;
执行顺序:
1.from
2.join
3.on
4.where
5.group BY
6.having
7.select
8.order BY
9.limit
复制
=======================
先写这么多,仅供参考,欢迎指点。
如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!
关注公众号,回复“尚硅谷MySQL”关键字,获取课程配套软件、课件、资料
/如有纰漏 请联系我 十分感谢/
长按图片,点击关注
文章转载自三分稚气,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
2949次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
850次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
494次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
432次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
287次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
277次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
271次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
251次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
232次阅读
2025-04-28 11:01:25