2021-11-30  2021-11-30    3304 字   7 分钟

SQL命令

分类

  1. DDL 数据定义语言 数据库的创建和删除、数据表的创建、删除和修改 关键字:create / drop / alter
  2. DML 数据操作语言 数据库表中数据的增删改
  3. DQL 数据查询语言 数据表中数据的查询
  4. DCL 数据控制语言 创建用户分配权限
  5. 事务

DDL

1. DDL  数据定义语言数据库的创建和删除、数据表的创建、删除和修改
    · 库操作
    	1. 查看所有库:show databases
     	2. 创建数据库:create database if not exists 库名;
	    3. 删除数据库:drop database if exists 库名;
	    4. 查看数据库命令:show create database 库名;
	· 表操作
         1. 创建表:
        	create table if not exists 表名(
            	列名1 类型 【约束】,
                 列名2 类型 【约束】,
                 ......
            
             )
          2. 查看表结构:desc 表名;
		3. 删除表:drop table if exists 表名;
		4. 表修改
            	 修改表名:alter table 原表名 rename 新表名
            	 修改列表:alter table 表名 change column 原列名 新列名 类型 【约束】;
			   修改列的类型:alter table 表名 modify column 列名 新类型 【约束】;
                  添加列:alter table 表名 add column】列名 类型 【约束】;
			   删除列:alter table 表名 drop column】列名;


		5. 约束操作
			 主键删除
            	alter table 表名 drop primary key; # 表级删除
			  alter table 表名 modify column 字段名 类型 ; # 列级删除
                  
                主键添加
                  alter table 表名 add primary key(列名);# 表级添加
			   alter table 表名 modify column 字段名 类型 primary key # 列级添加
                  
                非空删除
                  alter table 表名 modify column 列名 类型 null;

			 非空添加
                  alter table 表名 modify column 列名 类型 not null;

			 默认删除
                 alter table 表名 modify column 列名 类型; 

			 默认添加
                alter table 表名 modify column 列名 类型 default '';
			
			 唯一删除
                alter table 表名 drop index 列名;

			 唯一添加
                alter table 表名 add unique(列名); # 表级添加
                alter table 表名 modify column 列名 类型 unique; # 列级添加
                    
               外键添加
                    ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY(从表字段) REFERENCES 主表(主表主键);

			 外键删除
                	ALTER TABLE stu DROP FOREIGN KEY 外键名;
				ALTER TABLE stu DROP INDEX 外键名;
 MySQL常见类型
	整型:tinyint/smallint/int/bigint
	浮点型:double(n, m)/float(n, m)/decimal(n, m)
		n 代表:整数和小数总位数
		m 代表:小数的位数
		
	字符型:
		char(n)		定长字符串    n可以不写 默认1  		性能高
		varchar(n)  	变长字符串    n必须写  最大长度 	性能低

	日期类型:
		date 年月日
		datetime 年月日 时分秒   8个字节  1900 ~ 9999
				
		time 时分秒
		timestamp 年月日 时分秒  4个字节  1970 ~ 2038
MySQL约束
	
	约束是限制 表中数据的 一种要求
	约束:
		1. 默认约束  default '内容'
		2. 非空约束  not null 
		3. 主键约束  primary key    唯一 不能为null   一个表有且仅有一个主键
		
		4. 唯一约束  unique  唯一 可以为null null可以多个
		5. 外键约束  建立两表之间的关系,一个表的某一列 来源于另一个表的主键值

DML

1. (插入)
    语法:
    	insert into 表名(列名1, 列名2,...) values(1, 2,....)
    	insert into 表名(列名1, 列名2,...) values(1, 2,....),(1, 2,....),(1, 2,....)....
    注意事项:
	1. 列名和值要一一对应
	2. 插入值的类型 匹配列名的类型
	3. 整型 浮点型值可以不加引号,字符类型和日期类型 必须加引号
	4. 不区分单双引号
	5. 如果约束有默认约束和可以为空的列 值可以不写 对应列也不写
	6. 如果表中所有列都给数据 列名可以省略不写
2. 
    语法:
    	delete from 表名 where 条件
    	全部删除
    		truncate table 表名;

	delete和truncate区别
         delete可以加where  truncate 不可以
         delete删除可以回滚  truncate 不可以
	    delete 删除自增字段时 下次添加自增效果仍然以删除之前自增
        	truncate 删除自增字段再次添加重新开始
         delete 一条一条数据删除  truncate 删除整个表 然后再创建新表 
        	truncate效率高
3. 修改
    语法:
    	update 表名 set 列名1=新值, 列名2=新值,... where 条件
    注意:
		1. where 条件要加 否则修改所有数据

DQL

数据查询语言,查询数据库表中的数据。查询的结果为虚拟表

基础查询

语法:select 查询列表 from 表名;
特点:
    1. 查询列表可以是 常量、变量、函数、表达式、字段名或者组合
    2. 查询数据来源于表  from  否则不加
    3. 查询列表为虚拟表的列名

条件查询

语法:
    select 查询列表 from 表名 where 条件;
特点:
    1. 条件形式 有多种:
    	条件表达式:> <  >= <= !=或者<> =
    	逻辑表达式:and(&&)  or(||)  not(!)
    	模糊表达式:like / between...and... / not null

排序查询

语法:
    select 查询列表
    from 表名
    where 条件
    order by 排序列表 asc|desc;
特点:
    1. order by 必须写在where后
    2. 排序列表:单字段名、表达式、函数、别名、多字段名或者组合
    3. asc 升序(默认)   desc降序

常见函数

    1. 单行函数:传递一个参数返回一个结果
    	字符函数:
    		length(); 获取字符长度
    		upper();  转大写
    		lower();  转小写
    		lpad();   左填充
    		rpad();   右填充
    		substr(); 截取字符串
    		trim();   去除两侧空格
    		concat(); 拼接字符串
    	数值函数:
			ceil(); 向上取整
			floor(); 向下取整
			abs();   绝对值
			round();  四舍五入
			rand();   随机数 0-1
			mod();    取余
			truncate(); 截取数值
    
    	日期函数:
			now(); 获取当前的日期+时间
			curdate(); 获取当前的日期
			curtime(); 获取当前的时间
			year()/ month()/day()
			date_format(); 格式化日期
   		流程控制
			1. if() 
			2. 等价于 if(){}else if(){}else if(){}....else{}
		 		case
		   			when 条件1 then 1
		   			when 条件2 then 2
		   			.....
		   			else 
		 		end
    

2. 多行函数:传递一组参数返回一个结果
     sum(); 求和
	avg(); 平均值
	max(); 最大值
	min(); 最小值
	count(); 个数
特点:
    1. 分组函数中可以传递列名、表达式
    2. 多行函数自动忽略null值
    3. 多行函数支持类型
	sum avg 只支持数值类型 
	max min count支持任意类型

分组查询

语法:
    select 查询列表  ----- ④
    from 表名	 ------ ①
    where 分组之前条件 ------ ② 
    group by 分组字段  ------ ③ 
    having 分组后条件  ------ ⑤
    order by 排序列表 asc|desc; ----- ⑥
特点:
    1. 分组查询查询列表中只能查询到分组函数和分组字段
    2. 分组查询执行顺序 后执行可以使用前执行的别名

分页查询

语法:
    select 查询列表
    from 表名
    where 分组前条件
    group by 分组字段
    having 分组后条件
    order by 排序列表 asc|desc
    limit 偏移量, 个数
特点:
    1. 偏移量 跳过前面的个数
    2. 个数 一页要查询的个数

连接查询

又叫多表查询,查询的内容来自于多个表,此时需要将多个表连接起来查询

表之间的关系

① 一对一的关系 如:妻子和丈夫 将从表中的主键与主表中的主键建立外键关系

② 一对多和多对一 如:员工和部门 或者 学生和班级

③ 多对多 如:学生和科目 需要使用中间表,两表与中间表建立外键关系

连接查询

内连接查询
    1. 隐式内连接(sql92)
    	语法:
    		select 查询列表
    		from 1 别名1, 2 别名2,...
    		where 连接条件 
    		and 分组前条件
    		group by 分组字段
    		having 分组后条件
    		order by 排序列表 asc|desc
    		limit 偏移量, 个数
    	特点:
			1. 连接条件一定要加  否则出现笛卡尔乘积现象  n*m
			2. 通过where添加连接条件
			3. from后的表名顺序可以随意调整 不影响结果
			4. 根据连接条件分类
				 等值内连接 
				 非等值内连接
				 自连接
			5. n表连接 连接条件至少n-1

    
  

  2. 显示内连接(sql99)
      语法:
      	select 查询列表
      	from 1 别名1 
      	inner join 2 别名2 on 连接条件 ....
      	where 分组前条件
      	group by 分组字段
      	having 分组后条件
      	order by 排序列表 asc|desc
      	limit 偏移量, 个数
      特点:
		1. 连接条件需要添加
		2. on后加连接条件
		3. 表的顺序可以随意调换 不影响结果
		4. 根据连接条件分类
			 等值内连接 
			 非等值内连接
			 自连接
		5. n表连接 连接条件至少n-1

外连接查询(sql99)
    语法:
		select 查询列表
          from 1 别名1
          left|right outer join 2 别名2 on 连接条件....
          where 分组前条件
          group by 分组字段
          having 分组后条件
          order by 排序列表 asc|desc
          limit 偏移量, 个数
    特点:
	 1. 分为左外连接  右外连接
	 2. left outer 左外连接指 左表为主表(所有数据查询)  右表为副表(有对应主表的数据查询)
		查询结果 = 主表中所有数据、副表中有对应关系的数据 以及与主表中没有对应关系的显示为null
	 3. right outer 右外连接指 右表为主表(所有数据查询)  左表为副表(有对应主表的数据查询)
		查询结果 = 主表中所有数据、副表中有对应关系的数据 以及与主表中没有对应关系的显示为null
	 4. 表之间的顺序不能随意调换,否则会影响结果

子查询

	一个查询语句中嵌套了另一个完整的查询语句,被嵌套的语句称为子查询或内查询,外面的语句称为主查询或外查询
      语法:
         select (子查询)
         from (子查询)
         where (子查询)  
       特点:
	  	1. 子查询写在小括号中
	  	2. 子查询优先主查询执行 主查询用到子查询的结果
	  	3. 子查询的结果
			 单行子查询 子查询的结果只有一个 搭配符号:=  > < >= <= <>
			 多行子查询 子查询结果有多个 搭配符号:in / all / any 
        
        
原则:
        能用单表 不使用多表  能用多表不用子查询

DCL

DCL 数据控制语言 创建不同的用户指定不同的权限

事务

  1. 理解 完成某个功能的整个过程,称为一个事务。mysql数据默认一个命令是一个事务

  2. 作用 多个语句同生共死:只要所有语句都成功了 才成功 只要有一个语句失败了 恢复到执行之前的状态

  3. 使用:

4. 事务的特性
     原子性  事务是不可分割的
     一致性  数据的一致性
     持久性  事务完成之后数据是持久化存储的
     隔离性  事务与事务之间的隔离
    	隔离级别:低 ---> 高
    		1. 读未提交  READ UNCOMMITTED
    			引发问题:脏读  
    			解决:提高隔离级别
    		2. 读已提交 READ COMMITTED
    			引发问题:不可重复读
    			解决:提升隔离级别
    		3. 可重复读 REPEATABLE READ
    			引发问题:幻读
    		4. 串行化


avatar
青山
悟已往之不谏 知来者之可追
一言
今日诗词
站点信息
本站访客数 :
本站总访问量 :