mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

SQL 包含以下 4部分:1数据定义语言(DDL):DROP、CREATE、ALTER 等语句。2数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。3数据查询语言(DQL):SELECT 语句。4 数据控制语言(DCL): GRANT、REVOKE、COMMIT、ROLLBACK 等语句。

MySQL之DDL(Data Definition Language): 数据定义语言:CREATE,ALTER,DROP等

DDL:操作数据库,表(CRUD)

1、操作数据库(CRUD)

(1)C(Create):创建数据库

CREATE DATABASE [IF NOT EXISTS]数据库名[[DEFAULT] CHARACTER SET字符集名][[DEFAULT]COLLATE 校对规则名];[ ]中的内容是可选的。

语法说明如下:

数据库名:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。[DEFAULT] COLLATE:指定字符集的默认校对规则。

eg.

mysql> CREATE DATABASE IF NOT EXISTStest-> DEFAULT CHARACTER SETutf8-> DEFAULTCOLLATE utf8_general_ci;

Query OK,1 row affected, 1 warning (0.01 sec)

(2)R(Retrieve):查询

SHOW DATABASES [LIKE '数据库名'];

语法说明如下:LIKE 从句是可选项,用于匹配指定的数据库名称。LIKE从句可以部分匹配,也可以完全匹配。

数据库名由单引号' '包围。

eg.查询全部

mysql>show databases;+--------------------+

| Database |

+--------------------+

| information_schema | |

| mqcms |

| mysql |

| performance_schema |

| phpmyadmin |

| sys |

| test |

| test_aa |

| ultrax |

+--------------------+

9 rows in set (0.00 sec)

eg.查询某一个(我有test和test_aa两个库)

mysql> show databases like 'test';+-----------------+

| Database (test) |

+-----------------+

| test |

+-----------------+

1 row in set (0.00 sec)

mysql> show databases like '%test%';+-------------------+

| Database (%test%) |

+-------------------+

| dedetest |

| test |

| test_aa |

+-------------------+

3 rows in set (0.00 sec)

这里的like跟模糊查询一样%aa%;%aa;aa%;

eg.查询某个数据库的创建语言

mysql> show create databasetest;+----------+---------------------------------------------------------------+

| Database | Create Database |

+----------+---------------------------------------------------------------+

| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8*/ |

+----------+---------------------------------------------------------------+

1 row in set (0.00 sec)

(3)U(Update):修改

ALTER DATABASE [数据库名]{[DEFAULT] CHARACTER SET |

[DEFAULT] COLLATE }

语法说明如下:ALTER DATABASE用于更改数据库的全局特性。

使用ALTER DATABASE 需要获得数据库 ALTER权限。

数据库名称可以忽略,此时语句对应于默认数据库。CHARACTER SET 子句用于更改默认的数据库字符集。

eg.修改数据库test的字符集

mysql> ALTER DATABASEtest-> DEFAULT CHARACTER SETgb2312-> DEFAULTCOLLATE gb2312_chinese_ci;

Query OK,1 row affected (0.02sec)

mysql> show create databasetest;+----------+-----------------------------------------------------------------+

| Database | Create Database |

+----------+-----------------------------------------------------------------+

| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gb2312*/ |

+----------+-----------------------------------------------------------------+

1 row in set (0.00 sec)

(4)D(Delete):删除

DROP DATABASE [IF EXISTS] 语法说明如下::指定要删除的数据库名。IF EXISTS:用于防止当数据库不存在时发生错误。DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

使用 DROP DATABASE 命令时要非常谨慎,在执行该命令后,MySQL 不会给出任何提示确认信息。DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。因此最好在删除数据库之前先将数据库进行备份。

eg.删除数据库test_aa;

mysql> DROP DATABASE IF EXISTStest_aa;

Query OK,0 rows affected (0.02sec)

mysql> show databases like 'test%';+------------------+

| Database (test%) |

+------------------+

| test |

+------------------+

1 row in set (0.00 sec)

2、操作数据表(CRUD)

(1)C(Create)创建表

CREATE TABLE ([表定义选项])[表选项][分区选项];

其中,[表定义选项]的格式为: [,…]

CREATE TABLE语句的主要语法及使用说明如下:CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl'不合法。:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

eg.创建一张测试表test_tbl;

字段名称

字段类型

字段备注

id

int(11)

ID

name

varchar(20)

名称

age

int(11)

年龄

sex

tinyint(4)

性别0 男 1女 2 未知

mysql> usetest;Databasechanged

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

+----------------+

2 rows in set (0.01sec)

mysql> CREATE TABLEtest_tbl->(-> id INT(11),-> name VARCHAR(20),-> age INT(11),-> sex TINYINT(4)->);

Query OK,0 rows affected (0.03 sec)

复制表结构:

CREATE TABLE like ;

eg.

mysql> CREATE TABLE test_tbl_cp liketest_tbl;

Query OK,0 rows affected (0.01 sec)

(2)R(Retrieve)查看表

查看所有表:

SHOW TABLES;

eg.

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tbl |

| test_tbl_cp |

+----------------+

4 rows in set (0.00 sec)

查看表结构:

DESCRIBE ;

或简写成:DESC ;

DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等

eg.

mysql> DESCtest_tbl;+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.00sec)

其中,各个字段的含义如下:Null:表示该列是否可以存储 NULL值。Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE索引的一部分,MUL 表示在列中某个给定值允许出现多次。Default:表示该列是否有默认值,如果有,值是多少。

Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。

SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句:

SHOW CREATE TABLE \G;

提示:使用 SHOWCREATE TABLE 语句不仅可以查看创建表时的详细语句,而且可以查看存储引擎和字符编码。如果不加“\G”参数,显示的结果可能非常混乱,加上“\G”参数之后,可使显示的结果更加直观,易于查看。

eg.

mysql> show create tabletest_tbl\G;*************************** 1. row ***************************

Table: test_tblCreate Table: CREATE TABLE`test_tbl` (

`id`int(11) DEFAULT NULL,

`name`varchar(20) DEFAULT NULL,

`age`int(11) DEFAULT NULL,

`sex`tinyint(4) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gb23121 row in set (0.00 sec)

(3)U(Update)修改

ALTER TABLE [修改选项]修改选项的语法格式如下:

{ADD COLUMN

| CHANGE COLUMN

| ALTER COLUMN { SET DEFAULT | DROP DEFAULT}| MODIFY COLUMN

| DROP COLUMN

| RENAME TO

}

添加字段:

ALTER TABLE ADD [约束条件] [FIRST|AFTER 已存在的字段名];

新字段名为需要添加的字段的名称;FIRST 为可选参数,其作用是将新添加的字段设置为表的第一个字段;AFTER 为可选参数,其作用是将新添加的字段添加到指定的已存在的字段名的后面。

eg.在表test_tbl的name后面添加新字段name_cp:

mysql> ALTER TABLE test_tbl ADD name_cp VARCHAR(20) AFTER name;

Query OK,0 rows affected (0.03sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| name_cp | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改字段名称:

ALTER TABLE CHANGE ;

其中,旧字段名指修改前的字段名;新字段名指修改后的字段名;新数据类型指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。

eg.修改name的名称改为names

mysql> ALTER TABLEtest_tbl-> CHANGE name names VARCHAR(20);

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改/删除字段默认值:

ALTER TABLE ALTER COLUMN { SET DEFAULT | DROP DEFAULT }

eg.将字段sex的默认值改为2

mysql> ALTER TABLE test_tbl ALTER sex SET DEFAULT 2;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | 2 | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改字段类型:

ALTER TABLE MODIFY 其中,表名指要修改数据类型的字段所在表的名称,字段名指需要修改的字段,数据类型指修改后字段的新数据类型。

eg.修改name_cp的数据类型varchar(50)

mysql> ALTER TABLEtest_tbl-> MODIFY name_cp varchar(50);

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

删除字段:

ALTER TABLE DROP ;

其中,字段名指需要从表中删除的字段的名称。

eg.删除sex字段

mysql> ALTER TABLEtest_tbl-> DROPsex;

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

修改表名:

ALTER TABLE RENAME [TO] ;

其中,TO 为可选参数,使用与否均不影响结果。

eg.修改表名test_tbl改为test_tb;

mysql> ALTER TABLEtest_tbl-> RENAME TOtest_tb;

Query OK,0 rows affected (0.02sec)

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tb |

| test_tbl_cp |

+----------------+

4 rows in set (0.00 sec)

(4)D(Delete)删除表

DROP TABLE [IF EXISTS] 表名1 [,表名2, 表名3 ...]对语法格式的说明如下:

表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

两点注意:

用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。

表被删除时,用户在该表上的权限不会自动删除。

eg.删除表test_tbl_cp

mysql> DROP TABLEtest_tbl_cp;

Query OK,0 rows affected (0.01sec)

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tb |

+----------------+

3 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Page directive: illegal to have multiple occurrences of contentType with different values

org.apache.jasper.JasperException: /commons/meta.jsp(1,1) PWC5988: Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html; charsetutf-8, new: text/html;charsetUTF-8) 问题:contentType 有多个值 解…

我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

97%的记录错误是由10个唯一错误引起的 在2016年,一件事已经30年没有改变了。 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除。 由于某些未知原因,我们隐式地信任日志文件,因为我们认为事实隐藏在其中。 如果您足够努力…

洛谷 P1939 【模板】矩阵加速(数列)

题目描述 a[1]a[2]a[3]1 a[x]a[x-3]a[x-1] (x>3) 求a数列的第n项对1000000007(10^97)取余的值。 输入输出格式 输入格式: 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 输出格式: 每行输出…

Java中Map的使用

Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。 Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值…

java获取10位随机数_Java基础:JAVA中BitSet使用详解

适用场景:整数,无重复;Bitset 基础Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c库中bitset的一张图。基本原理是,用1位来表示一个数据是…

使用shiro框架,注销问题的解决

在使用shiro框架的时候,有时候会因为登录问题找不到注销的controller。所以会报404的错误,下面是解决办法: 1.首先写一个类SystemLogoutFilter继承LogoutFilter类,具体代码如下,注意要贴Service标签: impor…

介绍“又一个” Cloud Foundry Gradle插件

在与两个同事(感谢Mark Alston , Dave Malone !)一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中,我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 介绍带有…

卓金武——从数学建模到MATLAB

卓金武——从数学建模到MATLAB 2013-9-4 09:48| 发布者: ilovematlab| 查看: 9647| 评论: 40 摘要: 人物简介——卓金武(Steven),MathWorks公司中国区应用工程师。在科学计算、定量优化、数学建模和数据挖掘领域拥有8年经验。曾3次获全国大学…

[Java开发]打印当前路径到控制台

开发时候,遇到了系统找不到配置文件的情况,定位到文件路径的问题之后,选择将当前路径打印到控制台。 File directory new File("");//设定为当前文件夹 try{ System.out.println(directory.getCanonicalPath());//获取标准的路径 …

latex中report目录_LaTeX目录格式控制

章节结构控制章节层次一个文档的最高层章节可以是part,也可以没有part直接是chapter/section。除了part以外,只有在上一层章节存在时,才可以使用下一层章节。章节层次示意图如下,方框代表文档类型,圆圈代表章节层次。对…

诸葛亮给子书

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。   夫学须静也,才须学也;非学无以广才,非志无以成学。   怠慢则不能励精,险躁则不能冶性。   年与时驰&…

conda 安装mysql_centos7安装mysql

一、安装YUM Repo1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。官方网址:https://dev.mysql.com/downloads/repo/yum/下载命令:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2、…

智能批处理

我们都有多少次听说“分批处理”会增加延迟? 作为对低延迟系统充满热情的人,这让我感到惊讶。 以我的经验,正确完成批处理不仅可以提高吞吐量,还可以减少平均延迟并保持一致。 那么,批处理如何神奇地减少延迟呢&#x…

cogs 76. [NOIP2007] 统计数字

【问题描述】 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 【输入格式】 输入文件pcount.in包…

javaweb之Filter详解

一、概念:Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些…

pause容器作用_Kubernetes学习之pause容器

根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了,它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wait()收割这个子进程,这样就不用担心我们的Pod的PID namespace里会堆满僵尸进程了,这也是为什么…

Spring Integration –轮询文件的创建和修改

1引言 文件支持是Spring Integration与外部系统通信的另一个端点。 在这种情况下,它提供了几个组件来读取,写入和转换文件。 在这篇文章中,我们将编写一个监视目录的应用程序,以便读取其中的所有文件。 具体而言,它执行…

为什么需要消息队列MQ

主要原因:是在高并发情况下,由于来不及同步处理,请求往往会发生堵塞,比如诸多的insert、update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积很多,从而触发大量的too man…

数据库连接池的使用

关于数据库连接池的使用,首先我们要明白我们为什么要用它,对应普通的数据库连接操作,通常会涉及到以下一些操作是比较耗时的: 网络通讯,涉及到网络延时及协议通讯身份验证,涉及安全性检查连接合法性检查&a…

mysql基础知识整理_MYSQL基础知识整理

目录1、客户端命令2、服务器端命令3、常用数据类型3.1、数值型3.2、字符型3.3、日期时间型3.4、布尔型4、mysql的执行方式5、用户管理1、客户端命令客户端命令不需要以分号结尾 ,如果想获取客户端命令的帮助信息则:mysql> helpmysql常用客户端命令如下…