MySql语法基础

给你一囗甜甜゛ 提交于 2019-12-02 09:27:07

1、创建和使用数据库(DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.)

 1) 查看当前数据库

show databases;

 2)创建数据库

create database 数据库名称;

 3)使用和切换数据库

use 数据库名称

 4)删除数据库

drop database 数据库名称;

2、对表的操作

 1)增

创建数据表

create table 数据表名(
 列名  数据类型 [约束],
 列名  数据类型 [约束],
 。。。
);
约束
	作用: 用来保证数据的完整性和安全性.
	分类: 
	单表约束:
	主键约束: primary key		//auto_increment(自动增长)
	唯一约束: unique
	非空约束: not null
多表约束:	
	外键约束: foreign key

 2)删

drop table 数据表名;

 3)改

给表增加一列字段                                                         
	alter table 表名 add 列名 数据类型 约束;                     
修改某列字段的约束和类型                                             
	alter table 表名 modify 列名 数据类型 约束;                
修改某列字段的名字,约束,类型                                        
	alter table 表名 change 旧列名 新列名 数据类型 约束;   
删除指定的列                                                               
	alter table 表名 drop 列名;                                       
修改表名                                                                     
	rename table 旧表名 to 新表名;                                 
修改表的码表                                                               
	alter table 表名 character set 指定的码表;                   
	alter table 表名 charset 指定的码表;                           

 4)查

查询所有的数据表        
	show tables;          
                                
查询指定数据表(表结构)
	desc 数据表名;        

3、SQL语句操作表数据(DML: 数据操作语言. 主要指的是操作数据, 增删改.                //update, insert, delete)

 1)添加

通过insert语句实现.                                                            
A: 创建表.                                                                         
	create table users(                                                        
		uid int primary key auto_increment,                            
		uname varchar(20),                                                   
		age int                                                                     
	);                                                                                 
B: 通过SQL语句插入数据.                                                    
	insert into users values(null,'王丽坤', 23), (null,'刘亦菲',31); 

 2)删

delete from 数据表名 where 条件;		//删除表数据, 不会重置主键ID. 
truncate table 数据表名;				//删除表数据, 会重置主键ID.        

 3)改

update 数据表名 set 列名1=值,列名2=值,列名3=值 where 条件;

 4)查(DQL: 数据查询语言. 主要指的是操作数据: 查询.)

select [distinct] 列名1, 列名2 as '别名',列名3... from 表名 where 分组前的条件筛选                                     
group by 要分组的列 having 分组后的条件筛选 order by 要排序的列 [asc/desc] limit 起始索引, 结束索引;     



A. 最基本的查询:                                                                                                                                         
	select * from 数据表名;						//全列名                                                                                        
	select 列名1,列名2,列名3 from 数据表名;		//指定列名                                                                                 
                                                                                                                                                               
B. 带别名的查询:                                                                                                                                         
	关键字 as                                                                                                                                              
                                                                                                                                                               
C. 带条件的查询:                                                                                                                                         
	a. 条件运算符                                                                                                                                         
		>,<, >=, <=, =, !=(<>)                                                                                                                      
	b. 区间(范围)运算符                                                                                                                                 
		between 值1  and 值2;                                                                                                                       
	c. 逻辑运算符                                                                                                                                         
		and or not                                                                                                                                        
	d. 固定值的查询                                                                                                                                      
		in (值1,值2,值3)                                                                                                                                  
	e. 模糊查询                                                                                                                                            
		like 条件.                                                                                                                                           
		//一般会结合占位符使用.                                                                                                                      
		//_占一个位置  %占多个位置                                                                                                                 
		                                                                                                                                                       
D. 如果表中有重复数据, 可以将其去重:  distinct		                                                                                           
	select distinct 字段名称1,字段名称2... from  表名;                                                                                        
	                                                                                                                                                           
E. 排序操作: order by                                                                                                                                 
	格式:                                                                                                                                                     
		SELECT * 字段列表 FROM 表名 ORDER BY 排序字段1 [排序方式],排序字段2 [排序方式];                                
                                                                                                                                                               
	排序方式:                                                                                                                                               
		desc(降序) 和 asc(升序), 默认为升序排序                                                                                                
                                                                                                                                                               
	如果是多个字段排序, 会先按照第一个字段进行排序,如果第一个字段有相同的, 然后在按照第二个字段排序                
                                                                                                                                                               
F. 日期计算                                                                                                                                                
	select year('1988-01-01');		//获取年份, 即: 打印结果是为 1988                                                                
                                                                                                                                                               
                                                                                                                                                               
G. is null和 is not null值                                                                                                                              
	格式:                                                                                                                                                     
		字段 is null   		//筛选这个字段为null的数据                                                                                          
		字段 is not null 		//筛选这个字段不为null的数据                                                                                   

4、聚合函数

count();	//一般用于获取数据表的行数.
max();		//获取某一列的最大值.     
min();		//获取每一列的最小值.     
avg();		//获取某一列的平均值.     
sum():		//获取某一列的和.           

5、SQL语言分类

DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.                                         
		//create, drop, alter                                                                                          
DML: 数据操作语言. 主要指的是操作数据, 增删改.				//update, insert, delete                                                                                                    	                                                                                                                           
DCL: 数据控制语言. 主要指的是 创建用户, 设置权限, 设置安全级别.		//create,  grant         
DQL: 数据查询语言. 主要指的是操作数据: 查询.                                                                
	//select, from, where                                                                                             

6、数据库的备份和还原

1) 备份命令                                                                             
	格式:                                                                                  
		mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径         
		//由于mysqldump命令不是sql命令,需要在dos窗口下使用。  
	示例:                                                                                  
		mysqldump -uroot -p123456 test01 >/root/test01.sql       
		//其中: test01是数据库的名字                                             
                                                                                             
2) 恢复命令                                                                             
	//注意: 恢复数据库,需要手动的先创建数据库:                         
                                                                                             
	格式:                                                                                  
		create database test01;		//创建数据库                           
		mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径                 
		                                                                                     
	示例:                                                                                  
		mysql -uroot -p123456 test01 < /root/test01.sql   
3) 注意:                                                                                                                  
	在备份数据的时候,数据库不会被删除。可以手动删除数据库。同时在恢复数据的时候,    
	不会自动的给我们创建数据库,仅仅只会恢复数据库中的表和表中的数据。                      
	                                                                                                                         
4) 备份数据表.		//备份数据表的时候, 只会备份结构(字段)和数据, 不会备份主键(约束).         
	备份表不存在:                                                                                                      
		create table 数据表名 select * from 要备份的数据表名;                                         
	                                                                                                                         
	备份表存在:                                                                                                         
		insert into 数据表名 select * from 要备份的数据表名;                                                        

7、多表查询

交叉查询:		//理解, 没有什么特殊意义.                                                                                                                    
	格式:                                                                                                                                                                
		select * from 表A,表B;			//查询结果是两张表的: 笛卡尔积.                                                                               
										//笛卡尔积指的是两张表(总条数)的乘积:  表A的总条数 * 表B的总条数                                      
                                                                                                                                                                           
连接查询:                                                                                                                                                              
	内连接查询:	inner join                                                                                                                                         
		显示内连接:                                                                                                                                                   
			select * from 表A inner join 表B on 条件;                                                                                                     
			//select * from 表A join 表B on 条件;                                                                                                           
			                                                                                                                                                               
		隐式内连接:                                                                                                                                                   
			select * from 表A,表B where 条件;                                                                                                               
	                                                                                                                                                                       
	外连接查询: outer join                                                                                                                                        
		左外连接查询:                                                                                                                                                
			select * from 表A left outer join 表B on 条件;                                                                                               
			//select * from 表A left join 表B on 条件;                                                                                                     
		                                                                                                                                                                   
		右外连接查询:                                                                                                                                                
			select * from 表A right outer join 表B on 条件;                                                                                             
			//select * from 表A right join 表B on 条件;                                                                                                   
                                                                                                                                                                           
子查询:                                                                                                                                                                 
	概述:                                                                                                                                                                
		一个SQL语句的条件需要依赖另一个SQL语句的查询结果.                                                                                       
		                                                                                                                                                                   
	常用关键词的用法:                                                                                                                                              
		in: 只要满足其中一个就行.                                                                                                                                
			//回忆:age=23 or age=24? 等价于 age in (23,24)                                                                                       
			//in 表示条件应该是在多个列值中。                                                                                                               
			//in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。                         
			                                                                                                                                                               
		exists:	//表示存在,当子查询的结果存在,就会显示主查询中的所有数据。                                                             
			select * from A where exists(select A_ID from B);	                                                                                       
			                                                                                                                                                               
		union和union  all的使用法		//要求拼接双方的表结构一致.                                                                               
			UNION语句:                                                                                                                                             
				用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)                                                                 
				//select * from A  union   select * from B;                                                                                               
			                                                                                                                                                               
			UNION ALL 语句:                                                                                                                                      
				用于将不同表中相同列中查询的数据展示出来;(包括重复数据)                                                                    
				                                                                                                                                                           
		case when语句:                                                                                                                                             
			格式:                                                                                                                                                      
				CASE sex                                                                                                                                             
				WHEN '1' THEN '男'                                                                                                                              
				WHEN '2' THEN '女'                                                                                                                              
				ELSE '其他' END                                                                                                                                    

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!