文章目录
- 1 SQL概述
- 1.1 Sql介绍
- 1.1.1 什么是sql?
- 1.1.2 sql的语法
- 1.1.3 sql的分类
- 2 DDL操作数据库
- 2.1 DDL操作数据库
- 2.1.1 创建数据库
- 2.1.2 查看所有的数据库
- 2.1.3 查看数据库的定义结构
- 2.1.4 删除数据库
- 2.1.5 修改数据库
- 2.1.6其他操作
- 3 DDL操作表
- 3.1 创建表
- 3.1.1 创建表的语法
- 3.1.2 类型
- 3.1.3 约束
- 3.1.4 练习
- 3.2 查看表
- 3.2.1 查看所有的表
- 3.2.2 查看表的定义结构
- 3.3 修改表
- 3.3.1 目标
- 3.3.2 步骤
- 3.3.2.1 语法
- 3.3.2.2 练习
- 3.4 删除表
- 4 DML操作表记录-增删改
- 4.1 插入记录
- 4.2 更新记录
- 4.2.1 语法
- 4.2.2 练习
- 4.3 删除记录
- 4.3.1 delete
- 4.3.2 truncate
1 SQL概述
1.1 Sql介绍
1.1.1 什么是sql?
- SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
- SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
- 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
- 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0qj0m6h-1653630201369)(imgs.assets/tu_17.png)]
1.1.2 sql的语法
- 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的。
- SQL在window中不区分大小写,关键字中认为大写和小写是一样的
1.1.3 sql的分类
- Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表
- Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
- Data Query Language(DQL 数据查询语言),如:对表中的记录查询操作
- Data Control Language(DCL 数据控制语言),如:对用户权限的设置
2 DDL操作数据库
2.1 DDL操作数据库
我们把Sql介绍完成了, 那下面就通过DDL操作数据库。DDL的英文全称为Data Definition Language,中文含义为数据库模式定义语言。
2.1.1 创建数据库
- 语法
create database 数据库名 [character set 字符集][collate 校对规则] 注: []意思是可选的意思
字符集(charset):是一套符号和编码。
- 练习
创建一个web14_1的数据库(默认字符集)
create database web14_1;
创建一个web14_2的数据库,指定字符集为gbk(了解)
create database web14_2 character set gbk;
2.1.2 查看所有的数据库
- 语法
show databases;
2.1.3 查看数据库的定义结构
- 语法
show create database 数据库名;
- 查看web14_1这个数据库的定义
show create database web14_1;
2.1.4 删除数据库
- 语法
drop database 数据库名;
- 删除web14_2数据库
drop database web14_2;
2.1.5 修改数据库
- 语法
alter database 数据库名 character set 字符集;
- 修改web14_1这个数据库的字符集(gbk)
alter database web14_1 character set gbk;
注意:
- 是utf8,不是utf-8
- 不是修改数据库名
2.1.6其他操作
- 切换数据库, 选定哪一个数据库
use 数据库名; //注意: 在创建表之前一定要指定数据库. use 数据库名
- 练习: 使用web14_1
use web14_1;
- 查看正在使用的数据库
select database();
3 DDL操作表
3.1 创建表
前面已经把数据库的CRUD讲解完了,下面我们就学习创建表
3.1.1 创建表的语法
create table 表名(
字段名 字段类型 [约束],
字段名 字段类型 [约束],
........
字段名 字段类型 [约束]
);
3.1.2 类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z40YH1cB-1653630201370)(imgs.assets/tu_4.png)]
- 整型 一般使用int 或者bigint
- 浮点/双精度型
- 默认的范围 float或者double
- 指定范围 float(M,D) eg: float(4,2) 表达的范围: -99.99~99.99
- 字符串
- 固定长度 char(n) eg: char(20), 最大能存放20个字符. ‘aaa’, 还是占20个字符的空间
- 可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间
一般使用varchar(n) 节省空间; 如果长度(eg:身份证)是固定的话 可以使用char(n) 性能高一点
- 关于大文件
- 一般在数据库里面很少存文件的内容, 一般存文件的路径
- 一般不使用二进制存, 使用varchar(n)存文件的路径
- 日期
- DATE 只有日期
- DATETIME 日期和时间
3.1.3 约束
- 即规则,规矩 限制;
- 作用:保证用户插入的数据保存到数据库中是符合规范的
约束 | 约束关键字 |
主键 | primary key |
唯一 | unique |
非空 | not null |
约束种类:
- not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据
- unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo字段不能出现重复的数据
- primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的
- auto_increment: 自动增长,必须是设置了primary key之后,才可以使用auto_increment
- id int primary key auto_increment; id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.
注意:
- 先设置了primary key 再能设置auto_increment
- 只有当设置了auto_increment 才可以插入null 自己维护 否则插入null会报错
id列:
- 给id设置为int类型, 添加主键约束, 自动增长
- 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长
3.1.4 练习
- 创建一张学生表(含有id字段,姓名字段,性别字段. id为主键自动增长)
create table student(
id int primary key auto_increment,
name varchar(40),
sex int
);
3.2 查看表
我们把表创建好了, 下面就来介绍查看表
3.2.1 查看所有的表
show tables;
3.2.2 查看表的定义结构
- 语法
desc 表名; - 练习: 查看student表的定义结构
desc student;
3.3 修改表
3.3.1 目标
我们表创建好了, 如果要增加一列,要删除一列呢? 那下面就来讲解修改表
3.3.2 步骤
- 增加列
- 修改列的类型约束
- 修改列的名称,类型,约束
- 删除列
- 修改表名
3.3.2.1 语法
- 增加一列;alter table 表 add 字段 类型 约束;
- 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
- 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;
- 删除一列; alter table 表名 drop 列名;
- 修改表名 ; rename table 旧表名 to 新表名;
3.3.2.2 练习
- 给学生表增加一个grade字段
alter table student add grade varchar(20) not null;
- 给学生表的sex字段改成字符串类型
alter table student modify sex varchar(10);
- 给学生表的grade字段修改成class字段
alter table student change grade class varchar(20);
- 把class字段删除
alter table student drop class;
- 把学生表修改成老师表
rename table student to teacher
3.4 删除表
表创建好了, 我们还可以删除。 掌握表的删除
- 语法
drop table 表名; - 把teacher表删除
drop table teacher;
4 DML操作表记录-增删改
- 准备工作: 创建一张商品表(商品id,商品名称,商品价格,商品数量.)
create table product(
pid int primary key auto_increment, //只有设置了auto_increment id列才可以赋值为null
pname varchar(40),
price double,
num int
);
4.1 插入记录
- 方式一: 插入指定列, 如果没有把这个列进行列出来, 以null进行自动赋值了.
eg: 只想插入pname, price , insert into t_product(pname, price) values(‘mac’,18000);
insert into 表(列,列..) values(值,值..);
注意: 如果没有插入了列设置了非空约束, 会报错的
- 方式二: 插入所有的列
insert into 表 values(值,值…);
eg:
insert into product values(null,‘苹果电脑’,18000.0,10);
insert into product values(null,‘华为5G手机’,30000,20);
insert into product values(null,‘小米手机’,1800,30);
insert into product values(null,‘iPhonex’,8000,10);
insert into product values(null,‘苹果电脑’,8000,100);
insert into product values(null,‘iPhone7’,6000,200);
insert into product values(null,‘iPhone6s’,4000,1000);
insert into product values(null,‘iPhone6’,3500,100);
insert into product values(null,‘iPhone5s’,3000,100);
insert into product values(null,‘方便面’,4.5,1000);
insert into product values(null,‘咖啡’,11,200);
insert into product values(null,‘矿泉水’,3,500);
命令行插入中文数据报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4p4r0jb-1653630201371)(imgs.assets/tu_3.png)]
- 关闭服务, net stop MySql
- 在数据库软件的安装目录下面, 修改配置文件 my.ini中客户端的编码为gbk
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NN4rk1w-1653630201371)(imgs.assets/1535858746067.png)]
- 重新打开命令行,开启服务, net start MySql
4.2 更新记录
我们数据插入成功了, 还可以对已有的数据进行更新。
4.2.1 语法
update 表 set 列 =值, 列 =值 [where 条件]
4.2.2 练习
- 将所有商品的价格修改为5000元
- 将商品名是Mac的价格修改为18000元
- 将商品名是Mac的价格修改为17000,数量修改为5
- 将商品名是方便面的商品的价格在原有基础上增加2元
update product set price = 5000;
UPDATE product set price = 18000 WHERE name = 'Mac';
UPDATE product set price = 17000,num = 5 WHERE name = 'Mac';
UPDATE product set price = price+2 WHERE name = '方便面';
4.3 删除记录
4.3.1 delete
- 语法
delete from 表 [where 条件] 注意: 删除数据用delete,不用truncate
- 练习
- 删除表中名称为’Mac’的记录
- 删除价格小于5001的商品记录
- 删除表中的所有记录
delete from product where pname = 'Mac';
delete from product where price < 5001;
delete from product;
4.3.2 truncate
truncate table 表;
- delete 和truncate区别【面试题】
- DELETE 删除表中的数据,表结构还在; 删除的记录可以找回
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表(空)。删除的记录不可以找回
- 工作里面常用的删除
- 物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除
- 逻辑删除: 没有真正的删除, 数据还在。做一个标记,逻辑删除就是对表的更新 eg: state字段 1 启用 0禁用
工作里面一般使用逻辑删除用的多