sql语句,JDBC编程基础

sql语句

char与varchar的区别

1、char是定长数据,如果char(10)但里面只保存了1个字符,则它的实际长度仍然是10。Mysql对查询的结果进行了处理 ,所以使用length无法判断它所占用的长度;varchar(10)时,如果里面只保存了1个字符,则它的长度为1,所以varchar被称了可变长字符
2、char的取值范围为0-255;varchar的取值范围为0-65535。如果需要存储的字符串的长度跟所有值的平均长度相差不大,适合用char,如MD5。 对于经常改变的值,char优于varchar,原因是固定长度的行不容易产生碎片。
3、对于很短的列,char优于varchar,原因是varchar需要额外一个或两个字节存储字符串的长度
4、char和varchar后面如果有空格,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较

大对象类型

在这里插入图片描述
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求
TINYTEXT可变长度最多 255 个字符;TEXT可变长度最多 65535 个字符;MEDIUMTEXT可变长度最多 16M个字符;LONGTEXT可变长度,最多4G个字符

set和枚举

在这里插入图片描述
enum枚举类型实际上是当作字符串进行处理,设置当前列中所允许的取值,取值只能是枚举值中的任意一个值
create table t1(id enum(‘a’,’b’,’c’));
set集合类型实际上是当作字符串进行处理,设置当前列中所允许的取值,取值可以是集合中的任意多个值
create table t1(id set(‘a’,’b’,’c’));

日期和时间列类型

位类型bit

bit 表示1个二进制的位 bit(8) 表示8个二进制的位,其中n的取值范围为1-64
在这里插入图片描述

注意boolean类型

在这里插入图片描述

总结

定义数据类型就是定义列,数据类型决定数据的特性
数据类型主要分为字符串类型,浮点书类型和定点数类型,日期类型以及二进制类型
数据类型在不同的存储引擎上表现不同
根据所采用的数据类型,需求和数据特性选择数据类型

删除操作drop

删除数据库 DROP DATABASE <数据库名>;
drop database test;
删除数据表 DROP TABLE <表名>;
drop table t_users;
基本表删除数据、表上的索引都删除
表上的视图往往仍然保留,但无法引用
删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述(标准中没有,认为表建立后就永久存在)
show create table t1;

修改基本表alter

修改表 ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束] ]
[ DROP <完整性约束名> ]
[ MODIFY <列名> <数据类型> ];
说明:
<表名>:要修改的基本表
ADD子句:增加新列和新的完整性约束条件
DROP子句:删除指定的完整性约束条件
MODIFY子句:用于修改列名和数据类型

基本练习

1、创建一个数据库test,如果数据库已经存在则删除
drop database if exists test;
create database test default character set utf8;
2、切换当前数据库
select database(); 查看当前数据库
use test;
3、创建一个用于存储学生信息的学生表 student
编号id,姓名name,成绩score
show tables; 查看当前库中的所有表
drop table if exists student; 如果已经存在student表则执行删除操作
create table if not exists student(
id bigint primary key auto_increment,
name varchar(10) not null,
score numeric(4,1) default 0
)engine=innodb default charset utf8;
4、向Student表增加“入学时间”列,其数据类型为日期型
alter table student add scome date;
不论基本表中原来是否已有数据,新增加的列一律为空值。所以如果表中已经有数据,则注意not null约束的问题
5、将年龄的数据类型改为半字长整数
alter table student add age int; 向表中添加一个int类型的列age
desc student; 查看当前的表结构
alter table student modify age smallint;
6、删除学生姓名必须取唯一值的约束
alter table student modify name varchar(10) unique;
在这里插入图片描述
alter table student drop name; 删除指定列name
alter table student add name varchar(10); 重新添加列name

对表的基本操作 DML+DQL

增加数据:
Insert into 表名称 values(值的列表)
Insert into tb_users values(1,’yan’,’123’) 注意和表的列定义一一对应,当值不确定时也必须写null
Insert into 表名称(列名称,…) values(对应的值,…) 注意一一对应,注意数据类型。如果没有出现的列则自动插入null
在这里插入图片描述
插入数据总结
字符类型和日期类型的数据前后要添加’’单引号
没有指定列时,要给出完整数据,且要对应顺序:
Insert into student values(1,’Tom’,’1’);
优化写入,指定列:
Insert into stud(id,name)values(1,’jack’);

修改数据
update 表名称 set 列名称=值, … 将指定表中指定列的值全部修改为指定值
update stud set name=‘Jack’; 将stud表中的所有行的name列值修改为jack
update 表名称set 列名称=值, … where 条件 只修改满足条件的指定行上列值
update stud set name=‘Jack’where id=1; 将stud表中的id值为1的行的name列值修改为jack

同时修改两个值:update stud setname=‘Rose’,id=22 where id=1;

在原值上面进行累加操作:update product set price=price1.1 -所有商品的价格上涨10%
update product set price=price
1.1 where cname=‘食品’-只有列名为cname值为食品的商品,价格上涨10%

删除数据
delete from 表名称; 删除表中的所有数据,表结构仍旧存在,类似truncate table 表名称
delete from 表名称 where 条件; 根据条件删除数据,例如delete from tb_users where id>3则会删除所有id>3的行
delete from stud 全部删除
delete from stud where id=1; 删除指定的行
特殊写法: delete from stud where 1=1 delete from stud where 1=2

也可以使用 TRUNCATE TABLE stud; 它与delete的区别是不记录操作日志,即无法恢复数据
从执行效果上看 truncate table stud和delete from stud一致,都是删除了stud表中的所有数据,但是执行是有区别的。 【面试】
truncate table不是DML语句,没有事务的概念,所以直接执行删除。不能撤销操作
delete from属于DML语句,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值