SQL基础-----DDL
1 (My)SQL入门
这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者。
2:SQL分类
SQL语句主要可以划分为以下3个类别
.DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括create、drop、alter等。
.DML(Data Manipulation Languages)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括insert、delete、update和select等。
.DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,主要的语句关键字包括grant、revoke等。
3:DDL语句
DDL是数据定于语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改等操作的语言。它和DML语言的最大区别是DML只是对表内部数据操作,而不涉及表的定义,结构的修改,更不会涉及其他对象。DDL语句更多的由数据库管理员(DBA)使用,开发人员一般很少使用。
下面通过一些例子来介绍MySQL常用DDL语句的使用方法。
1:创建数据库
启动MySQL服务之后,输入以下命令连接到MySQL服务器:
mysql -uroot -p
会出现下面的界面:

在以上命令行中,mysql代表客户端命令,“-u”后面跟连接的数据库用户,“-p”表示需要输入的密码。
如果数据库设置正常,并输入了正确的密码,将看到上面一段欢迎界面和一个“mysql>”提示符。在欢迎界面中说明了一下几部分的内容。
.命令的结束符,用“;”或者“\g”结束。
.客户端的连接ID,这个数字记录了MySQL服务到目前为止的连接次数;每个新连接都会自动加1.
.MySQL服务器的版本,本例中是5.5.25。
.通过“help”或者“\h”命令来显示帮助内容,通过“\c”命令来清除命令行buffer.
因为所有的数据库都存储在数据库中,因此需要学习的第一个命令是创建数据库。
创建数据库的语法如下:
CREATE DATABASE dbname;
例如,创建数据库test1,命令执行如下:

可以发现,执行完创建命令之后,下面有一行提示“Query OK,1 row affected (0.00 sec)”,这段提示可以分为3个部分,“Query OK”表述上面的命令执行成功。读者可能奇怪,又不是执行查询操作,为什么显示查询成功》其实这是MySQL的一个特点,所有的DDL和DML(不包括SELECT)操作执行成功后都显示“Query OK”,这里理解为执行成功就可以了,“1 row affected (0.00 sec)”表示操作只影响了数据库中一行的记录,“0.00 sec”则记录了操作执行的时间。
如果这个存在这个数据库,系统会提示:

可以使用SHOW语句查看在服务器上当前存在什么数据库

可以发现,在上面的列表中除了刚刚创建的test1外,还有另外4个数据库,它们都是安装mysql时系统自动创建的,其各自功能如下:
.information_schema:主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息,权限信息,字符集信息、分区信息等。
.cluster:存储了系统的集群信息。
.mysql:存储了系统的用户权限信息。
.test:系统自动创建的测试数据库,任何用户都可以使用
在查看了系统中已有的数据库后,可以用如下命令选择要操作的数据库:
USE dbname;
例如,选择数据库test1;

然后再用一下命令来查看test1数据库中创建的所有数据表:

由于test1是刚创建的数据库,还没有表,所以显示为空。命令行下面的"Empty set"表示操作的结果集为空,如果查看一下mysql数据库里面的表,则可以得到以下信息:

2:删除数据库
删除数据库的语法很简单,如下所示:
drop database dbname;
例如,要删除test1数据库可以使用一下语句:

可以发现,提示操作成功后, 后面却显示了 0 rows affected (0.08 sec),这个提示可以不用管它,在MySQL里面,drop语句操作的结果都是显示“0 rows affected”;
注意:数据库删除后,下面的所有表数据都会全部删除,所以删除前一定要仔细检查并做好相应备份.
3:创建表
在数据库中创建一张表的基本语法如下:
CREATE TABLE tablename(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
....
column_name_n column_type_n constraints
)
因为MySQL的表名是一目录的形式存在于磁盘上的,所以表名的字符可以用任何目录名允许的字符.column_name是列的名字;column_name 是列的名字;column_type 是列的数据类型;constraints是这个列的约束条件,在后面会讲到。
例如,创建一个名称为employee的表,表中包括ename(名字)、edate(雇佣日期)和 sal(薪水)3个字段,字段类型分别为
varchar(10)、date、int(2).

表创建完毕后,如果需要查看一下表的定义,可以使用如下命令
DESC tablename
例如查看employee表,将输出以下信息:

虽然desc命令可以查看表定义,但是其输出的信息还是不够全面,为了得到更全面的表定义信息,有时就需要查看创建标的SQL语句,可以使用如下命令查看:

从上面创建表的SQL语句中,除了可以看到表定义以外,还可以看到标的engine(存储引擎)和charset(字符集)等信息。“\
G”选项的含义是使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录。
4:删除表
表的删除命令如下:
DROP TABLE tablename
例如,要删除数据库employee可以使用以下命令

5:修改表
对于已经创建好的表,尤其是已经有大量数据的表,如果需要做一些结构上的改变,可以先将表删除(drop),然后再按照新的表定义重建表,这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载,而且,如果有服务在访问表,也会对服务产生影响。
因此在大多数情况下,表结构的更改都使用alter table语句,以下是一些常用的命令。
(1):修改表类型,语法如下:
ALTER TABLE tablename MODIFY[COLUMN] column_definition[FIRST\AFTER col_name]
例如,修改表employee的ename字段定义,将varchar(10)改完varchar(20);

(2)增加表字段,语法如下
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST\AFTER col_name]
例如,在表employee中新增加字段age,类型为int(3):

(3)删除表字段,语法如下:
ALTER TABLE tablename DROP [COLUMN] col_name;
例如,将字段age删除掉:

(4)字段改名,语法如下:
ALTER TABLE tablename CHANGE [COLUMN] Old_col_name column_definition [FIRST\AFTER col_name]
例如,将age改名为age1,同时修改字段类型为int(4);

注意:change和modify都可以修改表的定义,不同的是change后面需要些两次列名,不方面,但是change的优点是可以修改列名称,modify则不能。
(5)修改字段排列顺序。
前面介绍的字段增加和修改语法(ADD/CHANGE/MODIFY)中,都有一个可选项first|after column_name,这个选项可以用来修改字段在表中的位置,ADD 增加的新字段默认是加在表的最后位置,而CHANGE/MODIFY默认都不会改变字段的位置。
例如,将新增的字段birthday date加在ename之后:

修改字段age1,将它放在最前面:

注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于MySQL在标准SQL上的扩展,在其他数据库上不一定适用。
(6)更改表明,语法如下:
ALTER TABLE tablename RENAME [TO] new_tablename;
例如,将表employee改名为myemp,命令如下:

下一篇文章再介绍DML(数据库操纵语句)
SQL基础-----DDL的更多相关文章
- 【转】ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21
原文地址:https://www.toutiao.com/i6502733303550837261/ SQL语言分为:DDL数据定义语言,DML数据操纵语言,DCL是数据库控制语言,TC事务控制语言 ...
- MySQL学习之SQL基础(一)DDL
Sql基础 DDL (data defination language) 创建表 CREATE TABLE emp( ename varchar(10), hiredate date, sal dec ...
- SQL基础----DCL
在之前的文章已经讲到SQL基础DDL(数据库定义语句 http://www.cnblogs.com/cxq0017/p/6433938.html)和 DML(数据库操作语句 http://www.cn ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
- 第一章 SQL基础
第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...
- SQL基础--> 约束(CONSTRAINT)
--============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...
- [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...
随机推荐
- django “如何”系列4:如何编写自定义模板标签和过滤器
django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...
- 使用localStorage保存搜索记录
//过滤一个结果的空记录添加,过滤空搜索 默认保存10条记录,自己可修改 function setHistoryItems(keyword) { keyword = keyword.replace(& ...
- Matlab绘图基础——绘制三维曲线
%% 绘制三维曲线 %plot3函数,其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同. %1.当x,y,z是同维向量时,则x,y,z 对应元素构成一条三维曲线. x0 = 0 ...
- JAVA多线程实现和应用总结
1.JAVA多线程实现方式JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中 ...
- 《HelloGitHub》第 24 期(两周年)
公告 今天是<HelloGitHub>月刊 两周年.当时发布第一期的时候,根本没有想到可以走到现在. 这两年,HelloGitHub 项目有过辉煌的时刻:连续 3 天 GitHub 趋势首 ...
- python全栈学习--day4
列表 说明:列表是python中的基础数据类型之一,它是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: 1 li = ['alex',123,Ture,(1,2,3,'wu ...
- 福州大学软件1715|W班-助教卞倩虹个人简介
各位好,我是卞倩虹 本科阶段的专业是网络工程,通过学校的学习我掌握了基础的网络组网配置技术,常常在机房配置路由器和交换机等相关设备.后来我接触了软件编程,在深入了解和学习后编程语言后,自主开发了一些项 ...
- 201621123050 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 继承.抽象.多态 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选:使用常规方法 ...
- Alpha冲刺Day7
Alpha冲刺Day7 一:站立式会议 今日安排: 由林静和周静平共同完成企业风险分级展示这一模块的分级列表展示,该模块主要提供企业自查风险的条件查询功能 由黄腾飞和张梨贤共同完成企业风险分级展示的分 ...
- xcode修改代码目录结构出现clang:error:nosuchfileordirectory解决方法
需要迁移一个开源工程的一部分内容到自己工程,迁移对方的工程到自己工程之后,因目录结构配置整理需要,对嵌入的工程目录进行了结构改变,编译后出现: clang: error: no such file o ...