MySQL DDL语句

DDL 数据定义语言

Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)

1、操作数据库

1、创建数据库

-- 语法
CREATE DATABASE 数据库名;
# 或
CREATE SCHEMA 数据库名;
-- ---------------------
-- 实例
CREATE DATABASE mydb;
CREATE SCHEMA mydb;

2、使用数据库

-- 语法
USE 数据库名;

-- 实例
USE mydb;

3、查看数据库

-- 语法
SHOW DATABASES;

4、删除数据库

-- 语法
DROP DATABASE 数据库名;
# 或
DROP SCHEMA 数据库名;
-- -------------------
-- 实例
DROP DATABASE mydb;
DROP SCHEMA mydb;

5、查看建库语句

-- 语法
SHOW CREATE DATABASE 数据库名;
-- 实例
SHOW CREATE DATABASE mydb;

2、操作表

1、创建表

-- 语法
CREATE TABLE 表名(
     字段名 列类型 [属性] [索引] [注释],
     字段名 列类型 [属性] [索引] [注释],
     .....
     字段名 列类型 [属性] [索引] [注释]
)[表的类型][字符集设置][注释]
-- ---------------------------------------
-- 实例
CREATE TABLE student(
    id   char(10) PRIMARY KEY COMMENT '学号',
    name varchar(50) NOT NULL COMMENT '姓名',
    age  smallint UNSIGNED COMMENT '年龄',
    sex  char(1) COMMENT '性别'
) COMMENT '学生表';

2、查看表

-- 语法
SHOW TABLES;

3、修改表名

-- 语法
ALTER TABLE 旧表名 RENAME TO 新表名;
# 或
ALTER TABLE 旧表名 RENAME AS 新表名;
-- --------------------------------
-- 实例
ALTER TABLE t1 RENAME TO t2;
ALTER TABLE t1 RENAME AS t2;

4、删除表

-- 语法
DROP TABLE 数据库名;
-- ----------------
-- 实例
DROP TABLE student;

5、查看建表语句

-- 语法
SHOW CREATE TABLE 表名;
-- 实例
SHOW CREATE TABLE student;

6、修改表结构

完整性约束如果涉及表的多个字段,则必须定义在表级上,否则表级和列级都可以

6.1、字段设置

1、添加字段

-- 格式
ALTER TABLE 表名 ADD 字段名 类型(长度) 约束;

-- 示例 
ALTER TABLE student ADD Sname varchar(20) NOT NULL;

将字段添加到某个字段后面

-- 格式
ALTER TABLE 表名 ADD 字段名 类型(长度) 约束 AFTER 某个字段;

-- 示例
ALTER TABLE student ADD Sage smallint unsigned AFTER Sname;

将字段添加为第一个字段

-- 格式
ALTER TABLE 表名 ADD 字段名 类型(长度) 约束 FIRST;

-- 示例
ALTER TABLE student ADD Sno char(10) PRIMARY KEY FIRST;

2、修改字段

(1)修改字段的类型长度及约束

-- 格式
ALTER TABLE 表名 MODIFY 字段名 类型(长度) 约束;

-- 示例
ALTER TABLE student MODIFY Sname varchar(50) NULL;

(2)修改字段名和字段的类型长度及约束

-- 格式
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) 约束;

-- 示例
ALTER TABLE student CHANGE Sname stuName varchar(50) UNIQUE;

(3)修改字段的排列位置

-- 格式
ALTER TABLE 表名 MODIFY 字段1 数据类型(长度) 约束 FIRST / (AFTER 字段2);
-- FIRST表示将 字段1 调整到第一列
-- AFTER 表示将 字段1 移动到 字段2 之后

-- 示例
-- FIRST 表示将 Sno 调整到第一列
ALTER TABLE student MODIFY Sno char(10) PRIMARY KEY FIRST;
-- AFTER 表示将 Ssex 移动到 Sage 之后
ALTER TABLE student MODIFY Ssex char(1) AFTER Sage;

区别:modify只能修改字段的类型长度及约束,而change可以修改字段名和字段的类型长度及约束

3、删除字段

-- 格式
ALTER TABLE 表名 DROP 字段名;

-- 示例
ALTER TABLE student DROP Sage;
6.2、约束

完整性约束

(1)添加完整性约束

-- 格式
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束条件;

注:完整性约束条件 包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK短语等。

2、删除完整性约束

要修改完整性约束可以先删除原来的约束条件,再增加新的约束条件

-- 格式
ALTER TABLE 表名 DROP CONSTRAINT 约束名;

-- 示例
ALTER TABLE student DROP CONSTRAINT c1;

6.2.1、主码(Primary Key)

一个表只能有一个PRIMARY KEY约束(即一个主键),且PRIMARY KEY约束中的列默认具有UNIQUENOT NULL 约束,即主码唯一且非空。

(1)查看主码

-- 格式
DESC 表名;
DESCRIBE 表名;
#   或
SHOW CREATE 表名;

-- 示例
DESC student;
DESCRIBE student;

SHOW CREATE student;

(2)添加主码

a、建表时添加主码

-- 情况一:单个字段作为主码
CREATE TABLE student (
    Sno char(10) PRIMARY KEY COMMENT '学号' 
)COMMENT '学生表';

-- 情况二:多个字段组合作为主码
CREATE TABLE sc (
    Sno char(10) PRIMARY KEY COMMENT '学号',
    Cno varchar(10) COMMENT '课程号',
    grade smallint unsigned COMMENT '成绩',
    PRIMARY KEY (Sno,Cno)
)COMMENT '选课表';

情况一属于列级完整性约束,情况二属于表级完整性约束。涉及多个字段只能要用表级完整性约束。

b、建表后添加主码

方式一:表级添加

-- 格式
ALTER TABLE 表名 ADD PRIMARY KEY (字段名);
#    或
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY (字段名);

-- 示例
ALTER TABLE student ADD PRIMARY KEY (Sno);

ALTER TABLE student ADD CONSTRAINT Sno_pKey PRIMARY KEY (Sno);

方式二:列级添加

-- 格式
ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 PRIMARY KEY;

-- 示例
ALTER TABLE student MODIFY Sno char(10) PRIMARY KEY;

ALTER TABLE student CHANGE Sno Sno char(10) PRIMARY KEY;

(3)删除主码

主码不能修改,如果要修改主码只能先删除现有的主码,然后再添加新的主码。

-- 格式
ALTER TABLE 表名 DROP PRIMARY KEY;

-- 示例
ALTER TABLE student DROP PRIMARY KEY;

6.2.2、外码(Foreign Key)
  1. 外键是一种数据库表的约束,它用于确保数据的一致性。在关系数据库中,表中某字段的值来自于另外一张表的主键或唯一键的列,该字段被称为“外键”。该表称为参考表,另外一张表称为被参考表
  2. 外键是相对于参考表来说的。
  3. 一个表可以有多个外键。
  4. 外键列类型需要与引用列类型一致。
  5. 外键列的值必须是主表中引用列的值或者 NULL。

(1)查看外键

-- 格式
SHOW CREATE TABLE 表名;

-- 示例
SHOW CREATE TABLE sc;

(2)添加外键

a、建表时添加外键

-- 示例
CREATE TABLE sc (
    Sno char(10) COMMENT '学号',
    Cno varchar(10) COMMENT '课程号',
    grade smallint unsigned COMMENT '成绩',
    PRIMARY KEY (Sno,Cno),
    FOREIGN KEY (Sno) REFERENCES student (Sno),
    FOREIGN KEY (Cno) REFERENCES course (Cno)
)COMMENT '选课表';

b、建表后添加外键

-- 格式
ALTER TABLE 表名 ADD FOREIGN KEY (字段名) REFERENCES 被参照表 (主码);
#   或
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (字段名) REFERENCES 被参照表 (主码);

-- 示例
ALTER TABLE sc ADD FOREIGN KEY (Sno) REFERENCES student (Sno);

ALTER TABLE sc ADD CONSTRAINT Sno_fKey FOREIGN KEY (Sno) REFERENCES student (Sno);

(3)删除外键

外键不可直接修改,只能先删除后新增。

若不知道外键名可以先 “show create table 表名” 来查看外键名

-- 格式
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

-- 示例
ALTER TABLE sc DROP FOREIGN KEY sc_ibfk_1;

(4)参照完整性检查和违约处理

对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查。

对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值

参照完整性违约处理

  1. 拒绝(NO ACTION),不允许该操作执行。该策略一般设置为默认策略
  2. 级联(CASCADE),当删除或修改被参照表(student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组
  3. 设置为空值(SET NULL),当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

-- 示例
CREATE TABLE sc (
    Sno char(10) COMMENT '学号',
    Cno varchar(10) COMMENT '课程号',
    grade smallint unsigned COMMENT '成绩',
    PRIMARY KEY (Sno,Cno),
    FOREIGN KEY (Sno) REFERENCES student (Sno)
    ON UPDATE NO ACTION  --当更新student表中的元组造成了与sc表不一致时拒绝更新
    ON DELETE NO ACTION, --当删除student表中的元组造成了与sc表不一致时拒绝删除
    FOREIGN KEY (Cno) REFERENCES course (Cno)
    ON UPDATE CASCADE  --当删除或修改被参照表(student)的一个元组造成了与参照表(sc)不一致时,
    ON DELETE CASCADE  --则删除或修改参照表中的所有造成不一致的元组
)COMMENT '选课表';

6.2.3、添加唯一键(Unique或Unique Key)

(1)查看唯一键

-- 格式
DESC 表名;
DESCRIBE 表名;
#   或
SHOW CREATE 表名;

-- 示例
DESC student;
DESCRIBE student;

SHOW CREATE student;

 (2)添加唯一键

a、建表时添加唯一键

-- 示例一
CREATE TABLE course (
    Cno     varchar(10) UNIQUE COMMENT '课程号',
    Cname   varchar(50) COMMENT '课程名',
    Ccredit smallint UNSIGNED COMMENT '学分'
);

-- 示例二
CREATE TABLE course (
    Cno     varchar(10) COMMENT '课程号',
    Cname   varchar(50) COMMENT '课程名',
    Ccredit smallint UNSIGNED COMMENT '学分',
    UNIQUE (Cno)
);

b、建表后添加唯一键

方式一:表级添加

-- 格式
ALTER TABLE 表名 ADD UNIQUE (字段名);
#   或
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);

-- 示例
ALTER TABLE student ADD UNIQUE (Sname);

ALTER TABLE student ADD CONSTRAINT Sname_unique UNIQUE (Sname);

方式二:列级添加

-- 格式
ALTER TABLE 表名 MODIFY 列名 列类型 UNIQUE;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 UNIQUE;

-- 示例
ALTER TABLE student MODIFY Sname varchar(50) UNIQUE;

ALTER TABLE student CHANGE Sname Sname varchar(50) UNIQUE;

(3)删除唯一键

如果想更改唯一键的字段,需要先删除原来的唯一键,然后添加新的唯一键。

如果没有设置约束名称,名称默认是字段名

-- 格式
ALTER TABLE 表名 DROP INDEX index_name; 删除唯一键,其中 index_name 是要删除的唯一键的名称。

-- 示例
ALTER TABLE course DROP INDEX Cno;

6.2.4、非空约束(NOT NULL)

(1)查看非空约束

-- 格式
DESC 表名;
DESCRIBE 表名;
#   或
SHOW CREATE 表名;

-- 示例
DESC student;
DESCRIBE student;

SHOW CREATE student;

(2)添加非空约束

a、建表时添加非空约束

-- 示例
CREATE TABLE student (
    Sname varchar(50) NOT NULL
);

b、建表后添加非空约束

方式一:列级添加

-- 格式
ALTER TABLE 表名 MODIFY 列名 列类型 NOT NULL;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 NOT NULL;

-- 示例
ALTER TABLE student MODIFY Sname varchar(50) NOT NULL;
ALTER TABLE student CHANGE Sname Sname varchar(50) NOT NULL;

方式二:表级添加 

-- 格式
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK ( 列名 IS NOT NULL );

-- 示例
ALTER TABLE student ADD CONSTRAINT c1 CHECK ( Sname IS NOT NULL );

(3)删除非空约束

-- 格式
ALTER TABLE 表名 MODIFY 列名 列类型 NULL;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 NULL;

-- 示例
ALTER TABLE student MODIFY Sname varchar(50) NULL;
ALTER TABLE student CHANGE Sname Sname varchar(50) NULL;

6.2.5、默认值约束(Default)

(1)查看默认值

-- 格式
DESC 表名;
DESCRIBE 表名;
#   或
SHOW CREATE 表名;

-- 示例
DESC student;
DESCRIBE student;

SHOW CREATE student;

(2)添加默认值

a、建表时添加默认值

-- 示例
CREATE TABLE student (
    Sname varchar(50) DEFAULT '佚名'
);

b、建表后添加默认值

-- 格式
ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;
#   或
ALTER TABLE 表名 MODIFY 列名 列类型 DEFAULT 默认值;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 DEFAULT 默认值;

-- 示例
ALTER TABLE student ALTER Sname SET DEFAULT '佚名';
ALTER TABLE student MODIFY Sname varchar(50) DEFAULT '佚名';
ALTER TABLE student CHANGE Sname Sname varchar(50) DEFAULT '佚名';

(3)修改默认值

-- 格式
ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;
#   或
ALTER TABLE 表名 MODIFY 列名 列类型 DEFAULT 默认值;
#   或
ALTER TABLE 表名 CHANGE 列名 列名 列类型 DEFAULT 默认值;

-- 示例
ALTER TABLE student ALTER Sname SET DEFAULT '佚名2';
ALTER TABLE student MODIFY Sname varchar(50) DEFAULT '佚名2';
ALTER TABLE student CHANGE Sname Sname varchar(50) DEFAULT '佚名2';

(4)删除默认值

-- 格式
ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT;

--示例
ALTER TABLE student1 ALTER COLUMN Sname DROP DEFAULT;

6.2.6、检查约束(Check)

(1)查看检查约束

-- 格式
DESC 表名;
DESCRIBE 表名;
#   或
SHOW CREATE 表名;

-- 示例
DESC student;
DESCRIBE student;

SHOW CREATE student;

(2)添加检查约束

a、建表时添加非空约束

-- 示例
CREATE TABLE student (
    Sno char(10),
    Ssex char(1) CHECK ( Ssex IN ('男','女') )
);

b、建表后添加非空约束

方式一:列级添加

-- 格式
ALTER TABLE 表名 MODIFY 字段名 数据类型 CHECK( 检查条件 );
ALTER TABLE 表名 CHANGE 字段名 字段名 数据类型 CHECK( 检查条件 );

--示例
ALTER TABLE student MODIFY Sage smallint unsigned CHECK( Sage > 0 );
ALTER TABLE student CHANGE Sage Sage smallint unsigned CHECK( Sage > 0 );

方式二:表级添加

-- 格式
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK ( 约束条件 );

-- 示例
#年龄大于0
ALTER TABLE student ADD CONSTRAINT c1 CHECK ( Sage > 0 );
#性别只能为男或女
ALTER TABLE student ADD CONSTRAINT c2 CHECK ( Ssex IN ('男','女') );
#成绩在0~100之间
ALTER TABLE sc ADD CONSTRAINT c3 CHECK ( grade BETWEEN 0 AND 100);

(3)删除检查约束

修改检查约束,要先删除原来的约束条件,再增加新的约束条件

若不知道约束名可以先 “show create table 表名” 来查看约束名

-- 格式
ALTER TABLE 表名 DROP CONSTRAINT 约束名;

-- 示例
ALTER TABLE test1 DROP CONSTRAINT test1_chk_1;

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,可以使用ALTER TABLE语句向表中添加字段。以下是几个示例: 1. 使用ALTER TABLE语句向表中添加字段: ALTER TABLE table_name ADD COLUMN column_name data_type; 例如,要向名为table_name的表中添加一个名为column_name的字段,数据类型为VARCHAR(100),可以使用以下语句: ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100); 2. 在指定位置添加字段: ALTER TABLE table_name ADD COLUMN column_name data_type AFTER existing_column; 例如,要在名为table_name的表中的existing_column字段后添加一个名为column_name的字段,可以使用以下语句: ALTER TABLE table_name ADD COLUMN column_name data_type AFTER existing_column; 3. 添加字段并设置默认值和注释: ALTER TABLE table_name ADD COLUMN column_name data_type DEFAULT default_value COMMENT 'comment'; 例如,要向名为table_name的表中添加一个名为column_name的字段,数据类型为VARCHAR(100),默认值为NULL,并添加注释,可以使用以下语句: ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100) DEFAULT NULL COMMENT 'comment'; 请根据您的具体需求选择适合的语句进行操作。 #### 引用[.reference_title] - *1* [MySQL增加字段SQL语句](https://blog.csdn.net/weixin_46573158/article/details/117807459)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MySQL添加字段、修改字段、创建表的SQL语句](https://blog.csdn.net/qq_48718409/article/details/121905660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL - SQL语句增加字段/修改字段/修改类型/修改默认值](https://blog.csdn.net/william_n/article/details/89493775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值