MySql语法基础

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 指定的码表; 

约束 
给已经创建的表增加约束
    alter table 表名 add 约束 (列名)
给已经创建的表删除primary key约束
    alter table 表名 drop 约束
                        

 4)查

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

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

 1)添加

格式:
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

通过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 条件;
注意:如果您省略了 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. 区间(范围)运算符   这些值可以是数值、文本或者日期。  不在范围内的在bettween前加 not                                                                                                                            
		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():		//获取某一列的和.   
mid():          //提取字符   MID(column_name,start[起始位置,length])      

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                                                                                                                                    

8、创建索引

创建索引
create index index_name on table_name (cloumn_name)
创建唯一索引
create unique index index_name on table_name (cloumn_name)
撤销索引
alter table table_name drop index index_name
drop index [index_name] on table_name
添加索引
alter table table_name add index index_name (cloumn_name)

9、数据类型

1)数值类型

2)日期类型

3)字符串类型

10、sql的分类

1、DDL语句 (数据库定义语言)  对数据库 表 列 进行操作
查看数据库:show database;
创建数据库 create database 数据库名;
          create database 数据库名 character set 需要使用的编码;
查询创建数据库语句:show create database 数据库名;
删除数据库 drop database 需要删除的数据库名;
查看当前正在使用的数据库 select database();
使用数据库: use 数据库名


创建表: creat table 表名(字段名 类型(长度) [约束],字段名 类型(长度) [约束]..);
查看表: show tables;
查看创建表的语句: show creat table 表名;
查看表结构: desc 表名;
删除表: drop table 表名;
向表中添加字段: alter table 表名 add 字段名 类型 [约束];
修改 对字段进行修改 但不修改字段名: alter table 表名 modify 字段名 类型 [约束];
改变 对字段进行修改 可以修改字段名: alter table 表名 change 旧字段名 新字段名 类型 [约束];
删除表中的列: alter table 表名 字段;
修改表名: rename table 旧表名 to 新表名;



2、DML语句(数据库操作语言)   对数据库里的数据进行操作  增 删 改

insert into 表名(字段名,字段名..) values(值,值,..);
insert into 表名 values(值,值,..);
update 表名 set 字段=值,字段=值..where 条件 ;
delete from 表名 where 条件 ;

truncate delete区别: 
    delete 删除数据时 自动增长不会清除
    truncate删除数据时 清除自动增长 重写计数


3、DCL语句(数据库控制语言)   用于设置用户权限和控制事务语句
4、DQL语句(数据库查询语言)   select.......
原文地址:https://www.cnblogs.com/haojia/p/12386204.html