DDL语言
概述
Data Define Language: 数据定义语言,用于对数据库和表的管理及操作。
库的管理
一、创建数据库
CREATE DATABASE stuDB;
CREATE DATABASE IF NOT EXISTS stuDB;# 用java时用此格式,提高代码容错性
二、删除数据库
DROP DATABASE stuDB;
DROP DATABASE IF EXISTS stuDB; #提高代码容错性
表的管理
一、创建表
1.数据类型
-
整形
TINYINT SMALLINT INT BIGINT
-
浮点型
FLOAT(m,n)
DOUBLE(m,n)
DECIMAL(m,n)
m和n可选
-
字符型
CHAR(n) n可选
VARCHAR(n) n必填
TEXT
n表示最多字符个数
-
日期型
DATE TIME DATETIME TIMESTAMP
-
二进制型
BLOB 存储图片型数据
2.常见约束
概念
约束:用于限制表中字段的数据,从而进一步保证数据表的数据是一致的、准确的、可靠的。
约束类型
-
NOT NULL 非空:用于限制该字段为必填项。
-
DEFAULT 默认:用于限制若该字段没有显式插入值,则直接显式默认值。
-
PRIMARY KEY 主键:用于限制该字段的值不能重复。设置为主键列的字段默认不能为空。
一个表只能有一个主键,可以是组合主键。
-
UNIQUE 唯一:用于限制该字段值不能重复。
字段是否可以为空 一个表可以有几个 主键 不可以 1个 唯一 可以 n个 -
CHECK 检查:用于限制该字段值必须满足指定条件。
CHECK(age BETWEEN 0 AND 100) (MYSQL不支持)
-
FOREIGN KEY 外键:用于限制两个表的关系。要求外键列的值必须来自于主表的关联列。
要求
- 主表的关联列必须和从表的关联列的类型一致,意思一样,名称无要求。
- 主表的关联列必须是主键。
3.约束分类
分为 :表级约束和列级约束
-
支持列级约束:NOT NULL,DEFAULT,UNIQUE ,PRIMARY KEY,CHECK
-
支持表级约束: UNIQUE,PRIMARY KEY, FOREIGN KEY
表级约束可以单独放在外键前面,外键约束放在最后。
没有添加约束的案例
CREATE TABLE IF NOT EXISTS stuinfo(
stuid INT,
stuname VARCHAR(20),
gender CHAR,
email VARCHAR(20),
borndate DATETIME
);
添加约束
CREATE TABLE IF NOT EXISTS major(
id INT
);
CREATE TABLE IF NOT EXISTS stuinfo(
stuid INT PRIMARY KEY ,# 添加主键约束
tuname VARCHAR(20) NOT NULL UNIQUE ,# 非空约束 唯一约束
gender CHAR DEFAULT '男',# 默认约束
email VARCHAR(20) UNIQUE ,# 唯一约束
age INT CHECK ( age BETWEEN 0 AND 100),# 添加检查约束 (没有效果,MYSQL不支持check)
borndate DATETIME,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id) #添加外键约束
);
也可以如下格式:表级约束可以单独放在外键前面,外键约束放在最后。
CREATE TABLE IF NOT EXISTS stuinfo(
stuid INT ,
tuname VARCHAR(20) NOT NULL UNIQUE ,# 非空约束 唯一约束
gender CHAR DEFAULT '男',# 默认约束
email VARCHAR(20) ,
age INT CHECK ( age BETWEEN 0 AND 100),# 添加检查约束 (没有效果,MYSQL不支持check)
borndate DATETIME,
majorid INT,
PRIMARY KEY(stuid), # 添加主键约束
CONSTRAINT uq UNIQUE(email), # 唯一约束
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id) #引用从表中的id字段
);
二、修改表[了解]
语法
ALTER TABLE 表名 ADD|MODIFY|CHANGE|DROP COLUMN 字段名 字段类型 【字段约束】;
修改表名
ALTER TABLE stuinfo RENAME TO students;
ALTER TABLE students ADD COLUMN address VARCHAR(20) NOT NULL ;#增加字段
ALTER TABLE students CHANGE COLUMN address familyadd VARCHAR(20);#修改字段名
ALTER TABLE students MODIFY COLUMN familyadd INT;#修改字段类型
#删除字段
ALTER TABLE students DROP COLUMN familyadd;
三、删除表
#删除表
DROP TABLE IF EXISTS students;
四、复制表
1 只复制表的结构 like
CREATE TABLE newtable LIKE students;
2 复制表的结构+数据
CREATE TABLE newtable2 SELECT * FROM girls.beauty;
**案例:**复制employees表中的last_name,email,salary字段到新表emp中,但不复制数据
CREATE TABLE empSELECT email,salary,last_nameFROM myemployees.employeesWHERE 0=1; #添加一个永不成立的筛选条件
小结
写出SQL语句的定义顺序和执行顺序。
定义顺序(书写顺序)
- select distinct 查询列表
- from 表名 别名
- join 表名 别名
- on 连接条件
- where 分组前筛选
- group by 分组列表
- having 分组后筛选
- order by 排序列表
- limit 条目数
执行顺序
- from子句
- join子句
- on子句
- where子句
- group by子句
- having子句
- select子句
- order by子句
- limit子句