MySQL-第二篇SQL语句基础(1)语句分类及DDL语句
1、什么是SQL语句
SQL是Structed Query Language的缩写,即结构化查询语言。SQL是操作和检索数据库的标准语言,标准的SQL语句可以操作任何关系数据库。
2、标准的SQL语句有有以下几种分类(M->D->C,数据->库对象->用户)
1》查询语句:查询语句是SQL语句中最复杂、功能最丰富的的语句,关键字有select。
2》DML(Data Manipulation Language,数据操作语言)语句:关键字有insert、update、delete。
3》DDL(Data Definition Language,数据定义语言)语句:关键字有create、alter、drop、truncate。
4》DCL(Data Control Language,数据控制语言)语句:关键字有grant、revoke。
5》事务控语句:关键字有commit、rollback、savepoint。
SQL语句的关键字不区分大小写,即select和SELECT,或者selEct都是等效的,只要是那个关键字。
还有一点:truncate是一个特殊的DDL关键字,它相当于先删除指定的数据表,然后再重建该数据表该数据表。如果使用MySQL的普通存储机制,它确实是这样的。但如果使用InnoDB存储机制,则比较复杂,MySQL5.0.3之前,truncate和delete完全一样;5.0.3之后,truncate table比delete效率高,但如果该表被外键约束参照,则依然被映射成delete操作。当使用快速truncate时,该操作会重设自动增长计数器。在5.0.13之后,快速truncate总是可用(即比delete性能要好)。
3、DDL语句
1》DDL语句是数据库对象操作语句,包括create、alter、drop、truncate数据库对象。常见的数据库对象有:
| 对象名称 | 对应关键字段 | 描述 |
| 表 | table | 存储数据的逻辑单元,以行和列的形式存在 |
| 数据字典 |
即系统表,存放数据库相关信息的表,系统表里的数据通常由数据库系统维护,程序员通常不应该 手动修改系统表及系统表数据,只可查看系统表数据 |
|
| 约束 | constraint | 执行数据校验的规则,用于保证数据完整性的规则 |
| 视图 | view | 一个或者多个数据表里数据的逻辑显示。视图并不存储数据 |
| 索引 | index | 用于提高查询性能,相当于书的目录 |
| 函数 | function | 用于完成一次特定的计算,具有一个返回值 |
| 存储过程 | procedure | 用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调用环境 |
| 触发器 | trigger | 相当于一个事件监听器,当数据库发生特定事件后,触发器触发,完成相应的处理 |
针对这些对象,DDL关键字可以直接把这些对象紧接着它们书写,如create table ...、create index ...等
2》创建数据库的语法
create database mybatis;
3》增加表的语法
1>create table语句只创建空表
create table [模式名.]表名
(
--列定义
columnName1 datatype [default expr],
...
)
列字段类型如下:

2>create table使用子查询语句
create table [模式名.]表名 [column[,column...]]
as subquery;
4》修改表结构的语法
修改表结构使用alter table,修改表结构包括增加列定义、修改列定义、删除列、重命名列等操作。
1>增加列。如果只增加一列,圆括号可以省略。已有数据的表新增加列,则新增列不能为没有默认值且非空属性,否则添加失败。
alter table 表名 add (多个列定义);
2>删除列。删除列总是可以成功的,删除列将从每行数据删除指定列,以及回收该列的空间,故删除大表的列的时候,比较花费时间。
alter table 表名 drop column_name;
3>修改列定义。first|after col_name 指定需要将目标修改到指定位置。alter table 后可以跟多个modify,实现多字段的修改。
alter table 表名 modify column_name datatype [default expr] [first|after col_name];
修改列的默认值,只会影响以后数据的添加操作,不会影响已存在的数据。
4>MySQL特提供的:重命名表和完全修改列定义
重命名表:
alter table 表名 rename to 新表名;
修改列定义:change关键字
alter table 表名 change old_column new_column type [default expr] [first|after col_name];
5》删除表的语法
drop table 表名;
drop删除表的效果:
1>表结构被删除,表对象不再存在。
2>表中数据被删除。
3>该表所有相关的索引、约束被删除。
truncate 表名;
truncate(截断)删除的效果:
1>删除表中的所有数据,但保留表结构。
2>效率比delete高得多,但不能删除指定行记录。
3>如果使用非InnoDB存储机制,truncate比delete速度快;如果使用InnoDB存储机制,MySQL5.0.3之前,truncate和delete完全一样,5.0.3之后,truncate比delete效率高,但如果该表被外键约束所参照,truncate又变为delete操作。5.0.13后,快速truncate总是可用,即比delete性能好。
MySQL-第二篇SQL语句基础(1)语句分类及DDL语句的更多相关文章
- (6)MySQL进阶篇SQL优化(MyISAM表锁)
1.MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源 (如 CPU.RAM.I/O 等)的抢占以外,数据也是一种供许多用户共享的资源.如何保证数 据并 ...
- (4)MySQL进阶篇SQL优化(常用SQL的优化)
1.概述 前面我们介绍了MySQL中怎么样通过索引来优化查询.日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如 INSERT.GROUP BY等.对于这些SQL语句,我们该怎么样进行 ...
- 第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- 第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
- 【译】第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- 【译】第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
- (2)MySQL进阶篇SQL优化(show status、explain分析)
1.概述 在应用系统开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产环境的影响也 ...
- (3)MySQL进阶篇SQL优化(索引)
1.索引问题 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数 的SQL性能问题.本章节将对MySQL中的索引的分类.存储.使用方法做详细的介绍. 2.索引的存储分类 ...
- Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...
随机推荐
- python学习笔记(7)容器以及容器的访问使用
一.容器 1.list列表 序列是python中最基本的数据结构,序列中的每个元素都分配一个数字,它的位置或索引,第一个索引是0,第二个索引是1,以此类推 Built-in mutable seque ...
- webpack之给目录起别名
1. 配置文件目录: build>webpack.base.config.js: resolve: { alias: { '@': resolve('src'), //照猫画虎 'styles' ...
- vue.js(11)--案例--关键字搜索列表
关键字搜索品牌案例 (1)页面布局 <div class="app"> <div class="panel panel-primary"> ...
- 线程池ThreadPoolExecutor实现原理
线程属于稀缺资源,对于线程的创建规则,引用<阿里巴巴 Java 手册>中的一条进行说明. 本篇从源码方面介绍ThreadPoolExecutor对象,并简要解析线程池工作原理. 首先Thr ...
- 占卜DIY
题目地址 Code #include<iostream> #include<vector> #include<map> using namespace std; s ...
- 股票交易 (单调队列优化DP)
股票交易 $ solution: $ 这道题以前就写了,题目很好,但自己没有发题解,来补一篇: 首先,题目出得很有迷惑性,但我们不难想到状态要设天数,和自己手上的股票数目(因为这两个就是充要信息).而 ...
- 多组件共享-vuex
1.解决多个组件共享同一状态数据问题1)多个视图共享同一状态2)来自不同视图的触发事件需要变更同一状态文档API:https://vuex.vuejs.org/zh/api/ 2.组件与store连接 ...
- Docker Toolbox 学习教程【转载】
最近在研究虚拟化,容器和大数据,所以从Docker入手,下面介绍一下在Windows下怎么玩转Docker.Docker本身在Windows下有两个软件,一个就是Docker,另一个是Docker T ...
- Bugku 杂项 签到题
签到题 加微信公众号会发现
- 【HDOJ6616】Divide the Stones(构造)
题意:给定n堆石子,第i堆的个数为i,要求构造出一种方案将其分成k堆,使得这k堆每堆数量之和相等且堆数相等 保证k是n的一个约数 n<=1e5 思路:先把非法的情况判掉 n/k为偶数的方法及其简 ...