MySQL(零基础)详解之SQL、DDL、DML

目录

一、SQl介绍

1.1、什么是SQL

1.2、SQL规范

1.3、命名规则

1.4、SQL分类

1.4.1、DDL(Data Definition Language)

1.4.2、DML(Data Manipulation Language)

1.4.3、DQL(Data Query Language)

1.4.4、DCL(Data Control Language)

二、DDl

2.1、数据库操作

2.1.1、创建数据库

2.1.2、查看数据库

2.1.3、删除数据库

2.1.4、选择数据库

2.1.5、查看当前数据库

2.2、数据表的操作

2.2.1、查看所有表

2.2.2、创建表

2.2.3、查看表结构

 2.2.4、查看表语义

2.2.5、修改表名称

2.2.6、增加数据列

 2.2.7、删除数据列

2.2.8、修改列名称

 2.2.9、修改列类型

三、DML

3.1、插入数据

3.1.1、插入一条数据

3.1.2、插入多条数据(批量插入)

 3.2、修改数据

3.2.1、修改一条数据

 3.2.2、修改所有数据

3.3、删除数据

3.3.1、删除一个表里的一条数据

3.3.2、删除一个表里的删除所有数据

3.3.3、truncate 语句来重置主键值


一、SQl介绍

1.1、什么是SQL

SQL ( Structure Query Language )是结构化查询语言,它是使用关系模型的数据库应用的语言。这个语言是 IBM 公司在上世纪 70 年代开发出来的,后来由美国国家标准局( ANSI )开始着手制定 SQL 标准。这些标准有 SQL-86, SQL-89, SQL-92, SQL-99 等标准。

1.2、SQL规范

(1)mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写;

(2)值,除了数值型,字符串型和日期时间类型使用单引号括起来;

(3)别名,尽量使用双引号(""),而且不建议省略as;

(4)所有标点符号使用英文状态下的半角输入方式 ;

(5)必须保证所有(),单引号,双引号是成对结束的;

(6)可以使用#单行注释 、--空格 单行注释 、/* 多行注释 */。

1.3、命名规则

(1)数据库、表名不得超过30个字符,变量名限制为29个字符内;

(2)必须只能包含 A–Z、 a–z、 _、0–9共63个字符 ;

(3)不能在对象名的字符间留空格;

(4)必须不能和用户定义的其他对象重名;

(5)必须保证你的字段没有和保留字、数据库系统或常用方法冲突;

(6)保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。

1.4、SQL分类

在 MySQL 中, SQL 可以分为以下几类:

1.4.1、DDL(Data Definition Language)

数据定义语言,这些语句是用于定义不同的数据字段、数据库、表、列、索引。如:create、drop、alter等。

1.4.2、DML(Data Manipulation Language)

数据操作语言,用于添加、删除、修改、查询数据的完整性。如:insert、 update 、 delete 等。

1.4.3、DQL(Data Query Language)

数据查询语言,用于查询数据库中的记录。如:select 。

1.4.4、DCL(Data Control Language)

数据控制语言,用于控制不同数据库中字段值的许可和说级别等。如:grant、 invoke 等。

二、DDl

2.1、数据库操作

2.1.1、创建数据库

语法格式为:

create database [if not exists] 数据库名称 
[character set 字符集] 
[collate < 校对规则名>];

语法说明:

(1)中括号中是可选的;

(2)数据库名称要符合命名规则和规范;

(3)字符集如果没有提供,那么就会使用安装 MySQL 数据库时选择默认字符集;

(4)校对规则名不能随便给,必须是 MySQL 中提供的某一个规则名。

示例:

创建一个叫 mydb 的数据库

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci;

如果说我们再次执行上面的语句,会发生什么情况呢?

当我们再次执行时会报如下错误:
[HY000][1007] Can't create database 'mydb'; database exists
这个错误告诉我们 mydb 数据库已经存在了,不能再次创建。 那么能不能不让这个错误发生呢? 这时我们就可以在创建数据库时指定 if not exists 选项了。
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8 COLLATE utf8_general_ci;
上面语句的意思是如果 mydb 这个数据库不存在,那么就创建,如果存在就不创建。

2.1.2、查看数据库

show databases;-- 所有数据库

2.1.3、删除数据库

语法格式为:
drop database [if exists] 数据库名称;

示例:

我们把上面创建的 mydb 数据库删除掉,则执行如下语句即可。
drop database mydb;
如果我们再次执行上面语句,它也会发生如下的错误:
[HY000][1008] Can't drop database 'mydb'; database doesn't exist
为了避免这个错误的发生,我们在做删除操作时,最好是加上 if exists 语句。
drop database if exists mydb;
上面的语句意思为:如果 mydb 这个数据库存在则删除,否则不做删除操作,不会报错。

2.1.4、选择数据库

语法格式为:
use 数据库名;

示例:

我们把 mysql 这个数据库做为操作要操作的数据库,那么就需要执行如下的命令。
use mysql;

2.1.5、查看当前数据库

要想查看当前所操作的数据库是哪个,我们需要执行如下的命令。
select database();

2.2、数据表的操作

2.2.1、查看所有表

(1)查看当前数据库的所有表 示例: 查看 mysql 数据库中有那些表
use mysql; 
show tables ;

(2)查看指定数据库的所有表

语法格式:

show tables from 数据库名称;

示例:查看 mysql 数据库中有那些表

show tables from mysql;

2.2.2、创建表

语法格式:

create table [if not exists] 表名称 (
     字段名1 数据类型(长度) [主键] [自增长] [非空] [默认值] [注释文字],
     字段名2 数据类型(长度) [非空] [默认值] [注释文字],
     ... 
) engine=引擎 auto_increment=自增的起始值 default charset=表的默认字符集;

示例:

我们在 mydb 数据库中添加 t_stu 表,这个表的结构如下: MySQL(零基础)详解之SQL、DDL、DML

create table if not exists t_stu ( 
    id int(11) primary key auto_increment, 
    name varchar(20) not null comment '姓名', 
    gender char not null default '男', 
    birth datetime 
    -- ,primary key (id) 可以在这里设置主键
 ) engine=innodb auto_increment=1000 default charset=utf8;

说明:

(1)primary key:它是用于定义主键关键字,或者使用 primary key(id) 来定义主键。

(2)auto_increment:它是用于定义主键是否可以自增,如果在主键上指定了这个属性,则表示主键的值是递增。这个属性是 MySQL 中可以使用的,在别的数据库中可能不能正常使用。

(3)not null:用于约束当前字段的值不是存在 null 值。

(4)comment :用于指定这个字段的描述信息,后面跟要对字段进行描述的内容。 (5) default :用于定义字段的默认值,后面跟默认指定的值。 (6) engine=innodb :用于显示的指定表的存储引擎为 innodb 类型。 (7) auto_increment=1000 :用于指定主键值的起始值为 1000。 (8) default charset=utf8 :用于指定表中存储数据的默认编码为 utf8 。

2.2.3、查看表结构

创建好表后,可以查看表的结构。 语法格式:
desc 表名称;
使用示例:查看 t_stu 表的结构
desc t_stu;

MySQL(零基础)详解之SQL、DDL、DML

 2.2.4、查看表语义

语法格式:

show create table 表名;

示例:查看 t_stu 表的语义

show create table t_stu;

MySQL(零基础)详解之SQL、DDL、DML

 这种方式看不清楚,我们想看清楚的话, 需要在语法格式中添加 \G 参数

show create table 表名[\G];

示例:查看 t_stu 表的语义

show create table t_stu[\G];

2.2.5、修改表名称

修改表名称有两种方式:

(1)

语法格式:

alter table 表名 rename 新表名;
示例:把 t_stu 表名修改为 t_student 表
alter table t_stu rename t_student;

(2)

语法格式:

rename table 表名 to 新表名;

示例:把刚修改的 t_student 表再重命名为 t_stu

rename table t_student to t_stu;

2.2.6、增加数据列

有三种增加数据列的方式

(1)数据列加在最后

语法格式一:
alter table 表名 add [column] 列名 数据类型(长度) [default 默认值] [not null];

示例:在 t_stu 表中增加 email 字段

alter table t_stu add column email varchar(50) not null comment '邮箱地址';

MySQL(零基础)详解之SQL、DDL、DML

 从执行后的结果可以看出使用这种方式来增加的字段默认是表结构的最后。

(2)数据列加在最前面 语法格式二:
alter table 表名 add [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] first;

示例:再添加一个 age 字段

alter table t_stu add column age int(3) default 0 first ;

MySQL(零基础)详解之SQL、DDL、DML

 从执行后的结果可以发现,新增加的 age 字段被放到了第一个位置。

(3) 语法格式三;
alter table 表名 add [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] after 存在列名;

示例:在 t_stu 表中再增加一个叫 qq 列名,并把它添加到 birth 列后

alter table t_stu add column qq varchar(15) after birth;

MySQL(零基础)详解之SQL、DDL、DML

 2.2.7、删除数据列

语法格式:

alter table 表名 drop [column] 列名;

示例:来删除 t_stu 表中的 qq 列

alter table t_stu drop column qq;
注意:删除列的操作是非常少见,一般会增加列,但不会去删除列。(因为数据是非常宝贵的,即使不需要,不删除也并不会占用太多内存)

2.2.8、修改列名称

语法格式:
alter table 表名 change [column] 旧列名 新列名 数据类型(长度) [default 默认 值] [not null] [comment 描述信息];

示例:把 t_stu 表中的 birth 字段修改为 birthday

alter table t_stu change column birth birthday datetime;

MySQL(零基础)详解之SQL、DDL、DML

 2.2.9、修改列类型

这个语法如果你不修改类型的话,还可以去修改列的位置。当然我们也可以在修改类型的同时修改位置。

(1)

语法格式一:

alter table 表名 modify [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息];

示例:t_stu 表中的 birthday 字段的类型(datetime)修改为 date 类型

alter table t_stu modify column birthday date;

MySQL(零基础)详解之SQL、DDL、DML

(2)

语法格式二:

alter table 表名 modify [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] first;

(3)

语法格式三:

alter table 表名 modify [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] after 存在列;

三、DML

DML 是数据操纵语言,它包括数据插入、数据修改和数据删除。 (1) insert :数据插入 (2)update :数据修改 (3) delete :数据删除

3.1、插入数据

插入一条数据:

(1)

insert into 表名称 values(值1,值2,值3,....);

(2)

insert into 表名称(字段名1,字段名2,...) values(值1,值2,....);

插入多条数据(批量插入):

(1)

insert into 表名称 values(值1,值2,值3,....),(值1,值2,值3,....),....;

(2)

insert into 表名称(字段名1,字段名2,...) values(值1,值2,....),(值1,值 2,....),....;

以上插入数据的四种方式

注意:

(1)值列表的顺序个数要与字段列表中的顺序个数一致,否则都会报错,导致插入失败。

(2)values关键字可以写成 value,但是 values 是一种标准写法

(3)可以一次插入多条数据,这叫批量插入。

(4)值的位置可以是常量值、表达式、函数。

3.1.1、插入一条数据

方式一 语法格式:
insert into 表名称 values(值1,值2,值3,....);

示例:增加一条刘备的数据

insert into t_stu values(10,'刘备','男',now());

MySQL(零基础)详解之SQL、DDL、DML

方式二:

语法格式:
insert into 表名称(字段名1,字段名2,...) values(值1,值2,....);

示例:增加一条关羽的数据

insert into t_stu(id,name,gender,birth) values(11,'关羽','男',now());

MySQL(零基础)详解之SQL、DDL、DML

3.1.2、插入多条数据(批量插入)

(1)

语法格式:

insert into 表名称 values(值1,值2,值3,....),(值1,值2,值3,....),....;

示例:

insert into t_stu values (null, '张飞', '男', now()),
                         (null, '黄盖', '男', now());

MySQL(零基础)详解之SQL、DDL、DML

 (2)

语法格式:

insert into 表名称(字段名1,字段名2,...) values(值1,值2,....),(值1,值 2,....),....;

示例:

insert into t_stu(name, gender, birth)
values('马超', '男', '2022-02-18'),
      ('赵云', '男', '2022-02-19');

MySQL(零基础)详解之SQL、DDL、DML

 注意:如果在插入数据时,希望使用表结构中的自增效果,又不想写字段名称,那么可以给主键指定 null 值或者为空即可。

示例:

insert into t_stu values (null, '黄盖', '男', now());

MySQL(零基础)详解之SQL、DDL、DML

 3.2、修改数据

语法格式:

update 表名称 set 字段名1=值1,字段名2=值2,....[where 条件];

语法说明:

(1)如果语句中不写 where 条件,那么会修改所有行。

(2)值可以是常量值、表达式、函数。

3.2.1、修改一条数据

示例一:把 t_stu 表中id值为10的这条数据中的男改为女。

update t_stu set gender='女' where id=10;

MySQL(零基础)详解之SQL、DDL、DML

 示例二:把 t_stu 表中 id 为 1003 的数据的姓名,性别和出生日期都修改

update t_stu set name='黄g',gender='女',birth='2022-01-01' where id=1004;

MySQL(零基础)详解之SQL、DDL、DML

 3.2.2、修改所有数据

示例一:不加where条件修改数据

注意:在修改数据时需要加where条件,如果不加where条件,会修改表中的所有数据。

update t_stu set gender='女';

MySQL(零基础)详解之SQL、DDL、DML

 在实际开发中,在做修改之前最好是把表中的数据进行备份。

3.3、删除数据

语法格式:

delete from 表名称 [where 条件]; -- 单表删除 

delete 表1,表2,... from 表1,表2 [where 条件];--多表删除

语法说明:

(1)如果在删除时不带 where 条件,那么会删除表中所有数据。

(2)删除整张表数据后,还可以使用 truncate 语句来重置主键值。

(3)还可以一次性删除多个表数据,前提是这些表没有外键约束。

3.3.1、删除一个表里的一条数据

语法格式:

delete from 表名称 [where 条件];

示例:删除 id 为 10 的数据

delete from t_stu where id=10;

MySQL(零基础)详解之SQL、DDL、DML

3.3.2、删除一个表里的删除所有数据

语法格式:

delete from 表名称;

示例:

delete from t_stu;
如果在执行删除时没有带 where 条件,那么会删除表中所有数据。

MySQL(零基础)详解之SQL、DDL、DML

所以在删除数据之前最好是把数据进行备份。

3.3.3、truncate 语句来重置主键值

示例:我们再次执行如下的插入数据的语句,来向 t_stu 表中插入一条数据
insert into t_stu values (null, '刘备', '男', now());

MySQL(零基础)详解之SQL、DDL、DML

从执行的效果可以发现,新添加的数据的主键值是从原来的主键值之后增长的。如果希望在清除表中所有数据后新添加的数据的主键值是从开始值起,那么就可以执行 truncate 语句来完成。

truncate table t_stu;
执行完这条语句后,再执行
select * from t_stu;--显示表里的所有内容
发现truncate它会清空表中的所有数据 MySQL(零基础)详解之SQL、DDL、DML

 再向表中插入一条数据

MySQL(零基础)详解之SQL、DDL、DML

 此时我们发现,数据的主键值已经发生变化了。那么 truncate 语句它会起以下两个作用: 

(1)清空表中所有数据

(2)重置表的主键值

实际上在底层会先把表删除后,再创建表。 总结: 不管是执行 delete 来删除数据,还是使用 truncate 来删除数据,大家都要小心,最后在做这些破坏性很大的操作之前把数据库进行备份。

上一篇:SQL极简核心:窗口函数


下一篇:mysq5.7 和mysql8不区分大小写和不开启sql严格模式