MySQL(32)

数据库(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 …

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值