7.MySQL数据定义语句

1.注释

# 单行注释
-- 双破折号单行注释后至少跟一个空格或控制符
/*
这是多行注释
这也是多行注释
第三行多行注释
*/

2.数据库(DATABASE)

数据库语法
创建新数据库CREATE DATABASE 数据库名;
更改数据库ALTER DATABASE 数据库名;
删除数据库中的所有表并删除数据库DROP DATABASE 数据库名;

3.表(TABLE)

语法
创建[临时]新表CREATE [TEMPORARY] TABLE 表名();
根据另一个表的定义创建一个新的空[临时]表
(包括在老表中定义的任何列属性和索引)
CREATE [TEMPORARY] TABLE 新表名 LIKE 老表名;
从另一个表查询数据复制到一个新[临时]表CREATE [TEMPORARY] TABLE 新表名 AS SELECT * FROM 老表名;
更改表ALTER TABLE 表名;
更改表名语法1:RENAME TABLE 老表名 TO 新表名;
语法2:ALTER TABLE 老表名 RENAME TO 新表名;
删除[临时]表DROP [TEMPORARY] TABLE 表名;
删除表(只删除表内的数据,但并不删除表本身)TRUNCATE TABLE 表名;

4.列(COLUMN)

语法
创建列(新[临时]表)CREATE [TEMPORARY] TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型
);
创建计算列
VIRTUAL:虚拟列(默认)。
STORED:存储列。
CREATE [TEMPORARY] TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型 GENERATED ALWAYS AS (表达式) [VIRTUAL | STORED]
);
添加列(已存在表)
FIRST:添加到第一列。
AFTER 指定列:添加到指定列之后。
ALTER TABLE 表名
ADD COLUMN 列名 数据类型 [FIRST | AFTER 指定列];
添加计算列(已存在表)
VIRTUAL:虚拟列(默认)。
STORED:存储列。
ALTER TABLE 表名
ADD COLUMN 列名 数据类型 GENERATED ALWAYS AS (表达式) [VIRTUAL | STORED];
更改列名(已存在表)ALTER TABLE 表名 RENAME COLUMN 老列名 TO 新列名;
更改列定义(已存在表)
FIRST:添加到第一列。
AFTER 指定列:添加到指定列之后。
ALTER TABLE 表名
MODIFY COLUMN 列名 新数据类型 [FIRST | AFTER 指定列];
更改列名和列定义(已存在表)ALTER TABLE 表名
CHANGE COLUMN 老列名 新列名 新数据类型;
删除列(已存在表)ALTER TABLE 表名
DROP COLUMN 列名;

5.索引(INDEX)

索引支持单列索引和多列组合索引。

索引语法
创建普通索引(新表)CREATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
INDEX (列名1, 列名2)
);
创建索引(新表)
FULLTEXT:全文索引。
SPATIAL:空间索引。
UNIQUE:唯一索引。
CREATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
{FULLTEXT | SPATIAL | UNIQUE} INDEX (列名1, 列名2)
);
添加普通索引(已存在表)语法1:CREATE INDEX 索引名 ON 表名 (列名);
语法2:ALTER 表名 ADD INDEX (列名1, 列名2) ;
添加索引(已存在表)
FULLTEXT:全文索引。
SPATIAL:空间索引。
UNIQUE:唯一索引。
语法1:CREATE {FULLTEXT | SPATIAL | UNIQUE} INDEX 索引名 ON 表名 (列名);
语法2:ALTER 表名 ADD {FULLTEXT | SPATIAL | UNIQUE} INDEX (列名1, 列名2);
更改索引名(已存在表)ALTER TABLE 表名 RENAME INDEX 老索引名 TO 新索引名;
删除索引语法1:DROP INDEX 索引名 ON 表名;
语法2:ALTER TABLE 表名 DROP INDEX 索引名;

6.约束(CONSTRAINT)

约束名的作用是当出现约束错误时,系统会以约束名报错,方便排查故障。

6.1NOT NULL

约束语法
创建NOT NULL约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型
);
添加NOT NULL约束(已存在表)ALTER TABLE 表名
MODIFY COLUMN 列名 NOT NULL;
删除NOT NULL约束(已存在表)ALTER TABLE 表名
MODIFY COLUMN 列名 NULL;

6.2DEFAULT

约束语法
创建DEFAULT约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型 DEFAULT 默认值
);
添加DEFAULT约束(已存在表)ALTER TABLE 表名
ALTER COLUMN 列名 SET DEFAULT 默认值;
删除DEFAULT约束ALTER TABLE 表名
ALTER COLUMN 列名 DROP DEFAULT;

6.3AUTO_INCREMENT

默认初始值为 1,每条新记录递增 1。

约束语法
创建AUTO_INCREMENT约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL AUTO_INCREMENT,
列名2 数据类型 NOT NULL,
列名3 数据类型
);
添加AUTO_INCREMENT约束(已存在表)ALTER TABLE 表名
MODIFY COLUMN 列名 AUTO_INCREMENT;

6.4PRIMARY KEY

键区别是否可以定义表中的多列是否可为NULL值是否唯一是否自动递增
PRIMARY KEY是(联合主键也必须唯一)
UNIQUE KEY是(但只能有一个记录为空)
FOREIGN KEY子表可以存在多列外键,但一个外键只能关联父表中的一个主键
约束语法
创建[带约束名的]PRIMARY KEY约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型,
[CONSTRAINT 约束名] PRIMARY KEY (列名1, 列名2)
);
添加[带约束名的]PRIMARY KEY约束(已存在表)ALTER TABLE 表名
ADD [CONSTRAINT 约束名] PRIMARY KEY (列名1);
删除PRIMARY KEY约束ALTER TABLE 表名
DROP PRIMARY KEY;

6.5UNIQUE

UNIQUE 是UNIQUE KEY的简写。

约束语法
创建[带约束名的]UNIQUE约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型,
[CONSTRAINT 约束名] UNIQUE (列名1, 列名2)
);
添加[带约束名的]UNIQUE约束(已存在表)ALTER TABLE 表名
ADD [CONSTRAINT 约束名] UNIQUE (列名1, 列名2);
删除UNIQUE约束ALTER TABLE 表名
DROP INDEX 约束名;

6.6FOREIGN KEY

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (col_name, ...)
    REFERENCES tbl_name (col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
约束语法
创建[带约束名的]FOREIGN KEY约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型,
[CONSTRAINT 约束名] FOREIGN KEY (列名3) REFERENCES 表名1(列名1)
);
添加[带约束名的]FOREIGN KEY约束(已存在表)ALTER TABLE 表名
ADD [CONSTRAINT 约束名] FOREIGN KEY (列名3) REFERENCES 表名1(列名1);
删除FOREIGN KEY约束(注意:删除外键约束并没有删除外键这一列)ALTER TABLE 表名
DROP FOREIGN KEY 约束名;
引用选项解释
RESTRICT拒绝对父表的删除或更新操作。
CASCADE从父表中删除或更新行,并自动删除或更新子表中匹配的行。
SET NULL删除或更新父表中的行,并将子表中的外键列设置为NULL
NO ACTION(默认)标准 SQL 中的关键字。在 MySQL 中,相当于RESTRICT
SET DEFAULT这个动作被 MySQL 解析器识别。

6.7CHECK

约束语法
创建[带约束名的]CHECK约束(新表)CREATE TABLE 表名
(
列名1 数据类型 NOT NULL,
列名2 数据类型 NOT NULL,
列名3 数据类型,
[CONSTRAINT 约束名] CHECK (列名1>0 AND 列名2 = ‘Sandnes’)
);
添加[带约束名的]CHECK约束(已存在表)ALTER TABLE 表名
ADD [CONSTRAINT 约束名] CHECK (列名1>0 AND 列名2 = ‘Sandnes’);
删除CHECK约束ALTER TABLE 表名
DROP CHECK 约束名;

7.表空间(TABLESPACE)

表空间语法
创建表空间CREATE [UNDO] TABLESPACE 表空间名;
更改表空间ALTER [UNDO] TABLESPACE 表空间名;
删除表空间DROP [UNDO] TABLESPACE 表空间名;

8.事件(EVENT)

事件语法
创建事件CREATE EVENT 事件名 ON SCHEDULE 计划安排 DO 事件主体;
更改事件ALTER EVENT 事件名 [ON SCHEDULE 计划安排] [RENAME TO 新事件名];
删除事件DROP EVENT 事件名;
计划安排: {
    AT timestamp [+ INTERVAL 间隔]
  | EVERY interval
    [STARTS timestamp [+ INTERVAL 间隔]]
    [ENDS timestamp [+ INTERVAL 间隔]]
}
间隔:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
//示例
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;

9.存储过程(STORED PROCEDURE)

括号内的参数列表必须始终存在。如果没有参数,则应使用()空参数列表。参数名称不区分大小写。

默认情况下,每个参数都是一个IN参数。要为参数指定其它内容,请在参数名称前使用关键字OUTINOUT

IN参数将值传递给过程,该过程可能会修改该值,但当该过程返回时,调用者看不到该修改。

OUT参数将过程中的值传递回调用者,在过程中它的初始值为NULL,当过程返回时,它的值对调用者可见。

INOUT参数由调用者初始化,可由过程修改,过程返回时调用者可以看到过程所做的任何更改。

存储过程主体可以是一个简单的语句,例如 SELECTINSERT语句,也可以是使用BEGINEND编写的复合语句。复合语句可以包含声明、循环和其他控制结构语句。

存储过程语法
创建存储过程CREATE PROCEDURE 存储过程名([ IN | OUT | INOUT ] 参数名称 参数类型) 存储过程主体;
更改存储过程ALTER PROCEDURE 存储过程名 [特征] ;
删除存储过程DROP PROCEDURE 存储过程名;
mysql> CREATE PROCEDURE citycount (IN country CHAR(3), OUT cities INT)
       BEGIN
         SELECT COUNT(*) INTO cities FROM world.city
         WHERE CountryCode = country;
       END//

10.函数(FUNCTION)

括号内的参数列表必须始终存在。如果没有参数,则应使用()空参数列表。参数名称不区分大小写。

对于函数,参数始终被视为IN参数。

如果给定关键字AGGREGATE,则表示该函数是聚合(组)函数 。聚合函数的工作方式与原生 MySQL 聚合函数完全一样,例如SUM()or COUNT()

共享类库名 是包含实现该函数的代码的共享库文件的基本名称。

函数主体可以是一个简单的语句,例如 SELECTINSERT语句,也可以是使用BEGINEND编写的复合语句。复合语句可以包含声明、循环和其他控制结构语句。在实践中,存储函数倾向于使用复合语句,除非主体由单个RETURN语句组成。

函数语法
创建存储函数CREATE FUNCTION 函数名(参数名称 参数类型) RETURNS 返回类型 函数主体;
创建可加载函数CREATE [AGGREGATE] FUNCTION 函数名 RETURNS {STRING|INTEGER|REAL|DECIMAL} SONAME 共享类库名;
更改存储函数ALTER PROCEDURE 存储函数名 [特征];
删除存储函数或可加载函数DROP FUNCTION 函数名;

11.触发器(TRIGGER)

触发器语法
创建触发器CREATE TRIGGER 触发器名 { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON 表名 FOR EACH ROW [{ FOLLOWS | PRECEDES } 其它触发器名] 触发器主体;
删除触发器DROP TRIGGER [架构名.]触发器名;

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/basic/mysql/17173.html

(0)
上一篇 2022年9月6日 23:40
下一篇 2022年9月8日 00:10

相关推荐

  • 10.MySQL复合语句

    1.BEGIN … END复合语句 BEGIN … END 语法用于编写复合语句,这些语句可以出现在存储程序(存储过程和函数、触发器和事件)中。一个复合语句可以包含多个语句,由BEGIN和END关键字括起来。 statement_list表示一个或多个语句的列表,每个语句都以分号 ( ;) 语句分隔符结…

    MySQL教程 2022年9月10日
    0160
  • 1.安装MySQL和phpMyAdmin的步骤(Ubuntu)

    1.配置MySQL源 首先到https://dev.mysql.com/downloads/repo/apt/,下载对应的 MySQL APT 存储库并安装。 2.安装MySQL 在安装过程中,要求您为数据库根用户root用户提供密码以进行MySQL安装。 在Ubuntu下安装MySQL后,会自动注册为服务,并随操作系…

    MySQL教程 2022年9月1日
    09490
  • 2.安装MySQL和phpMyAdmin的步骤(Fedora)

    1.配置MySQL源 首先到https://dev.mysql.com/downloads/repo/yum/,下载对应的 MySQL Yum 存储库并安装。 验证安装 2.安装MySQL 在Fedora下安装MySQL后,会自动注册为服务,并随操作系统第一次重新启动后自动启动。 在Fedora下安装MySQL后,会自…

    MySQL教程 2022年9月2日
    06200

发表回复

登录后才能评论