(韩顺平讲解)jdbc学习(三)---mysql的CRUD操作

创建一张表:

create table emp(

id int,

name varchar(64),

sex char(2),

birthday date,

Entry_date date,

job varchar(32),

salary float,

resume text)

 

修改表结构

--添加新的列

alter table 表名 add 列名 数据类型

--修改列(列的类型和大小)

alter table 表名 modify 列名 新的数据类型

--删除某列

alter table 表名 drop  列名

rename table 原表名 to 新表名

alter table 表名 character set 字符集名;

alter table user change column name username varchar(20);

 

案例:

•在上面员工表的基本上增加一个image列。

alter table emp add image blob;

•修改job列,使其长度为60

alter table emp modify job varchar(60);

•删除sex列。

alter table emp drop sex;

•表名改为user

rename table emp to user;

•修改表的字符集为utf-8

alter table user character set utf8;

•列名name修改为username

alter table user change column name username varchar(30);

如何显示创建表的指令:

show create table 表名;

 

insert语句

插入的数据应与字段的数据类型相同。

比如:

create table test15 (name varchar(64));

insert into test15 (name) values(aaa);

insert into test15 (name) values(34);

 

create table test16 (age int);

insert into test16 (age) values(34);

insert into test16 (age) values(aaa);()

insert into test16 (age) values(111);(虽然ok,但是不是好的写法.)

数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

values中列出的数据位置必须与被加入的列的排列位置相对应。

create table test17 (id int ,name varchar(64));

insert into test17 (id,name) values(3,aaa);

insert into test17 (name,id) values(aaa,3);

 

update 语法

基本语法:

update 表名 set 列名=表达式 ... where 条件

说明如果 where后面没有条件,则相当于对整个表进行操作。

UPDATE语法可以用新值更新原有表行中的各列。

SET子句指示要修改哪些列和要给予哪些值。

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

 

将所有员工薪水修改为5000元。

update employee set sal=5000;

将姓名为’zs’的员工薪水修改为3000;

update employee set sal=3000 where name=zs;

wu的薪水在原有基础上增加1000

update employee set sal=sa+1000 where name=wu;

 

delete语句

基本语法:

delele from 表名 where 条件;

注意:

如果不使用where子句,将删除表中所有数据。要小心使用.

Delete语句不能删除某一列的值(可使用update

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

insertupdate一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。

truncate table 表名,可以删除表的记录,速度快,但不能回滚...

 

mysql中事务的特殊说明:

(1)mysql 控制台是默认自动提交事务(dml)

(2)如果我们要在控制台使用事务,应该这样

set autocommit=false;

savepoint 保存点

//操作...

rollback to 保存点.

 

select 语句

基本语法:

select 列名...., 列(可以运行) from 表名 where 条件;

注意事项:

Select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

select * from 表名;

From指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

select distinct * from 表名

 

练习:

查询表中所有学生的信息。

select * from student;

查询表中所有学生的姓名和对应的英语成绩。

select name,english from student;

过滤表中重复数据。

select distinct * from 表名

 

where子句如何使用

案例:

l查询英语分数在 8090之间的同学。

select * from student where english>=80 and english<=90;

l查询数学分数为89,90,91的同学

select * from student where math in (89,90,91);

l查询所有姓李的学生成绩。

select * from student where name lik ‘李%;

l查询数学分>80,语文分>80的同学。

select * from student where matn>80 and chinese>80;

 

order by 子句

练习:

l对数学成绩排序后输出。

select name,math from student order by math;

l对总分排序后输出,然后再按从高到低的顺序输出

select math+english+chinese as allfen , name from student order by allfen;

l对姓李的学生成绩排序输出

select (math+english+chinese) as allfen,name from student where name like ‘李%’ order by allfen;

 

count

练习:

l统计一个班级共有多少学生?

select count(*) from student;

l统计数学成绩大于90的学生有多少个?

select count(*) from student where math>90;

l统计总分大于250的人数有多少?

select count(*) from student where (math+english+chinese)>250;

 

sum的用法

练习:

n统计一个班级数学总成绩?

select sum(math) from student;

n统计一个班级语文、英语、数学各科的总成绩

select sum(math),sum(english),sum(chinese) from student;

n统计一个班级语文、英语、数学的成绩总和

select sum(math+english+chinese) from student;

n统计一个班级语文成绩平均分

select sum(chinese)/count(*) from student;

 

avg的用法

练习:

n求一个班级数学平均分?

select avg(math) from student;

n求一个班级总分平均分

select avg(math+english+chinese) from student;

 

 

group by 用法

练习:对订单表中商品归类后,显示每一类商品的总价

select product , sum(price) from orders group by product;

 

having用法

练习:查询购买了几类商品,并且每类总价大于100的商品

select product , sum(price) from orders group by product having sum(price)>100

 

日期和时间函数

CURRENT_DATE (  )当前日期

CURRENT_TIME (  )当前时间

CURRENT_TIMESTAMP (  )当前时间戳

DATE (datetime )返回datetime的日期部分

DATE_ADD (date2 , INTERVAL d_value d_type )

date2中加上日期或时间

DATE_SUB (date2 , INTERVAL d_value d_type )

date2上减去一个时间

DATEDIFF (date1 ,date2 )两个日期差(结果是天)

TIMEDIFF(date1,date2)两个时间差(多少小时多少分钟多少秒)

NOW (  )当前时间

YEAR|Month|DATE (datetime )年月日

案例:

select current_date() from dual ; 得到当前日期

select current_time() from dual ;  得到请求时间;

 

mysql 事务控制

Mysql的事务是自动提交的

set autocommit=false;

savepoint 保存点

进行各个dml操作

rollback to aa;

 

mysql的常见约束

primary key (主键)

特点主键是用于唯一标识一条记录的约束,一张表,最多只能有一个主键,主键不能为null,也不能重复

create table user1 (id int primary key, name varchar(32));

 

auto_increment

可以自增长.

create table user2 (id int primary key auto_increment , name varchar(32));

 

unique(唯一)

特点表的某列的值,不能重复可以为null (可以有多个null), 一张表中可以有多个unique.

create table user4(id int unique,name varchar(32));

 

not null (非空)

mysql 的表的列,默认情况下可以为null, 如果不允许某列为空 ,则可使用 not null说明

create table user5(id int primary key, name varchar(32) not null);

 

⑤外键 foreign key

constraint ordersid_FK foreign key(ordersid) references orders(id),

ordersid:从表的外键列

orders: 主表名

id : 从表指向的列(主键/unique)

从理论上说明,我们先建立主表,再建从表

 

--部门表

create table dept(id int primary key,

name varchar(64));

insert into dept values(1,’财务部’);

--雇员表

create table emp(id int primary key,

name varchar(32),

deptid int references dept(id));

上面的建立外键的写法是错误的。

应该这样.(表级定义)

create table emp(id int primary key,

name varchar(32),

deptid int ,

constraint emp_fk foreign key (deptid) references dept(id)

);

 

小结外键:

1外键只能指向 主表的主键列,或者  unique

2外键的数据类型和它指向的列的数据类型一样.

3外键的值,要么为空,要么是指向的那列中存在值.

 (4)外键可以指向本表的主键列,或者unique

 

补充讲解mysql 分页查询:

select * from 表名 where 条件 ... limit 从第几条取,取出几条

limit str,len

str:表示从第几条开始取,编号从0开始

len:表示取出的长度

 

返回第 4条 ----第 7条记录

select * from student limit 3,4;

按语文成绩排序,查询出第3名到第5

select * from student order by chinese desc limit 2,3

 

扩展分页: pageNow, pageSize

select * from 表名 where 条件 [group by .. having .. order by ..] limit (pageNow-1)*pagesize, pageSize;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值