DQL 数据库查询语句 数据库的约束 备份与还原 多表的设计与实现 D190411

DQL 数据库查询语句 数据库的约束 备份与还原 多表的设计与实现

DataQuertyLanguage DQL(数据查询语言)

简单查询

查询所有列:  select * from 表名;

查询指定列:  select 字段名1,字段名2... from 表名; 

别名查询:  select 字段名1 as 别名, 字段名2 as 别名... from 表名 as 表别名; 

清除重复值:  select distinct 字段名 from 表名;

查询结果参与运算: select 列名1 + 固定值 from 表名;(参数运算的字段必须为数值型)

条件查询

格式:select * from 表名 where 条件;

比较运算符

	> 大于 

	< 小于 

	<= 小于等于 

	>= 大于等于 

	= 等于 

	<> 、 != 不等于

逻辑运算符

and(&&) 多个条件同时满足 

or(||) 多个条件其中一个满足 

not(!) 不满足

数据库提供的方式:
between 值1 and 值2   类似与的关系
in(字段1,字段2)	    类似或的关系

模糊查询 like

like
%  : 模糊多位
_   : 模糊一位		

排序 order by 字段

select * from 表名 where 条件 order by 字段名称 [desc | asc] , 字段名 [desc | asc] ;
asc(默认) : 升序   desc : 降序

聚合函数

count() : 计数
sum() : 求和
max() : 求最大值
min() : 求最小值
avg() : 求平均值

分组 group by 字段

select * from 表名 where 条件 group by 分组字段 [having 分组条件 ] ;

having与where的区别(面试题)
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数

分页

limit
select * from 表名 limit 起始数,查询几条;

查询顺序

select distinct *或者字段或者聚合 from 表名 where 条件 and 条件 或 btween 条件 或 or 条件  或 in 条件 group by 字段 having 条件 order by 字段 asc/desc limit a,b

数据库约束

约束:对表中的数据可以进行进一步的限制,来保证数据的唯一性,正确性和完整性

约束种类:

单表约束

PRIMARY KEY : 主键约束    代表该字段的数据不能为空且不可重复

NOT NULL : 非空  代表该字段的数据不能为空

UNIQUE : 唯一   代表该字段的数据不能重复

多表约束

 外键约束

主键约束 primary key

一个表中都得需要主键约束 用来标注一条记录的唯一性

特征:

主键字段值唯一不可重复

主键字段值不能包含NULL值

一个表中只能有一个主键

实现方式:

添加主键

方式一 在创建表时,添加约束 
		格式
			create table 表名 ( 
    			字段名称1 字段类型 约束, 	
    			字段名称2 字段类型 约束 
    		);

方式二 在创建表时,结尾内添加约束
		格式1:单一主键
			create table 表名 (
            	字段名称1 字段类型, 	
            	字段名称2 字段类型, 	
            	primary key(字段名称1)  
        	);

		格式2:联合主键  特点:必须保证2个字段的值不能为空且唯一
			create table 表名 (
            	字段名称1 字段类型, 	
            	字段名称2 字段类型, 	
            	primary key(字段名称,字段名称1)  
        	);

在已有表中添加主键
		alter table 表名 add primary key(字段名称);

删除主键

alert table 表名 drop PRIMARY KEY;

主键自增

自己去维护主键过于麻烦,可以让数据库帮助我们去维护

auto_increment

默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法  

ALTER TABLE 表名 AUTO_INCREMENT=起始值;

唯一约束: unique

特征

被修饰的字段唯一,不可重复

注意: 一个表中可以有多个被unique修饰的字段,但对null不起作用

实现方式

	方式1: 创建表时在字段后添加 
		create table 表名 ( 
    		字段名称1 字段类型 约束, 
    		字段名称2 字段类型 约束 
    	);

	方式2: 创建表时结尾添加
		create table 表名 ( 
        	字段名称1 字段类型, 	
        	字段名称2 字段类型, 	
        	unique(字段名1) 
    	);
	
		特点:保证2个字段同时满足
		create table 表名 ( 
        	字段名称1 字段类型, 	
        	字段名称2 字段类型, 	
        	unique(字段名1,字段名2) 
    	);

	方式3: 创建完表后,通过修改表添加
		alter table 表名 add unique(字段名1,字段名2);

删除:
 alter table 表名 drop index 约束名称;

非空约束: not null

特征:

被修饰的字段不可为空

实现方式

直接在字段后面添加即可

删除:

alter table 表名 change 旧字段名称 新字段名称 类型 约束;

default : 默认值

数据备份与还原

命令方式

只能备份库中的表和数据

备份数据

	mysqldump -u用户名 -p密码 数据库名 > 文件的路径

	把指定数据库的表和表中的数据给备份了,没备份库

还原数据

	还原的时候需要先登录MySQL,并使用对应的数据库

	 source 导入文件的路径;

图形化界面方式

        备份整个数据库

多表的设计与实现

现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等

那么我们在数据库设计与之对应的表时,也应该体现出表与表之间的关系

数据库的表关系设计有三种:

1. 一对一(了解)
2. 一对多
3. 多对多

一对多

疑问:我们在数据库中有一张分类表和一张商品表,这两张表之间可不可以有关系?

如果有关系,在数据库里面,我们如何去创建这种关系?

实现:分类表和商品表

称一的一方为主表 称多的一方为从表

原则:在从表中(多的一方)创建一个字段为外键,然后让这个外键指向主表的(一的一方)主键

数据库提供了外键约束的语法来实现指向关系:

关系建立: alter table 从表 add constraint [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键)

关系删除: alter table 从表 drop foreign key 外键名称

外键约束的作用:能够保证数据的完整性和有效性

特征:从表中如果关联了主表的数据则强制主表的数据不能删除,保证数据的完整性和有效性

多对多

实现:学生表和课程表

原则:需要在外部创建一张中间表

这个中间表至少需要2个字段,然后让这2个字段分别作为外键只向各自表的主键

本质上就是两个一对多,添加中间表

一对一(了解)

人和身份证号,企业和法人

实现方式,一般都写在一张表中

如果非要拆分成两张表,可以有2种方式来建立它们之间的一对一关系

实现:

1 让双方的主键作为外键一一对应

2 在任意一方创建一个字段当成是外键指向另一方的主键,但是这个外键必须唯一

外键约束

添加外键约束

方式1: 创建表时添加

CREATE TABLE product(

	pid INT PRIMARY KEY AUTO_INCREMENT,

	pname varhcar(20),

	c_id INT,

	CONSTRAINT  foreign key(外键字段) references 主表名称(主键字段)

);	

方式2: 在已有表上添加外键约束

	给从表的外键字段添加外键约束

	alter table 从表 add [constraint 名称] foreign key(外键字段) references 主表名称(主键字段)

方式3:可视化图形方式(推荐)

	在架构设计器中,直接指定外键拖向主键即可,简单方便快捷

删除外键

方式一和方式二:ALTER TABLE 从表 drop foreign key 外键名称;

方式三:在架构设计器中,选中指向关系右键删除即可

你可能感兴趣的:(数据库,数据库,学习)