SQL数据定义语言-DDL

SQL 基本语法

SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言,主要分为以下几类:

  • DDL(数据定义语言):定义数据库对象(如数据库、表、字段)。
  • DML(数据操作语言):操作表中的数据(增、删、改)。
  • DQL(数据查询语言):查询表中的记录。
  • DCL(数据控制语言):管理用户权限和数据库安全。

DDL(Data Definition Language)

数据定义语言,用来定义数据库对象(数据库、表、字段)。

基本操作

连接数据库

1
mysql [-h数据库服务器IP地址 -P端口号] -u用户名 -p密码

查询所有数据库

1
show databases;

查询当前数据库

如果没有使用数据库,返回 null

1
select database();

使用/切换数据库

1
use 数据库名;

创建数据库

1
create database [if not exists] 数据库名 [default charset utf8mb4];

删除数据库

1
drop database [if exists] 数据库名;

注意:上述语法中的 database 也可以替换成 schema。例如:create schema db01;
从 MySQL 8 版本开始,默认字符集为 utf8mb4

创建表的语法:

1
2
3
4
5
6
create table tablename
(
字段1 字段类型 [约束] [comment 字段1注释],
字段2 字段类型 [约束] [comment 字段2注释]
......
)[comment 表注释];

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table if not exists tb_emp
(
id int unsigned primary key auto_increment comment "Id 主键",
username varchar(20) not null unique comment "用户名",
password varchar(40) not null comment "密码",
name varchar(10) not null comment "姓名",
gender tinyint unsigned not null comment "性别 , 1:男 , 2:女",
phone char(11) not null unique comment "手机号",
job tinyint unsigned comment "职位, 1.班主任 , 2.讲师, 3.学工主管 ,4.教研主管 ,5.咨询师",
salary int unsigned comment "薪资",
image varchar(100) comment "头像",
entry_date date comment "入职日期",
create_time datetime default now() comment "创建时间",
update_time datetime comment "更新时间"
) comment "员工表";
字段类型

字段类型

数组类型

类型大小(byte)有符号(SIGNED)范围无符号(UNSIGNED)范围描述
tinyint1(-128,127)(0,255)小整数值
smallint2(-32768,32767)(0,65535)大整数值
mediumint3(-8388608,8388607)(0,16777215)大整数值
int4(-2147483648,2147483647)(0,4294967295)大整数值
bigint8(-2^63,2^63-1)(0,2^64-1)极大整数值
float4(-3.402823466 E+38,3.402823466351 E+38)0 和 (1.175494351 E-38,3.402823466 E+38)单精度浮点数值
double8(-1.7976931348623157 E+308,1.7976931348623157 E+308)0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308)双精度浮点数值
decimal小数值(精度更高)

字符串类型

类型大小描述
char0-255 bytes定长字符串
varchar0-65535 bytes变长字符串
tinyblob0-255 bytes不超过 255 个字符的二进制数据
tinytext0-255 bytes短文本字符串
blob0-65 535 bytes二进制形式的长文本数据
text0-65 535 bytes长文本数据
mediumblob0-16 777 215 bytes二进制形式的中等长度文本数据
mediumtext0-16 777 215 bytes中等长度文本数据
longblob0-4 294 967 295 bytes二进制形式的极大文本数据
longtext0-4 294 967 295 bytes极大文本数据

日期类型

类型大小(byte)范围格式描述
date31000-01-01 至 9999-12-31YYYY-MM-DD日期值
time3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间
year11901 至 2155YYYY年份值
datetime81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

常用数据类型

  • 数值类型

    • tinyint [byte]
    • int [int]
    • bigint [long]
  • 字符串类型

    • 定长字符串
      • CHAR(n):固定长度,适合短且长度固定的字符串(如性别、状态码)
    • 变长字符串
      • VARCHAR(n):可变长度,节省存储空间(如用户名、地址)
    • 文本类型
      • TINYTEXT:最大 255 字符
  • 日期类型

    • DATE:仅存储日期,格式 YYYY-MM-DD
    • DATETIME:日期+时间,格式 YYYY-MM-DD HH:MM:SS

约束

约束 描述 关键字
非空约束 限制该字段值不能为 null not null
唯一约束 确保字段的所有数据唯一、不重复 unique
主键约束 主键是唯一标识一行数据,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default 默认值
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key
自增约束 自动递增,仅适用于整数类型字段 auto_increment

查询当前数据库的所有表

1
show tables;

查询表结构

1
desc 表名;

查询建表语句

1
show create table 表名;

添加字段

1
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];

修改字段类型

1
alter table 表名 modify 字段名 新数据类型(长度);

修改字段名与字段类型

1
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

删除字段

1
alter table 表名 drop column 字段名;

修改表名

1
alter table 表名 rename to 新表名;

删除表

1
drop table [if exists] 表名;