数据库(DataBase)DB:
指长期保存在计算机的存储设备上,按照一定的规则组织起来,
可以被各种用户或是应用共享的数据集合。
数据库管理系统(DBMS):
指一种操作和管理数据库的大型应用软件,用于建立,使用和维护数据库。
对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中的数据。
数据库软件 就是指 数据库管理系统,数据库 是通过数据库管理系统创建和操作。
数据库:存储,维护和管理数据的集合。
数据库的安装与配置
停止mysql服务:net stop mysql
启动服务:net start mysql
访问数据库:mysql -uroot -p
修改数据库密码:use mysql;update user set password=password(‘abc’) where User=‘root’;
SQL(Structure Query Language):是指结构化查询语言
SQL的分类:
1,DDL语言:数据定义语言,用来定义数据库对象:库,表,列;
2,DML语言:数据操作语言,用来定义数据库的记录(数据);
3,DQL语言:数据查询语言,用来查询记录(数据);
4,DCL语言:数据控制语言,用来定义访问的权限和安全级别。
DDL:操作数据库,表,列等
使用关键字:create, alter,drop
操作数据库:
创建
Create database 数据库名称(小写);
Create database mydb1 character set 字符集(gbk/utf-8);
查询
查看当前数据库服务其中所有的数据库 show databases;
查看前面创建的mydb1数据库的定义信息 show create database mydb1;
删除前面创建的mydb1数据库:Drop database mydb1;
查询当前正在使用的数据库:Select database( );
修改
alter database mydb1 character set utf-8;
删除
Drop database mydb1;
操作数据库表
语法:
create table 表名称(
字段1 字段类型,
字段2 字段类型,
字段3 字段类型,
......
);
常用数据库类型:
int 整型;
double 浮点型; double(5,2)(最多五位,小数点后面是两位)
char 固定长度字符串类型;char(10)‘aaa ’占十位
varchar 可变长度字符串类型;varchar(10)‘aaa’占三位
text 字符串类型;
blob 字节类型;
date 日期类型;格式为:yyyy-mm-dd;
time 时间类型;格式为:hh:mm:ss;
timestamp 时间戳类型;yyyy-mm-dd hh:mm:ss 会自动赋值
datetime 日期时间类型;yyyy-mm-dd hh:mm:ss
添加一个列 class
alter table stu add class varchar(10);
修改class列
alter table stu modify class varchar(60);
删除class列,一次只能删除一列
alter table stu drop class;
修改表的名称
rename table stu to user;
查看标的创建的细节
show create table user;
修改列名称
alter table user change name username varchar(10);
查看表
desc 表名称;
删除表
drop table 表名称;
DML:数据操纵语言(核心重点)
查询表中所有的数据:select * from 表名;
DML 是对表中的数据进行 增 删 改 的操作。不能与DDL混淆了。
insert update delete
小知识点:
在mysql中,字符串类型和日期类型 都要使用单引号 括起来。
空值:null
插入操作:insert
语法:insert into 表名称(列名1,列名2,…)values(列值1,列值2…);
注意: 列名 与列值的类型、个数、顺序 要一一对应。
可以把列表当做js中的形参,把列值当做实参;
实参的长度 不能超出列定义时的长度
如果插入空值,请使用null;
插入的日期和字符一样,都要使用引号括起来
练习:创建一个员工表 emp
2,修改操作 update
语法:update 表名 set 列名1=列值1,列名2=列值2,...... where 列名=列值;
练习:
将所有员工的薪水 修改为:5000元
问题:
Error Code: 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
修改安全设置:SET SQL_SAFE_UPDATES = 0;
delete 删除表中的数据,表结构还在,删除后的数据可以找回;
truncate 删除是把表直接drop掉,然后再创建一个同样的新表。
删除后的数据不能找回,执行速度比delete快。
DQL 数据查询操作(重点)
数据库执行DQL语句 不会对数据进行改变,而是让数据发送结果集 给客户端。
查询返回的结果集是一张虚拟表
查询关键字 select
语法:select 列名 from 表名[where group by having order by]
语法:
select selection_list /*要查询的列名称*/
from table_list /*要查询的表名称*/
where condition /*条件*/
group by grouping_conlumns /*对结果进行分组*/
having conition /*分组后的行条件*/
order by sorting_columns /*对结果排序*/
limit offset_start,row_count /*分页查询:结果限定 例:0,10*/
条件查询 where
1,= != <> < <= > >=
2,between... and...
3,in
4,is Null
5,and
6,or
7,not
—in关键字 查询指定字段的多个列值
—not in
—where age IS Null;
—where age between 20 and 40;// where age>=20 and age<=40
模糊查询 like
通配符: _ 任意一个字母
%任意0~n个字母
‘张%’
字段控制查询
1,去除重复记录 select distinct sal from emp;
2,查看月薪与佣金之和 select *,sal+ifnull(comm,0) as 最后拿到的 from emp;
3,as 关键字 ---->给列添加别名// as 可省略
4,select * from stu order by age asc;—>asc为升序/desc为降序
聚合函数:sum(求和) avg(平均值) max(最大值) min(最小值) count(统计有多少数量)
group by 分组查询
作业:有没有sql的函数 可以实现 四舍五入/向下/向上取整/ 保留小数点后的位数???
round()函数
select cast(3.14459 asnumeric(18,2))
结果为:3.14
selectconvert(decimal(18, 2), 3.14559)
结果为:3.15
select cast(3.14159 as decimal(10, 2))
结果为:3.14
having和where的区别:
1,having是在分组后对数据进行过滤;
where 是在分组前对数据进行过滤。
2,having 后面可以使用分组函数(统计函数)
where 后面不可以使用分组函数。
分页查询 limit
是指用来限定查询结果的起始行以及总行数
数据的完整性
作用:保证用户输入的数据保存到数据库中是正确的。
保证数据的完整性 = 在创建表时给表中添加的约束
完整性的分类:
一、实体完整性:
实体:表中的一行(一条记录)代表一个实体(entity)
标识每一行数据不重复。
约束的类型:主键约束(primary key)
唯一约束(unique)
自动增长列(auto_increment)
主键约束:注意 每个表中 要有一个主键
特点:数据唯一,且不能为null
第一种方式:create table student(
id int primary key,
name varchar(50)
);
第二种方式:create table student(
id int,
name varchar(50),
primary key(id)
);
联合主键
create table student(
class varchar(50),
id int,
name varchar(50),
primary key(class,id)
);
第三种方式:create table student(
id int,
name varchar(50),
);
alter table student add primary key(id);
唯一约束 unique
特点:数据不能重复
create table teacher(
id int primary key,
name varchar(50)unique
);
研究数据库中剩余的约束???
mysql 中的自增:自动增长列(auto_increment)
create table animal(
id int primary key auto_increment,
name varchar(50)
)
sqlserver 自增:indentity
oracle sequence
二、域完整性:
数据类型 非空约束 默认约束(default) check约束(mysql不支持)
数值类型
日期类型
字符串类型
文本类型
非空约束:not null
create table dog(
id int primary key auto_increment,
name varchar(50)not null,
sex char(1)
);
默认约束:default
create table cat(
id int primary key auto_increment,
name varchar(50)not null,
address varchar default '西安'
);
三、引用完整性:
多表联查(外键)
面试题:解决SQL 注入???
(1)
delect from tabname;
此时,如果想提及,则执行:
commit;
如果想回滚:
rollback;
(2)
直接限制mysql删除
启动MySQL的时候加上参数 -U
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。
(3)
存储过程中可以通过在delete语句执行的前后分别select count(*) from tablename 查询出当前表的记录条数,然后相互相减就可以得到delete语句删除的条数。
(4)
SELECT * INTO BackupTableName FROM TableName
可以快速把表格內容複製一份保留下來,更新後可用來比對或修復数据
(5)
1 连接到被删除数据库的Db
打开log explorer 选择 “file”->“attach log file”->选择服务器和登陆方式->“connect”->选择"数据库"->“attach”
2 查看日志
在左面操作项目的对话框中选择"browse"项目->“view log”->就可以看到当前的Log记录了
3 恢复数据
右键某一条log记录,选择"undo transation"->“选择保存文件名和路径”->然后打开该文件到查询分析器里执行
T-sql代码就可以了
例如: 如果log是delete table where …的话,生成的文件代码就是insert table …