思维导图
SQL语言共分为四大类:
数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、
数据操纵语言DML:(1) 插入:INSERT (2) 更新:UPDATE (3) 删除:DELETE
数据查询语言DQL:数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
数据控制语言DCL:数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果[了解]
DDL定义数据库
# 例如,使用命令创建数据库:
# (1)创建一个班级db_database1数据库,且使用默认编码;
create database db_database1;
# (2)创建一个班级db_database2数据库,charset设置编码为utf8;
create database db_database2 charset utf8;
# (3)思考:若再使用相同命令创建一个已有的数据库:班级db_database1/3,能成功吗?
# if not exists # 判断
create database if not exists db_database3;
# [HY000][1007] Can't create database 'db_database1'; database exists
字符集概念
什么是字符集
字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集有:==ASCII字符集==、ISO 8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、unicode,==GBK==,==UTF8== 字符集等.
为什么要有字符集
因为计算机底层只能存储二进制数字.不能存储任何的字符,因此要使用数字来固定表示某个字符.这样就可以在使用
字符的时候个将数字根据字符集转变成为字符.
DDL查看数据库
-- 查看所有库
show databases;
-- 查看建库语句
show create database db_database3;
# CREATE DATABASE `db_database1` /*!40100 DEFAULT CHARACTER SET utf8mb4
# COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
-- 使用库 (选择库)
use db_database3;
# 例如,使用命令来操作:
# (1)使用数据库班级db_database2;
use db_database2;
# (2)查看当前正在使用的数据库名;
select database();
# (3)思考:如果要查找到MySQL数据库下默认库名mysql中的user表,该怎么操作呢?
use mysql;
DDL删除数据库
drop database db_database3;
数据类型
1.整数
2.小数
3.字符串
4.时间和日期
DDL创建表
# 例如,使用创建数据表命令来完成:
# (1)创建字段时,不添加任何[约束]条件;
# (2)新建一个用户表user,字段有编号、用户名、昵称;
# (3)思考:若再使用相同命令创建一个已有的数据表:user,能成功吗?
-- 选择库
use db_database1;
-- 创建表
create table user(
id int,
username varchar(20),
nikename varchar(20)
);
-- 判断表不存在才会执行创建
create table if not exists user(
id int,
username varchar(20),
nikename varchar(20)
);
DDL数据表的查看
# 例如,使用命令查看数据表:
# (1)在当前数据库中再创建一个邮箱表email,有编号、邮箱号、密码、来源等字段;
create table email(
id int,
email_addr varchar(20),
password varchar(20),
scr varchar(20)
);
# (2)查看当前数据库中有哪些数据表;
show tables ;
# (3)查看创建数据表email的创建语句;
show create table email;
-- 运行结果
# CREATE TABLE `email` (
# `id` int(11) DEFAULT NULL,
# `email_addr` varchar(20) DEFAULT NULL,
# `password` varchar(20) DEFAULT NULL,
# `scr` varchar(20) DEFAULT NULL
# ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
# (4)查看数据表email的表结构。
desc email;
-- 运行结果:
# id, int(11), YES
# email_addr, varchar(20), YES
# password, varchar(20), YES
# src, varchar(20), YES
DDL删除表
# 例如,使用命令删除数据表:
# (1)新建一个只有姓名字段的学生表,然后查看库中有哪些数据表;
create table stu(
stu_name varchar(20)
);
# (2)删除学生表后,再查看有哪些数据表。
drop table stu;
DDL 修改表之添加列
# 例如,使用命令完成:
# (2)添加判断语句,新建一张用户表table_user,有用户名、密码这2个字段;
create table if not exists table_user(
username varchar(20),
password varchar(20)
);
# (3)给用户表添加一列信息展示information字段,长度为140;
-- 默认添加到末尾
alter table table_user add information varchar(140);
# (4)思考1:在用户表的最开始处,添加一列最初名称first_name,该怎么做呢?
alter table table_user add first_name varchar(20) first ;
# (5)思考2:在用户表的密码字段后,添加一列年龄age字段,该怎么做?
alter table table_user add age varchar(20) after password;
#--查看表详细信息
desc table_user;
DDL修改表之修改列的类型和数据
# 例如,使用命令完成:
# (1)给用户表的信息字段类型修改为char,长度修改为60;
alter table table_user modify information varchar(60);
# (2)将用户名字段修改长度为16,且添加不为空约束。
-- not null 表示非空约束
alter table table_user modify username varchar(16) not null; -- not null 表示非空约束
# 如果表中有数据,修改类型还需要注意数据能否改为你想要的类型.
DDL修改表之修改列名
# 例如,使用命令完成:
# (1)把用户表的用户名修改为name,字符串类型、长度为18;
alter table table_user change username name varchar(18);
# (2)把用户表的信息字段列名修改为info,类型修改为varchar,长度为100。
alter table table_user change information info varchar(100);
DDL修改表之删除列
# (1)删除用户表中的年龄这一列;
alter table table_user drop age;
# (2)使用命令查看表结构。
desc table_user;
DDL修改表之修改表名
# (1)把用户表的表名更改为t_user;
rename table table_user to t_user;
# (2)使用命令查看库中所有数据表信息。
-- 查看所有的表.
show tables ;
DML操作
insert插入数据到表
# 例如,使用命令完成:
# (2)用户表的字段信息有编号、人物名、性别、住址等;[不添加任何约束条件]
create table user1(
id int,
user_name varchar(20),
gender varchar(2),
addr varchar(20)
);
# (3)使用插入数据的语法分别插入一条数据;
insert into user1 values (1,'李明','男','安徽');
-- Column count doesn't match value count at row 1
# (4)思考1:给所有字段名一次性插入2条数据信息,该怎么做?
insert into user1 values (2,'李华','女','上海'),(3,'李飞','男','北京');
# (5)思考2:给用户表一次性插入仅包含人物名、年龄、性别字段的3条数据,该怎么做?
insert into user1 (user_name,gender,addr) values ('李','女','上海');
# (6)若发现在性别字段后,还缺少了年龄字段,该怎么处理呢?
alter table user1 add age int;
# 查看表中数据
SELECT * FROM user1;
value和values的区别
1:在MySQL中,value和values都是用于插入数据的关键字,但它们的用法和执行效率有所不同。 2:value和values在基本用法上没有明显区别,它们都可以用于插入单条或多条数据。 3:如果你需要高效地插入单条数据,value是更好的选择;如果你需要批量插入多条数据,那么使用values会更加高效。同时,保持代码的一致性和正确性也是非常重要的。因此一般全都使用values.
update修改数据
# 例如,使用命令完成:
# (1)将用户表内所有用户性别一次性设置为女;
update user1 set gender = '女';
# (2)将用户表内所有用户的性别修改为男、年龄修改为18;
update user1 set gender = '男',age = 18;
# (3)将用户表内编号为2的用户性别设置为女;
update user1 set gender = '女' where id = 2;
# (4)将用户表内编号为3的用户年龄更新为30,且住址更新为湖北省武汉市;
update user1 set age = 30 ,addr = '湖北省武汉市' where id = 3;
# (5)思考:去年存储的用户数据到今年了,那么存储在user数据表里的用户年龄都要增加1岁,该怎么处理呢?
update user1 set age = age +1 ;
delete删除数据
# 例如,使用命令完成:
# (1)在当前库中创建一个用户表2,表字段有编号、用户名、密码,再增加3条数据;
create table user2(
id int,
username varchar(20),
password varchar(20)
);
insert into user2 values (1,'李四','xxxxx'),(2,'张四','xxxxx'),(3,'王四','xxxxx');
select * from user2;
# (2)删除表内编号为1的这条数据,再删除用户名为李四的这条数据;
delete from user2 where id = 1;
delete from user2 where username = '张四';
# (3)使用命令删除表内所有数据,观察效果。
delete from user2;