3.2.DDL
数据定义语言 DDL : Data Definition Language
用于创建新的数据库、模式(schema)、表(tables)、视图(views)以及索引(indexes)等。
常见的DDL语句包括SHOW
、CREATE
、DROP
、ALTER
等。
3.2.0.常用关键字
3.2.0.1.操作
-
**SHOW 展示 ** :
-
CREATE 创建 :
-
DROP 移除 :
DROP
语句用于删除已存在的数据库对象。
-
ALTER 调整:
ALTER
语句用于修改现有的数据库对象。它可以用来添加、删除或修改表中的列,改变表的名字,更改存储引擎等。
3.2.0.2.对象
-
Database(数据库):
-
Table(表):
- 表是数据库中的主要存储单元,用于存储特定类型的数据集。表由行(记录)和列组成,每一行表示一个实体,每一列表示实体的一个属性。
-
Column(列 , 字段):
- 列是表中的一个字段,用于存储某种类型的数据。每个列都有一个名称和一个数据类型。
-
Key(键):
- 键是一个或一组列,用于唯一标识表中的记录。主要有以下几种类型的键:
- Primary Key(主键):用于唯一标识表中的每一行记录。一个表只能有一个主键,并且不能包含空值。
- Foreign Key(外键):用于建立两个表之间的链接,表示这两个表之间的关系。外键必须参照另一个表的主键或唯一键。
- Unique Key(唯一键):用于保证列中的值是唯一的,但是允许有空值的存在。
- Index(索引):虽然索引本身不是键,但它可以帮助加速对表中数据的访问速度。
- 键是一个或一组列,用于唯一标识表中的记录。主要有以下几种类型的键:
3.2.1.库结构操作
3.2.1.1.创建数据库
语法 : create database 库名
说明 : 库名 可以是英文, 数字, 中文, 下横杠_
, 中横杠-
, 但 建议使用 英文 , 多个单词用 下横杠连接
库名不能重复
create database a0;
3.2.1.2.先判断存在再创建
如果 a0 库已经存在 会报错
[Err] 1007 - Can't create database 'a0'; database exists
语法 : create database IF NOT EXISTS 库名
如果不存在相同名字的数据库就创建, 否则只提示完成,但并不重新创建
说明 : IF NOT EXISTS
如果不存在
create database IF NOT EXISTS a0 ;
3.2.1.3.查询数据库
语法 : show databases
注意 database 加 s
show databases;
执行后会以表格形式列出数据库名
3.2.1.4.根据名字数据库
语法 : show databases like 条件
条件可以使用通配符 %
进行匹配
show databases like 'a%';
3.2.1.5.指定使用数据库
语法 : use 库名
通过库名选择当前要使用的数据库
use a0;
3.2.1.6.修改数据库
数据库名是不能被修改的
通常只是用来修改数据库的字符编码
语法 : ALTER DATABASE 库名 内容
ALTER DATABASE a0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.2.1.7.删除数据库
语法 : drop database 库名
drop database a0;
数据库 a0 及其所有内容将被删除
注意 :
在执行DROP DATABASE
操作之前,确保已经备份了重要的数据,并且确认删除是必要的。
如果只是想临时卸载数据库,可以考虑使用其他方法,如导出数据或将数据库设置为不可用状态,而不是直接删除。
3.2.2.表结构操作
3.2.2.1.建立表
在建立表的同时,
要指定表中的字段信息, 当然对字段的信息后期还可以修改
多个 字段信息之间使用 ,
间隔
语法 :
create table 表名
(
字段名1 varchar(20),
字段名2 int
)
添加 学生表
create table student
(stu_id int ,stu_name varchar(50) ,stu_birth date
);
3.2.2.2.查询表结构
语法 : desc 表名
desc student;
3.2.2.3.修改字段为主键
语法 : alter table 表名 add primary key (字段名)
alter table student add primary key (stu_id);
3.2.2.4.修改主键为自增
语法 : alter table 表名 modify 主键名 int auto_increment
alter table student modify stu_id int auto_increment;
3.2.2.5.创建时指定主键
也可以在创建时 直接指定主键
create table emp
(emp_id int primary key ,emp_name varchar(50),emp_age int
);
指定主键时也可以指定 自增长
create table person
( per_id int primary key auto_increment ,per_name varchar(50)
);
也可以单独指定
create table team
(team_id int not null auto_increment ,team_title varchar(50) ,stu_count int ,primary key (team_id)
);
3.2.2.6.字段约束
在创建表时,字段的约束是非常重要的组成部分,它们有助于确保数据的完整性和一致性。以下是常见的字段约束及其含义:
-
NOT NULL
-
定义:该约束确保字段不能存储空值(NULL)。
-
示例:
CREATE TABLE users (id INT NOT NULL,name VARCHAR(50) NOT NULL );
-
-
UNIQUE
-
定义:该约束确保字段中的值在整个表中是唯一的。可以应用于多个字段,形成组合唯一键。
-
示例:
CREATE TABLE users (email VARCHAR(100) UNIQUE );
-
-
PRIMARY KEY
-
定义:作为唯一标识符的字段,表中每一行的数据都可以通过主键唯一确定。主键字段不能包含空值,并且必须是唯一的。
-
示例:
CREATE TABLE users (id INT PRIMARY KEY );
-
-
FOREIGN KEY
-
定义:外键约束用于确保表之间的关系。它引用另一个表的主键。
-
示例:
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id) );
-
-
CHECK
-
定义:该约束用于限制字段中的值,以满足某些条件。
-
示例:
CREATE TABLE users (age INT CHECK (age >= 18 AND age <= 120) );
-
-
DEFAULT
-
定义:如果没有给字段赋值,默认值将被自动插入。
-
示例:
CREATE TABLE users (registration_date DATE DEFAULT CURRENT_DATE );
-
-
AUTO_INCREMENT
-
定义:此属性用于自动生成一个唯一的整数值,通常用于主键字段。
-
示例:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY );
-
3.2.2.7.查询表
show tables;
3.2.2.8.修改表 增加字段
语法 : alter table 表名 add 字段 字段类型
给 学生 增加 体重 字段
alter table student add weight int;
3.2.2.9.修改表 修改字段类型
语法 : alter table 表名 modify 字段名 改后类型
将 体重 字段类型修改成 浮点数
alter table student modify weight double;
3.2.2.10.修改表 修改字段名称
语法 : alter table 表名 rename column 原名 to 现名
alter table student rename column weight to stu_weight;
3.2.2.11.修改表 删除一个字段
语法 : alter table 表名 drop column 字段名
删除 体重 字段
alter table student drop column stu_weight;
3.2.2.12.修改表名
语法 : rename table 原名 to 新名
rename table person to people;
3.2.2.13.删除表
语法 : drop table 表名
drop table emp;
3.2.2.14.先判断存在再删除
如果不存在的表 删除会报错
[SQL]drop table emp;
[Err] 1051 - Unknown table 'a0.emp'
可以先判断 再删除
drop table if exists person;
3.2.2.15.添加表同时附带注释
在创建表时 可以使用 comment
关键字来 设置注释
drop table if exists teacher;create table teacher (tea_id int(11) not null auto_increment comment '教师主键',tea_name varchar(50) comment '教师姓名',primary key (tea_id)
) comment = 'teacher 教师表';
3.2.2.16.修改增加注释
通过 alter table
-- 修改字段的注释
alter table student
modify column stu_name varchar(50) comment '学生姓名';-- 修改表的注释
alter table student comment 'student 学生';
3.2.2.17. 学生表增加外键
-- 增加外键字段 team_id
alter table student add team_id int;-- 将 team_id 与 team关联, 外键 起名FK_Reference_1
alter table student add constraint FK_Reference_1 foreign key (team_id)references team (team_id) on delete restrict on update restrict;