目录
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)
一、SQl介绍
1.1、什么是SQL
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分类
1.4.1、DDL(Data Definition Language)
数据定义语言,这些语句是用于定义不同的数据字段、数据库、表、列、索引。如:create、drop、alter等。
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、创建数据库
语法格式为:
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
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8 COLLATE utf8_general_ci;
2.1.2、查看所有数据库
show databases;-- 所有数据库
2.1.3、删除数据库
drop database [if exists] 数据库名称;
示例:
drop database mydb;
[HY000][1008] Can't drop database 'mydb'; database doesn't exist
drop database if exists mydb;
2.1.4、选择数据库
use 数据库名;
示例:
use mysql;
2.1.5、查看当前数据库
select database();
2.2、数据表的操作
2.2.1、查看所有表
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=表的默认字符集;
示例:
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 表名称;
desc t_stu;
2.2.4、查看表语义
语法格式:
show create table 表名;
示例:查看 t_stu 表的语义
show create table t_stu;
这种方式看不清楚,我们想看清楚的话, 需要在语法格式中添加 \G 参数
show create table 表名[\G];
示例:查看 t_stu 表的语义
show create table t_stu[\G];
2.2.5、修改表名称
修改表名称有两种方式:
(1)
语法格式:
alter table 表名 rename 新表名;
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 '邮箱地址';
从执行后的结果可以看出使用这种方式来增加的字段默认是表结构的最后。
alter table 表名 add [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] first;
示例:再添加一个 age 字段
alter table t_stu add column age int(3) default 0 first ;
从执行后的结果可以发现,新增加的 age 字段被放到了第一个位置。
alter table 表名 add [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] after 存在列名;
示例:在 t_stu 表中再增加一个叫 qq 列名,并把它添加到 birth 列后
alter table t_stu add column qq varchar(15) after birth;
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;
注意:不仅可以修改列名称,还可以修改类型。
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;
(2)
语法格式二:
alter table 表名 modify [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] first;
(3)
语法格式三:
alter table 表名 modify [column] 列名 数据类型(长度) [default 默认值] [not null] [comment 描述信息] after 存在列;
三、DML
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());
方式二:
insert into 表名称(字段名1,字段名2,...) values(值1,值2,....);
示例:增加一条关羽的数据
insert into t_stu(id,name,gender,birth) values(11,'关羽','男',now());
3.1.2、插入多条数据(批量插入)
(1)
语法格式:
insert into 表名称 values(值1,值2,值3,....),(值1,值2,值3,....),....;
示例:
insert into t_stu values (null, '张飞', '男', now()),
(null, '黄盖', '男', now());
(2)
语法格式:
insert into 表名称(字段名1,字段名2,...) values(值1,值2,....),(值1,值 2,....),....;
示例:
insert into t_stu(name, gender, birth)
values('马超', '男', '2022-02-18'),
('赵云', '男', '2022-02-19');
注意:如果在插入数据时,希望使用表结构中的自增效果,又不想写字段名称,那么可以给主键指定 null 值或者为空即可。
示例:
insert into t_stu values (null, '黄盖', '男', now());
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;
示例二:把 t_stu 表中 id 为 1003 的数据的姓名,性别和出生日期都修改
update t_stu set name='黄g',gender='女',birth='2022-01-01' where id=1004;
3.2.2、修改所有数据
示例一:不加where条件修改数据
注意:在修改数据时需要加where条件,如果不加where条件,会修改表中的所有数据。
update t_stu set gender='女';
在实际开发中,在做修改之前最好是把表中的数据进行备份。
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;
3.3.2、删除一个表里的删除所有数据
语法格式:
delete from 表名称;
示例:
delete from t_stu;
3.3.3、truncate 语句来重置主键值
insert into t_stu values (null, '刘备', '男', now());
从执行的效果可以发现,新添加的数据的主键值是从原来的主键值之后增长的。如果希望在清除表中所有数据后新添加的数据的主键值是从开始值起,那么就可以执行 truncate 语句来完成。
truncate table t_stu;
select * from t_stu;--显示表里的所有内容
再向表中插入一条数据
此时我们发现,数据的主键值已经发生变化了。那么 truncate 语句它会起以下两个作用:
(1)清空表中所有数据
(2)重置表的主键值