数据库简单语句:注释(开头--)
1》创建库
create database LiangshanHeros
表和列的命名规则(SqlServer 2000):
- 必须以字母,下划线,或者汉字开头(最好是以字母开头);
- 长度不能超过128个字符;
- 不能使用系统保留字;
- 只能使用如下字符A-Z,a-z,0-9,$,#,_等;
2》使用数据库
use LiangshanHeros
3》创建表
create table hero (heroId int primary key, --排名 heroName varchar(50),--名字 heroNickName varchar(50),--外号 sex char(2) )
注:如果有外键,则需要再类型后面加上 foreign key reference 另一个表名(另一个表的主键)
复合主键的例子:
create table test2 (testId int , testName varchar(30), testAge int, primary key(testId, testName) --指明复合主键 )
维护数据的完整性--约束:
- 1,unique:约束该列值是不能重复的,但是可以是NULL(不能又多个NULL值,否则违反不可重复)
一个表最多只能有一个主键,但是可以有多个unique约束。
- 2,check的举例:
create table test3 (testId int , testAge int check(testAge>0 and testAge<150) )
4》插入数据
insert into hero values(1, '宋江', '及时雨', '男')
插入数据的语法:insert into 表名(字段列表) values(值列表)
5》查询
select * from hero where heroId>2
6》修改
update hero set sex='女' where heroId=1
更新数据的语法;update 表名 set 字段名1=?,字段名2=? where 条件
7》删除记录
delete from hero where sex='女'
数据库复杂查询语句
1》查询指定列:select 字段1,字段2 from 表名 where 条件;
2》取消重复行
select distinct 字段列表 from 表名 where 条件;3》算术表达式:
处理null值函数:isnull(字段,0),如果该字段为NULL,则返回0,如果不为NULL,则返回字段值;
between 1 and 100:范围在[1,100]区间
4》like(模糊查询):%代表0到多个字符; _代表单个字符;
5》in(批量查询):where 字段 in (x,y,z ……)
6》order by
select 字段 from 表 order by 待排序的字段1 asc(升序)/desc(降序),待排序字段2 asc/desc7》分页查询:select top XX 字段 from ……
注:XX指显示从1~XX 行的结果
例:如果想取出从x到y条数据,则应使用嵌套查询。
select top y-x+1 * from 表A where 字段2 not in (select top x-1 字段 from 表A order by 字段2) order by 字段2分析:排除前x-1条数据,从x条开始挑出y-x+1条数据,即可。
注意,最后的order by 不能省略,否则会出错。
8》聚合函数:max,min,avg,sum,count;
注:聚合不能出现在where子句中,除非聚合位于Having子句,或者子查询中……
9》SQL语句优化的原则:尽可能把最好的条件写在最右面。最好的条件指能使结果最好的的条件;
10》统计函数:count,如果统计行数,一般写select count(*) from 表名;
11》group by:用于对查询的结果分组统计
12》having:用于限制分组显示结果。往往和group by 结合使用,可以对分组结果进行再次筛选。
总结:按这样的顺序写SQL语句:group by,having,order by;
13》多表查询:
select 字段1,字段2,a.字段3 from 表A a,表B b where a.字段X=b.字段Y其中,a和b分别是表A和B的别名, 一旦用别名,最好都用别名。
14》 单行子查询(即查询结果是单行数据)用=,多行子查询用in; 15》匹配字段为空的条件时,不能用=null,而是用 is null,否则条件不满足。 SqlServer 2000支持的数据类型 12,支持的数据类型:
1》字符型:
char和varchar都是非unicode编码;
nchar和nvarchar都是unicode编码;
注:一般带有汉字的字段类型用nvarchar,全英文或符号的用varchar
2》数字型:
bit:0或1
int:
bigint:
float:存放小数时,需要指定尾数的位数,不推荐使用
numeric:存放小数,需要指定小数的总位数,和尾数的位数,比较灵活;
3》日期类型:
datatime:表示日期,毫秒级;
timestamp:时间戳;
4》图片
image:保存图片,但是很少用。一般的做法是保存图片的路径,根据路径到图片服务器(或图床)。因此一般图片都不放在数据库中;在图片有安全要求时,可以考虑放入数据库,且图片不能太大,否则数据库负载较重。
5》视频
binary:跟图片的道理雷同,很少用。
SqlServer 2000 数据库的备份和恢复
1,使用企业管理器完成备份和恢复:分离和附加数据库;备份和还原。 2,使用查询分析器完成备份和恢复(即命令行):--备份
backup database 数据库名字 to disk='F:\\backup.bak'
--删除数据库
drop database 数据库名字
--还原
restore database 你的数据库名字 from disk='备份文件路径'
注:有时可能不需要备份整个数据库,只需要备份表,自己在网上搜索。
MySql:
1,命令行连接MySql数据库:mysql -u 用户名 -p密码注意:-p与密码之间没有空格。
2,MySql的基本语法
1》show databases;
2》use 数据库名;
3》show tables;
4》create database [if not exists] 数据库名 [character set utf8];
注:查看之前创建数据库的指令:
show create database 数据库名;
5》drop database 数据库名;
6》备份数据库:mysqldump -u 用户名 -p密码 数据库名 > 文件名.sql
注:该指令是在DOS下执行的,不能在Mysql命令行控制台使用
7》恢复数据库:source 文件名.sql
注:要先创建一个数据库,名字可以自拟,并进入该数据库。该指令是在Mysql命令行控制台使用的。
Java操作SqlServer
1,JDBC驱动的分类:jdbc-odbc桥连;本地协议纯Java驱动;网络协议纯java驱动;本地API。(前两个用的比较多)2,jdbc的不足:不能更好的实现跨数据库操作,于是诞生了Hibernate项目。Hibernate是对jdbc的再封装,实现了对数据库操作更宽泛的统一和更好的移植性。
3,Statement和PreparedStatement的区别:
都可以执行Sql语句,但后者有预编译功能,更适合多次重复操作,或者批量操作,能够提高执行效率;
其次,后者可以在程序中使用?赋 值,能有效的防止SQL注入漏洞;
--SQL注入漏洞例子:
。。。。
4,如果使用jdbc-odbc,不需要引入任何包,如果使用jdbc方式,需要引入jar包。