DDL(Data Definition Language):数据定义语言
库和表的管理(创建、修改、删除)
创建:create
修改:alter
删除:drop
一、库的管理
1.库的创建
语法
CREATE DATABASE 库名;
//加判断,增加容错性
CREATE DATABASE IF NOT EXISTS 库名;
2.库的修改
更改库的字符集
语法
ALTER DATABASE 库名;
CHARACTER SET 字符集名
3.库的删除
语法
DROP DATABASE 库名;
//加判断,增加容错性
DROP DATABASE IF EXISTS 库名;
二、表的管理
1.表的创建
语法
CREATE TABLE 【IF NOT EXISTS】 表名(
字段名 字段类型【(长度) 约束】,
字段名 字段类型【(长度) 约束】,
...
字段名 字段类型【(长度) 约束】
);
例:创建表book
CREATE TABLE book(
id INT, #编号
bName VARCHAR(20) , #书名
price DOUBLE, #价格
authorID INT, #作者编号
publishedDate DATETIME #出版日期
);
2.表的修改
ALTER TABLE 表名 add|drop|modify|change COLLUM 列名 【类型,约束】
(1)修改字段名
ALTER TABLE 表名
CHANGE 【COLLUM】 原字段名 新字段名 类型;
例:
ALTER TABLE book CHANGE COLLUM publishedDATE pubDate DATETIME;
(2)修改字段类型或约束
ALTER TABLE 表名 MODIFY COLLUM 字段名 新类型/约束;
(3)添加新的字段
ALTER TABLE 表名 ADD COLLUM 字段名 类型;
(4)删除字段
ALTER TABLE 表名 DROP COLLUM 字段名;
(5)修改表名
ALTER TABLE 表名 RENAME TO 新表名;
3.表的删除
DROP TABLE 表名;
//加判断,增加容错性
DROP TABLE IF EXISTS 表名;
4.表的复制
(1)仅复制表的结构
CREATE TABLE 复制表名 LIKE 原表名;
(2)复制表的结构+数据
CREATE TABLE 复制表名
SELECT 字段名
FROM 原表名 【筛选】;
(3)仅复制表的部分结构
CREATE TABLE 复制表名
SELECT 字段名
FROM 原表
WHERE 0;
三、常见约束
含义
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
- NOT NULL 非空:保证该字段的值不能为空
- DEFAULT 默认:用于保证该字段有默认值
- PRIMARY KEY 主键:用于保证该字段具有唯一性并且非空
- UNIQUE 唯一:用于保证该字段具有唯一性可以为空
- CHECK 检查(MySQL不支持)
- FOREIGN KEY 外键:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加,用于引用主中某列的值。
添加约束的时机:在添加数据之前
- 创建表时
- 修改表时
约束的添加分类
列级约束:六大约束都可以,但外键无效
表级约束:除非空、默认
主键和唯一对比
保证唯一性 | 是否允许为空 | 表中可以有多少个 | |
---|---|---|---|
主键 primary key | 是 | 否 | 至多一个 |
唯一 unique | 是 | 是 | 可以有多个 |
外键
- 在从表设置外键关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容
- 主表的关联列必须是一个key(一般为主键或唯一)
- 插入数据时,先插入主表,再插入从表;
删除数据时,先删除从表,在删除主表。
一、创建表时添加约束
1.添加列级约束
语法 直接在各个字段名和类型后面追加约束类型即可
只支持:默认、非空、主键、唯一
字段名 字段类型 约束类型
例:
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK (gender='男' OR gender='女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
2.添加表级约束
语法在各个字段的最下面添加
【constraint 约束名】约束类型(字段名)
例:
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_stu_info FOREIGN KEY(majorid) REFERENCES major(id)
);
二、修改表时添加约束
//列级约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 约束(非空、默认、主键、唯一)
//表级约束
ALTER TABLE 表名 ADD 约束(字段名) (主键、唯一)
//添加外键
ALTER TABLE 表名 ADD FOREIGN KEY(字段名) REFERENCES 从表名(字段)
三、修改表时删除约束
-
删除非空约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 NULL
-
删除默认约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型
-
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY
-
删除唯一
ALTER TABLE 表名 DROP INDEX 字段名
-
删除外键
ALTER TABLE 表名 DROP PRIMARY KEY 字段名
四、标识列(auto_increment)
又称为自增长列
含义
可以不用手动的插入值,系统提供默认的序列值
特点
- 需要与key(主键/唯一)搭配
- 只能最多有一个标识列
- 标识列从类型只能是数值型
1.创建表时设置标识列
语法
字段名 类型 约束 auto_increment;
2.修改表时设置标识列
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 约束 auto_increment;
3.修改表时删除标识列
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型;