jdbc 之 mysql.docx
- 文档编号:9521762
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:109.19KB
jdbc 之 mysql.docx
《jdbc 之 mysql.docx》由会员分享,可在线阅读,更多相关《jdbc 之 mysql.docx(19页珍藏版)》请在冰豆网上搜索。
jdbc之mysql
◆mysql介绍
(1)mysql数据库是瑞典AB开发
(2)mysql->sun->oracle
(3)mysql数据库的特点
1.开源
2.免费
3.跨平台(windows/linux/unix/苹果)
4.处理并发性(13000个)/安全/稳定
5.该数据库轻(对资源要求不高.)安装文件37.7m,而且对cpu/内存要求不高.
◆安装和配置
1.一般说,一台机器装一个mysql.
2.安装和配置过程见mysql安装图解
◆mysql 使用
1.可以使用windowdos登录到mysql数据库.
基本语法
在dos下输入
mysql–u用户名-p密码
特别说明:
-p后面的密码不要有空格/使用该命令的时候,需要配置一下环境变量.
2.mysql数据库也提供图形化界面来登录mysql数据库
演示:
3.如何在mysql中创建数据库
基本语法
createdatabase数据库名
•创建一个名称为mydb1的数据库。
createdatabasemydb1;【sql】
•创建一个使用utf-8字符集的mydb2数据库。
createdatabasemydb2charactersetutf8
•创建一个使用utf-8字符集,并带校对规则的mydb3数据库
createdatabasemydb3charactersetutf8collateutf8_general_ci;
◆mysql的一些常用指令
①如何查看,创建数据库的指令:
showcreatedatabse数据库名;
②显示数据库
指令showdatabases;
③查看创建数据库的指令
showcreatedatabase数据名;
④删除数据库:
dropdatabase数据库名
⑤如何指定使用某个数据库
use数据库名;
⑥如何备份和恢复数据库.
mysqldump–u用户名–p密码数据名>存放路径
该指令,需要在dos控制台下直接执行
恢复数据库:
1.创建一个数据库mydb2,但是这个数据库目前是空.
2.use数据名
3.在mysql控制台下使用source备份文件路径
◆创建表
基本语法
createtable表名(
列名列的数据类型,
....
)characterset字符集名称collate校对规则
案例 :
创建一张用户表
createtableusers(
idint,
namevarchar(64),
pwdvarchar(64),
birthdaydate)
◆mysql数据类型(重点)
1数值型:
1.bit(m)m默认为1最大64
案例
createtabletest1(idbit
(1));---//这里显示乱码?
2.tinyint[unsigned]如果是有符号则表示-128到127,如果是无符号0-255
案例
createtabletest3(numtinyint)---128到127
createtabletest4(numtinyintunsigned)0---255
4.smallint
samllint是两个字节表示的.
带符号是负的2的15次方到2的15次方-1,无符号2的16方-1
其它的数值类型,见下图即可
6.float
FLOAT[(M,D)][UNSIGNED]是定长
m:
表示有效位
d:
表示小数点有几位
案例:
createtabletest5(numfloat);
createtabletest6(numfloat(5,1));
7.double
其用法和float类似,只是表示的范围更大,也是定长
8.numeric(m,d)
用于表示小数,或者整数
createtabletest7(numnumeric);//这样其实就是可以存放整数.
createtabletest8(numnumeric(5,2));//这样就可以表示有效为5,小数点有两位的数
2字串类型
一览图:
常用的有
(1)char(m)
m范围是0-255,定长.
char(20)如果你存放‘abc’字串,实际在表‘abc’;
案例:
createtabletest11(namechar(20));
☞小技巧:
mysql自带的client默认支持utf8码,所有我们在添加中文的时候,需要设置让client支持gbk
*showvariableslike‘char%’;//显示关于字符的设置参数
*setcharacter_set_client=gbk;//可以存中文
*setcharacter_set_results=gbk;//可以看中文
(2)varchar(m)
m表示大小,范围0-65535,变长
varchar(20)如果你存放‘abc’字串,实际在表‘abc’;
案例省略...
建议:
如果表的某列长度固定,比如产品编号..学号...而且在255内,我们应当使用char
如果长度不能取得,或者长度大于255小于65535则使用varchar
(3)text
该类型,可以表示更大的字串.
3日期类型
(1)date
日期(年-月-日)
createtabletest12(birthdaydate);
对于date只保存年-月-日
(2)datetime
日期时间类型
createtabletest13(hiredatedatetime);
(3)timestamp
邮戳:
该类型可以保存年-月-日:
时:
分:
秒
它和datetime最大的区别是,当你update某条记录的时候,该列值,最自动更新
createtabletest14(namevarchar(64),salfloat,hiredate1timestamp,hiredate2datetime);
建议:
如果不知道该不该用timestamp,就不要用.
◆创建表综合案例
字段
属性
Id
整形
name
字符型
sex
字符型或bit型
brithday
日期型
Entry_date
日期型
job
字符型
Salary
小数型
resume
大文本型
createtableemp(
idint,
namevarchar(64),
sexchar
(2),
birthdaydate,
Entry_datedate,
jobvarchar(32),
salaryfloat,
resumetext)
◆修改表结构
--添加新的列
altertable表名add列名数据类型
--修改列(列的类型和大小)
altertable表名modify列名新的数据类型
--删除某列
altertable表名drop 列名
renametable原表名to新表名
altertable表名characterset字符集名;
altertableuserchangecolumnnameusernamevarchar(20);
案例:
•在上面员工表的基本上增加一个image列。
altertableempaddimageblob;
•修改job列,使其长度为60。
altertableempmodifyjobvarchar(60);
•删除sex列。
altertableempdropsex;
•表名改为user。
renametableemptouser;
•修改表的字符集为utf-8
altertableusercharactersetutf8;
•列名name修改为username
altertableuserchangecolumnnameusernamevarchar(30);
如何显示创建表的指令:
showcreatetable表名;
◆insert语句
基本语法:
insertinto表名[列名.....]values(值....);
●插入的数据应与字段的数据类型相同。
比如:
createtabletest15(namevarchar(64));
insertintotest15(name)values(‘aaa’);
insertintotest15(name)values(34);
createtabletest16(ageint);
insertintotest16(age)values(34);
insertintotest16(age)values(‘aaa’);(错)
insertintotest16(age)values(‘111’);(虽然ok,但是不是好的写法.)
●数据的大小应在列的规定范围内,例如:
不能将一个长度为80的字符串加入到长度为40的列中。
●在values中列出的数据位置必须与被加入的列的排列位置相对应。
createtabletest17(idint,namevarchar(64));
insertintotest17(id,name)values(3,’aaa’);
insertintotest17(name,id)values(’aaa’,3);
●字符和日期型数据应包含在单引号中。
●插入空值,不指定或insertintotablevalue(null)
◆update语法
基本语法:
update表名set列名=表达式...where条件
说明:
如果where后面没有条件,则相当于对整个表进行操作。
●UPDATE语法可以用新值更新原有表行中的各列。
●SET子句指示要修改哪些列和要给予哪些值。
●WHERE子句指定应更新哪些行。
如没有WHERE子句,则更新所有的行。
将所有员工薪水修改为5000元。
updateemployeesetsal=5000;
●将姓名为’zs’的员工薪水修改为3000元;
updateemployeesetsal=3000wherename=’zs’;
●将wu的薪水在原有基础上增加1000元
updateemployeesetsal=sa+1000wherename=’wu’;
◆delete语句
基本语法
delelefrom表名where条件;
注意:
●如果不使用where子句,将删除表中所有数据。
所有要小心使用.
●Delete语句不能删除某一列的值(可使用update)
●使用delete语句仅删除记录,不删除表本身。
如要删除表,使用droptable语句。
●同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
●删除表中数据也可使用TRUNCATETABLE语句,它和delete有所不同,参看mysql文档。
truncatetable表名,可以删除表的记录,速度快,但不能回滚..
在mysql中事务的特殊说明:
(1)mysql控制台是默认自动提交事务(dml)
(2)如果我们要在控制台使用事务,应该这样
●setautocommit=false;
●savepoint保存点
●//操作...
●rollbackto保存点.
◆select语句
基本语法
select列名....,列(可以运行)from表名where条件;
注意事项:
●Select指定查询哪些列的数据。
●column指定列名。
●*号代表查询所有列。
select*from表名;
●From指定查询哪张表。
●DISTINCT可选,指显示结果时,是否剔除重复数据
selectdistinct*from表名
●练习:
●查询表中所有学生的信息。
select*fromstudent;
●查询表中所有学生的姓名和对应的英语成绩。
selectname,englishfromstudent;
●过滤表中重复数据。
selectdistinct*from表名
●练习
●在所有学生分数上加10分特长分(即查询所有学生总分再加10分)。
selectenglish+math+chinese+10,namefromstudent;
●统计每个学生的总分。
●使用别名表示学生分数。
selectenglishas‘英语’,mathas数学,chinesefromstudent;
●使用where子句,进行过滤查询。
练习:
●查询姓名为wu的学生成绩
selectenglish,namefromstudentwherename=‘wu’;
●查询英语成绩大于90分的同学
select*fromstudentwhereenglish>90;
●查询总分大于200分的所有同学
select*fromstudentwhere(math+english+chinese)>200;
◆where子句如何使用
案例:
●查询英语分数在80-90之间的同学。
select*fromstudentwhereenglish>=80andenglish<=90;
●查询数学分数为89,90,91的同学
select*fromstudentwheremathin(89,90,91);
●查询所有姓李的学生成绩。
select*fromstudentwherenamelik‘李%’;
●查询数学分>80,语文分>80的同学。
select*fromstudentwherematn>80andchinese>80;
◆orderby子句
●练习:
●对数学成绩排序后输出。
selectname,mathfromstudentorderbymath;
●对总分排序后输出,然后再按从高到低的顺序输出
selectmath+english+chineseasallfen,namefromstudentorderbyallfen;
●对姓李的学生成绩排序输出
select(math+english+chinese)asallfen,namefromstudentwherenamelike‘李%’orderbyallfen;
◆count
◆练习:
●统计一个班级共有多少学生?
selectcount(*)fromstudent;
●统计数学成绩大于90的学生有多少个?
selectcount(*)fromstudentwheremath>90;
●统计总分大于250的人数有多少?
selectcount(*)fromstudentwhere(math+english+chinese)>250;
◆sum的用法
练习:
⏹统计一个班级数学总成绩?
selectsum(math)fromstudent;
⏹统计一个班级语文、英语、数学各科的总成绩
selectsum(math),sum(english),sum(chinese)fromstudent;
⏹统计一个班级语文、英语、数学的成绩总和
selectsum(math+english+chinese)fromstudent;
⏹统计一个班级语文成绩平均分
selectsum(chinese)/count(*)fromstudent;
◆avg的用法
◆练习:
⏹求一个班级数学平均分?
selectavg(math)fromstudent;
⏹求一个班级总分平均分
selectavg(math+english+chinese)fromstudent;
◆groupby用法
练习:
对订单表中商品归类后,显示每一类商品的总价
selectproduct,sum(price)fromordersgroupbyproduct;
◆having用法
练习:
查询购买了几类商品,并且每类总价大于100的商品
selectproduct,sum(price)fromordersgroupbyproducthavingsum(price)>100
◆日期和时间函数
CURRENT_DATE( )
当前日期
CURRENT_TIME( )
当前时间
CURRENT_TIMESTAMP()
当前时间戳
DATE(datetime)
返回datetime的日期部分
DATE_ADD(date2,INTERVALd_valued_type)
在date2中加上日期或时间
DATE_SUB(date2,INTERVALd_valued_type)
在date2上减去一个时间
DATEDIFF(date1,date2)
两个日期差(结果是天)
TIMEDIFF(date1,date2)
两个时间差(多少小时多少分钟多少秒)
NOW( )
当前时间
YEAR|Month|DATE(datetime)
年月日
案例:
selectcurrent_date()fromdual;得到当前日期
selectcurrent_time()fromdual;得到请求时间;
date_add()date_sub()的用法
说:
有一个留言表
createtablemessage(idint,titlevarchar(64),publishdatedatetime);
请查询出,两个小时内,发布的消息:
select*frommessagewheredate_add(publishdate,interval2hour)>=now();
特别说明
date_add(日期/date/datetime/timestamp,interval数type)
type可以使用如下值:
字符函数:
,常用函数一览图:
CHARSET(str)
返回字串字符集
CONCAT(string2 [,...])
连接字串
INSTR(string,substring)
返回substring在string中出现的位置,没有返回0
UCASE(string2)
转换成大写
LCASE(string2)
转换成小写
LEFT(string2,length)
从string2中的左边起取length个字符
LENGTH(string)
string长度
REPLACE(str,search_str,replace_str)
在str中用replace_str替换search_str
STRCMP(string1,string2)
逐字符比较两字串大小,
SUBSTRING(str,position [,length])
从str的position开始,取length个字符
LTRIM(string2)RTRIM(string2)trim
去除前端空格或后端空格
把ename列的smiTh第一个字母大写,其它全部小写,怎么办?
selectUCASE(SUBSTRING(LCASE(‘smiTh’),1,1))fromdual;
//首先把‘smiTh’的首字母取出,转成大写
ucase(substring(‘smiTh’,1,1))
//把‘smiTh’去掉首字母后,余下的部分取出,//转成小写
lcase(substring(‘smiTh’,2,length(‘smiTh’)-1))
//最后拼接
select
concat(ucase(substring(‘smiTh’,1,1)),lcase(substring(‘smiTh’,2,length(‘smiTh’)-1)))fromdual;
结果:
selectconcat(lcase(substring('smiTh',1,1)),ucase(substring('smiTh',2,length('smiTh')-1)))fromdual;
◆数学函数
!
!
!
◆mysql的常见约束
1primarykey(主键)
特点:
主键是用于唯一标识一条记录的约束,一张表,最多只能有一个主键,主键不能为null,也不能重复
createtableuser1(idintprimarykey,namevarchar(32));
2auto_increment
可以自增长.
举例:
createtableuser2(idintprimarykeyauto_increment,namevarchar(32));
3unique(唯一)
特点:
表的某列的值,不能重复,可以为null(可以有多个null),一张表中可以有多个unique.
createtableuser4(idintunique,namevarchar(32));
4notnull(非空)
mysql的表的列,默认情况下可以为null,如果不允许某列为空,则可使用notnull说明
createtableuser5(idintprimarykey,namevarchar(32)notnull);
5外键foreignkey
从理论上说明,我们先建立主表,再建从表
--部门表
createtabledept(idintprimarykey,
namevarchar(64));
insertintodeptvalues(1,’财务部’);
--雇员表
createtableemp(idintprimarykey,
namevarchar(32),
deptidintreferencesdept(id));
上面的建立外键的写法是错误的。
应该这样.(表级定义)
createtableemp(idintprimarykey,
nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jdbc mysql