MySQL数据库SQL语法基础:DDL入门教程
MySQL数据库SQL语法基础:DDL入门教程
本文将介绍MySQL数据库的SQL语法基础,重点讲解数据定义语言(DDL)的使用方法。内容包括SQL语句的基本语法、MySQL数据类型、数据库和数据表的创建与删除、以及表结构的修改等。适合MySQL数据库的初学者阅读。
SQL(Structured Query language)是一种标准的结构化查询语言,用于管理和操作数据库。他与多种数据库管理系统(DataBase Management System)有着很大的关系:
SQL作为一种标准化语言,包括MySQL、Oracle、Microsoft SQL Server、PostgreSQL等在内的数据库管理系统都支持SQL语法,唯一的不同是各自版本都引入了不同的功能与额外拓展的命令。但只要学好了一个,另一个就很好入门了,毕竟SQl语句是通用的。
SQL语句初识
SQL通用语法
1、sql语句支持单行 或 多行书写,以分号结尾。
2、sql语句支持空格 或 缩进增强可读性。
3、MySQL数据库的sql语句不区分大小写,一般会使用大写(学习时为了方便使用小写)
4、sql语句支持注释:
单行注释:--注释内容( # MySQL独有注释 )
多行注释:/注释内容/
SQL语句分类
DDL:Data Definition Language - 数据定义语言,用来定义数据库对象(库、表、字段)
DML:Data Manipulation Language - 数据操作语言,用来对表的数据进行增删改
DQL:Data Query Language - 数据查询语言,用来查询数据表的记录
DCL:Data Control Language - 数据控制语言,用来创建数据库用户,访问数据库的访问权限等
MySQL数据类型
数值类型
整数类型:tinyint,smallint,mediumint,int,bigint。(1bytes - 8bytes)
浮点类型:float(4字节),double(8字节)
定点类型:decimal
字符串类型
字符类型:char-固定长度,varchar-可变长度
文本类型:tinytext,text,mediumtext,longtext。(256bytes - 4GB)
二进制类型:binary,varbinary,tinyblob,blob,mediumblob,longblob
注:二进制类型主要用于存储二进制数据文件,包括图片、音乐等
时间和日期类型
日期:date
时间:time
日期和时间:datetime
时间戳:timestamp
年份:year
集合与枚举类型
enum:一个字符串对象,其值来自于一个预定义的字符串列表,最多可以有65535种不同的值(单选框)
set:一个字符串对象,其值可以从预定义的字符串集合中选取多个值,最多可以有64个值。(多选框)
DDL之 定义数据库
查看所有数据库:
show databases;
注意:database后的s千万别忘了加,否则你将得到以下报错:
进入指定数据库:
use dbname;
注意:dbname是指你要进入的数据库的库名,成功将显示:(这里的分号不加也不会错,但这样的语句很少,为了统一,还是加上的好)
调用函数database() 可以查看当前处于哪个数据库,方便更换:
select database();
创建数据库:
create database dbname;
注意:database也是关键字,这里的意思是 创建数据库-dbname,唯一需要你更改的就是dbname了。成功将显示:Query OK, 1 row affected (0.01 sec)
常见失败:ERROR 1007 (HY000): Can't create database 'newdbtest'; database exists
意思是,不能创建名字叫这个的数据库,数据库存在了。但到后面数据库那么多的时候,我们不能总是去看所有数据库看有没有这个吧,我们又不想要报错,那么解决方法是:
create database if not exists dbname;
相对于上一条语句,多了一个判断条件,如果不存在(if not exists)。此时:如果数据库名已经被占用,那么也不会 报错,如果没有占用将成功创建。
查看数据库的创建语句:
show create database dbname;
发现与我们创建的不一样啊,不要慌张,建库语句没那么长,后面都是些默认值。既然出现了,那这里给出完整的创建过程:
--创建数据库 [如果不存在] 数据库名 [默认使用的字符集 unicode、utf-8等] [排序规则]
CREATE DATABASE [IF NOT EXISTS] dbname [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除数据库:
drop database dbname;
注意:drop的英文释义就是丢弃删除的意思。执行成功显示:Query OK, 0 rows affected (0.01 sec)
常见错误:ERROR 1008 (HY000): Can't drop database 'newdbtest'; database doesn't exist
我们发现这次报错与上次建表的报错差不多,只不过这次是数据库不存在。那么解决方案已经显而易见了:(如果数据库存在,就删除数据库dbname)
drop database if exists dbname;
在数据库的设计和结构中,库作为一个整体提供了数据的存储和管理框架,确保数据的完整性和一致性。然而,库的核心价值最终体现在其内部的表层面。表作为库的基本组成单位,承载着实际的数据并定义了数据的结构和关系。每个表不仅存储特定类型的信息,还通过列和行的方式组织数据,使得查询和操作变得高效。因此,理解表的设计和功能,对利用数据库的全面潜力至关重要。表不仅是数据的容器,更是实现数据模型和业务逻辑的关键元素。
DDL之 定义数据表
查看所有数据表:
查看当前数据库的所有数据表,并不是所有数据库的所有表。
show tables;
与查看所有数据库类似,这里tables也是关键字,千万不要忘了s。否则将得到以下报错信息:
其它错误:当没有进入数据库时,是没有办法查看表单的:
当我刚打开数据库管理系统时,直接就想查询,那么系统给出报错:没有数据库被选中。我们需要使用use选择一个使用的数据库。
查看数据表结构:
desc tbname;
注释:desc-是description的缩写,意为描述,也就是描述数据表的结构,我用已经建立过的表给大家演示一下:
这个并不能查看数据表里面的具体信息,相当于看了看表头信息
这里解释一些概念:
Field:字段 //也就是我们常说的表头
Type:数据类型 //上文介绍了有哪些数据类型
Null:是否可以为空 //Yes代表可以为空,No代表不能为空
Key:是否为主键 //Key的意思就是键,Pri就是主键,还有外键
Default:默认值 //在添加数据时,不指定该字段,该字段默认的初始值
Extra:额外的一些信息 //一些备注信息什么的
创建数据表:
create table [if not exists] tbname(
field1 type1,
field2 type2,
......
fieldi typei,
......
fieldn typen
);
每有一个字段,都要指定数据类型。而且需要注意,除了最后一个字段外,其它后面都要带上逗号作分割。
查看建表信息:类似于查看建库信息,显示创建数据表的sql语句。
show create table tbname;
查看建表信息:作为概括版,没有建表语句的显示,只展示一些基本信息
desc table tbname;
删除数据表:
#删除表
drop table [if exists] tbname;
#删除表 并重新创建该表(作用:清空表内数据)
truncate table 表名;
DDL之 修改表结构
下面的关键字可能有些没有高亮,所以我使用大写字母表示关键字,小写字母表示自己定义的内容
修改表名:
ALTER TABLE tbname
RENAME TO tbname_new;
将表tbname 重命名为tbname_new
删除字段:
ALTER TABLE tbname
DROP fieldi;
选择表tbname,删除字段i
添加字段:
按照顺序依次往后添加字段:
ALTER TABLE tbname
ADD field ftype;
在 字段fieldi 后面插入新字段:
ALTER TABLE tbname
ADD newfield ftype AFTER fieldi;
将字段插入第一列:
ALTER TABLE tbname
ADD newfield ftype FIRST;
修改字段:
修改字段类型/位置:
ALTER TABLE tbname
MODIFY fieldi newftype [newlocation];
如果只修改类型,就不用加位置,如果需要修改新位置,原来的数据类型也要带上。
修改字段名称/类型:
ALTER TABLE tbname
CHANGE oldfield newfield newftype;
如果只修改名称,需要加上原来的数据类型;如果只修改类型, 需要附带原来的字段名称。(change比较麻烦,所以一般只用change来更改字段名,其它修改则使用modify)