MySQL基础——DDL语言学习\数据库的建立\MySQL数据类型\MySQL常见约束\表的增删改
DDL语言学习
- Data Definition Language 数据定义语言
- 主要用于数据库和数据表的管理和操作
1. 创建数据库
CREATE DATABASE 库名;
如果所创建的库已存在,再次执行会报错, 可以使用如下方式
CREATE DATABASE IF NOT EXISTS 库名;
数据库创建好之后,可以使用SHOW CREATE DATABASE语句查看数据库的定义
SHOW CREATE DATABASE studb

2. 删除数据库
DROP DATABASE 库名;
同理,如果重复删除会报错,可以使用如下方式
DROP DATABASE IF EXISTS 库名;
3. 创建表
CREATE TABLE [IF NOT EXISTS]表名 (
字段名 字段类型 [字段约束],
字段名 字段类型 [字段约束],
...
字段名 字段类型 [字段约束]
);
案例 1:创建stuinfo表,没有添加约束
CREATE TABLE stuinfo (
stuid INT,
stuname VARCHAR(20),
stugender CHAR,
email VARCHAR(20),
borndate DATETIME
);
# DESC stuinfo # 查看表的结构
所构建的数据库和表格信息如下


4. 数据类型
| 数据分类 | 类型名称 |
|---|---|
| 整数 | INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT |
| 浮点小数 | FLOAT、DOUBLE |
| 定点小数 | DECIMAL |
| 字符串 | CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET |
| 日期/时间 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
其中不同数值类型(整数、浮点数)提供不同的取值范围,存储值范围越大,所需空间也越大。具体范围和存储不逐一介绍,这里只说明常见的几种数据类型。
整型
- 可以是INT(M),M表示指定显示的数值种数字的个数
浮点型
- 浮点类型和定点类型都可以使用(M, N)来表示,可省略。M 称为精度,表示总共的位数;N 称为标度,表示小数的位数。如
DOUBLE(5,2)表示最多五位,其中必须有两位小数,最大为999.99。 - 对精度要求比较高的时候(如货币、科学数据等),使用
DECIMAL的类型比较好。
字符型
-
CHAR(M):固定长度字符串类型,在定义时指定字符串列长,默认为 1。不足时,右侧填充空格。M范围为0-255。 -
VARCHAR(M):是长度可变的字符串,M表示最大列长度,M范围为0-65535。

-
TEXT字符串类型,表示存储较长的文本,如文章内容、评论等。
日期/时间类型

二进制型

5. 常见约束
用于限制表中字段的数据,从而进一步保证数据表的准确可靠。具体约束类型如下表:
| 约束类型 | 关键字 | 作用 |
|---|---|---|
| 主键约束 | PRIMARY KEY | 唯一标识一条记录,不可重复、非空 |
| 外键约束 | FOREIGN KEY | 用于两表数据之间建立连接 |
| 非空约束 | NOT NULL | 字段的值不能为空 |
| 默认约束 | DEFAULT | 指定某列的默认值 |
| 唯一性约束 | UNIQUE | 要求该列值唯一(空值也唯一) |
5.1 主键约束
主键又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的记录,可以结合外键来定义不同数据表之间的关系。
- 主键分为两种:单字段主键和多字段联合主键
1、单字段主键
方式一:在定义列的同时指定主键
- 语法:
字段名 数据类型 PRIMARY KEY [默认值]
- 案例:
CREATE TABLE stuinfo (
stuid INT PRIMARY KEY, # 指定主键约束
stuname VARCHAR(20),
stugender CHAR,
email VARCHAR(20),
age INT
);
方式二:在定义完所有列之后指定主键
- 语法:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
- 案例:
CREATE TABLE stuinfo (
stuid INT,
stuname VARCHAR(20),
stugender CHAR,
email VARCHAR(20),
age INT,
PRIMARY KEY (stuid) # 指定主键约束
);
效果:

2、多字段联合主键
- 语法:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名1, 字段名2, ... ]
- 案例:
CREATE TABLE stuinfo (
stuid INT,
stuname VARCHAR(20),
stugender CHAR,
email VARCHAR(20),
age INT,
PRIMARY KEY (stuid, stuname)
);
效果:

5.2 外键约束
外键用于在两个表的数据之间建立连接,主要作用是保证数据引用的完整性,定义外键以后,不允许删除其在另一个表中具有关联关系的行,进而保证数据的完整性。
- 语法:
[CONSTRAINT <外键名>] FOREIGN KEY(外键字段) REFERENCES 主表 (主键字段)
两个概念
- 主表:对于两个具有关联关系的表而言,相关联字段中主键所在表为主表
- 从表:反之,外键所在表即为从表
案例
# 创建一个学生信息表
CREATE TABLE stuinfo (
stuid INT PRIMARY KEY,
stuname VARCHAR(20),
stugender CHAR,
email VARCHAR(20),
age INT
);
# 定义数据表 stumaj,让它的键 majorid 作为外键关联到 stuinfo 表的主键 stuid
CREATE TABLE stumaj (
majorid INT(5),
CONSTRAINT fk_stumaj_major FOREIGN KEY(majorid) REFERENCES stuinfo(stuid)
);

此案例为表 stumaj 添加了名称为 fk_stumaj_major 的外键约束。其中,外键为 majorid,其依赖于表 stuinfo 的主键 stuid。表 stuinfo 为主表,表 stumaj 为从表。
5.3 非空约束
非空约束指定字段的值不能为空。对于使用非空约束的字段,如果用户没有添加指定值,数据库系统会报错。
- 语法:
字段名 数据类型 NOT NULL
- 案例:
CREATE TABLE stuinfo (
stuid INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL,
);

5.4 唯一性约束
唯一性约束要求该列唯一,允许为空,但只能出现一个空值
- 语法:
字段名 数据类型 UNIQUE
- 案例:
CREATE TABLE stuinfo (
email VARCHAR(20) UNIQUE,
);

5.5 默认约束
默认约束指定某列的默认值。比如男性同学较多,性别就可以默认为“男”。
- 语法:
字段名 数据类型 DEFAULT 默认值
- 案例:
CREATE TABLE stuinfo (
stugender CHAR(1) DEFAULT '男',
);
6. 表的修改
新建book表,以下修改操作都针对此表

1、修改表名
- 语法:
ALTER TABLE 旧表名 RENAME [TO] 新表名
- 案例:将book表的表名修改为bookinfo
ALTER TABLE book RENAME bookinfo;

2、修改字段数据类型
- 语法:
ALTER TABLE 表名 MODIFY 字段名 数据类型
- 案例:
ALTER TABLE bookinfo MODIFY publishDate DATE
3、修改字段名
- 语法:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型
- 案例:
ALTER TABLE bookinfo CHANGE id new_id BIGINT

4、添加字段
- 语法:
ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件]
- 案例:
ALTER TABLE bookinfo ADD page INT(4) UNIQUE

5、删除字段
- 语法:
ALTER TABLE 表名 DROP 字段名
- 案例:
ALTER TABLE bookinfo DROP page

7. 表的删除
- 语法:
DROP TABLE 表名
- 案例:
DROP TABLE bookinfo;
SHOW TABLES;

8. 表的复制
1、仅复制表的结构,不复制数据
CREATE TABLE 新表名 LIKE;
2、复制表的结构和数据
CREATE TABLE 新表名
SELECT * FROM 被复制的表名
3、仅复制部分数据
- 添加
WHERE进行筛选即可
CREATE TABLE 新表名
SELECT * FROM 被复制的表名
WHERE 筛选条件
更多推荐

所有评论(0)