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

相关推荐

  • 4.MySQL数据类型一览表

    1.Integer(整数精确值) INT 的同义词为 INTEGER 。 类型 存储(字节) 范围 TINYINT[UNSIGNED] 1 有符号 -128(-27) ~ 127(27-1),无符号 0 ~ 255(28-1)。 SMALLINT[UNSIGNED] 2 有符号 -32,768(-215) ~ 32,7…

    MySQL教程 2022年9月4日
    05770
  • 6.MySQL数据库管理语句

    反单引号(`)用于将 数据库名、表名、列名引起来,一般可省略,但当数据库名称包含特殊字符(比如句点.时),必须加上反单引号。 ;或\g 使输出水平显示,\G 使输出垂直显示。 1.MySQL Server 2.MySQL Command-Line Client MySQL Command-Line Client 语法 …

    MySQL教程 2022年9月6日
    03580
  • 11.MySQL正则表达式

    MySQL 使用 Unicode 国际组件 (ICU) 实现正则表达式支持,它提供完整的 Unicode 支持并且是多字节安全的。 下面的列表涵盖了一些可以在正则表达式中使用的基本特殊字符和结构,有关用于实现正则表达式支持的 ICU 库支持的完整正则表达式语法的信息,请访问 International Com…

    MySQL教程 2022年9月13日
    02400

发表回复

登录后才能评论