mysq基础笔记整理

运算符
= --------------------表示等于
<> --------------------表示不等于
between … and … —显示在某一区间的值(含头尾)
like --------------------模糊查询,_ 代表一个字符 ,%代表任意多个字符
in
and , or ,not

登录数据库
启动: net start mysql;
停止: net stop mysql;

 登录
    方式一:mysql -u用户名 -p密码
	方式二:mysql --host=数据库服务器地址 --prot=端口号 -u用户名 -p密码
	       比如:  mysql --host=localhost --prot=3306 -uroot -p123456                
	方式三:mysql -h服务器地址 -p端口号 -p密码	
           比如:mysql -h127.0.0.1 -p3306 -uroot -p123456

 退出数据库  quit/exit	

source命令备份与还原
备份格式: mysqldump -u用户名 -p密码 数据库 > 文件的路路径
还原格式: source 导入文件的路径;

\\\
DDL(Data Define Language)
创建数据和库数据表,删除数据库和数据表 create/drop
修改数据库和表(影响结构) alter

   创建数据库
      方式一: create database 数据库名;
	  方式二: create database if not exists 数据库名;   --防止报错
	  方式三: create database 数据库名 character set gbk;   --使用指定字节码创建数据库
	  
   创建表 
        create table 表名(
		     字段名1  数据类型,
			 字段名2  数据类型,
			 ...
			 字段名n  数据类型

         );			
	  
   快速创建一个表结构相同的表
     create table 新表名 like 旧表名;
	   
	  
	  
   修改数据库
        *修改数据库的默认字节码
          alter database 数据库名 default character set 字节码;   --gbk/utf8

        *删除数据库
         drop database 数据库名;
		 
		
   修改表结构
        *直接删除表drop
		  drop table 表名;
		*判断表是否存在,存在就删除
          drop table if exists 表名;

        *添加列ADD·	
           alter table 表名 add 列名 数据类型;
		   alter table 表名 add 列名 数据类型 after 列名;   --------添加某列到指定列的后面
		   alter table 表名 add 列名 数据类型 comment 备注;  -------添加列并且添加备注

        *修改列表的数据类型modify
           alter table 表名 modify 列名 新的数据类型;

        *修改列名和数据类型chang
           alter table 表名 chang 列名 新列名 数据类型;

        *删除表中的列drop
           alter table 表名 drop 列名;

        *修改表名 rename
		   rename table 表名 to新表名
		   
		*修改表的字符集编码
		   alter table 表名 default character set utf8;		   
		   
		   
数据库约束
     
	主键约束    primary kay
    唯一约束    unique
    非空约束    not null
    默认约束    default 默认值
    外键约束    constraint foreign key(外键列) references  主表名(主键);
	自增长      auto_increment

    删除主键 :alter table 表名 drop primary key;
	
级联操作
    在修改和删除主表的主键时,同时更更新或删除副表的外键值,称为级联操作
    on update cascade  级联更新
    on delete cascade  级联删除		
	
零填充:字段名 int(n) zerofill;	

\\\
DML(Data Manipulation Language)
对表进行进行增删改 insert/update/delete

    插入数据insert
	     方式一:insert into 表名 (字段名1,字段名2,......) values(值1,值2);
		 方式二: insert into 表名 values(值1,值2,......);
		 
	更新表的记录update
         方式一:update 表名 set 字段名 = 值;   --修改这一列的所有数据
         方式二: update 表名 set 字段名1=值1,字段名2=值2,...where 条件;  --修改满足条件的记录

	删除记录delete
          删除表中所有记录
			  方式一:delete from 表名;
			  方式二:truncate 表名;
				区别:delete是一条条数据删除,删除效率慢,不改变原来的自增长。
					 truncate是直接摧毁表,然后新建一张一样的新表,会重置表的自增长为1开始;
				 
		  删除满足条件的记录
            delete from 表名 where 条件;
			
	数据类型转换cast()或convert()
		相同点:都是进行数据类型转换,实现的功能基本等同
		不同点:两者的语法不同,cast(value as type) 、 convert(value,type)		
			
	字符串拼接CONCAT(x,y)
		CONCAT函数会将所有参数按照参数的顺序拼接成一个字符串做为返回值。
		例:UPDATE `aicube`.`sys_class` SET class_alias_name = CONCAT(gradeId,classNum)
		
	有关联关系的批量更新:
		UPDATE sp_user_sub_course_tbl usc 
		SET sub_course_id = aa.sub_course_id 
		FROM
			(
			SELECT
				usc.user_sub_course_id,
				sc.sub_course_id 
			FROM
				sp_user_sub_course_tbl usc
				LEFT JOIN sp_sub_course_tbl sc ON usc.sub_course_sequences = sc.sub_course_sequences 
				AND sc.course_id = usc.course_id 
			WHERE
				usc.user_id = 549329 
				AND usc.course_id = 3009 
			) aa 
		WHERE
			aa.user_sub_course_id = usc.user_sub_course_id		

\\\\
DQL(Data Query Language)
查询数据 show/select

   查看数据库
      show databases;      --------------查看所用数据库
	  show create database 数据库名;  --查看数据库的定义信息 
	
   查看表		
	  use 数据库名;
	  show tables;  --查看数据库中所有的表
	  desc 表名;    --查看表结构
	  
	  select 字段名1,... from 表名;         ---------------------查看指定列信息
      select * from 表名;                   ---------------------查看所有列信息
	  select 字段名1 as 别名,字段名2 as 别名,... from 表名;    --对列指定别名查询,as可以省略
	  select distinct 字段名 from 表名;     ---------------------指定列查询不重复的结果(distinct)
	  select 列名1+固定值 from 表名;        ---------------------查询某列每一个值+固定值的结果。结果列可以指定别名
	  select 列名1+列名2 from 表名;         ---------------------查询列1和列2相加后的结果。结果列可以指定别名
	  select * from 表名 where 列名 is not null;    -------------查询某列不为空的所有信息
	  select * from 表名 where 列名 between  值1 and 值2     ----查询某列在值1和值2之间的所有信息
	  select * from 表名 where 列名 in(值1,值2);             ----查询某列有值1,值2的信息
	     
	  
	  
  约束====
	  select 列名 from 表名 where 条件 order by 列名 asc/desc;      ----------------------------排序order by
	  升序:asc 可以省略默认按升序
	  降序:desc 
	  select * from 表名 order by convert(列名 using gbk) asc       ----------------------------按拼音排序convert
	  
	  查询所有数据大于20岁的学生,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
	  select * from student3 where age > 20 order by age desc, math asc ;        ----------------组合排序
	  
	  查询所有数据,按性别分组。
	  select * from student3 group by sex;      -------------------------------------------------分组group by
	  
	  limit限制查询记录的条数
      select * from student3 limit 2, 6;	    --------------------查询学生表中数据,从第3条开始显示,显示6条。
	  
五个聚合函数
      count(列名)   统计这一列共有多少个
      sum(列名)     求这一列的总和,通常只对数值类型操作
	  avg(列名)     求这一列的平均值(average)
	  max(列名)     求这一列的最大值,字符串也有最大和最小值。
	  min(列名)     求这一列的最小值
	  
	  语法:        select 聚合函数(列名)from 表名where 条件

where 和 having的区别
      where和having语句都是用来添加过滤条件
	  where语句是对行数据进行过滤,having对组数据进行过滤
	  where语句后面不能使用聚合函数,having后面可以使用聚合函数	
	  
多表查询
    select * from 左表,右边 where 从表.外键=主表.主键;      ---------------------------隐式内连接
    select * from 左表 inner join 右表 on 条件;           -----------------------------显示内连接
	select * from 左表 left join 右表 on 条件;           ------------------------------左外连接
	select * from 左表 right join 右表 on 条件;           -----------------------------右外连接
	
	子查询
	   select * from 表名 where 列名 in (子查询结果,多个值);          ----------------只查询结果是多行单列
	   select * from 左表, (子查询结果 右表) where 从表.外键=主表.主键    -------------子查询结果是多行多列

\\\\
函数
concat()拼接函数

replace( str, from_str, to_str)替换函数
		str        需要进行替换的字符串
		from_str   需要被替换的字符串
		to_str     需要替换的字符串	
	   
union 数据合并查询
	要求:两张表有相同列数(少的列可以null代替),列别名一样
    select 
	  'student' 表名,
	  t.`sid` 学号,
	  t.`sName` 姓名,
	  t.`sAge` 年龄,
	  t.`sSex` 性别 
	from
	  student t 
	union
	select 
	  'sc' 表名,
	  sc.`sid` 学号,
	  sc.`cid` 姓名,
	  sc.`score` 年龄,
	  null 性别 
	from
	  sc 		

case  判断查询
     select 
	  (
		case
		  when 语文 >= 80 
		  then '优秀' 
		  when 语文 >= 60 
		  then '及格' 
		  else '不及格' 
		end
	  ) as 语文,
	  ...from table 	
	
if 判断	查询
     IF( 表达式 , true , false )
     select *,if(book_name='java','已卖完','有货') as product_status from book where price =50
 
对11位的数字进行脱敏查询(电话)
	CASE
	WHEN (
		CHAR_LENGTH (apv.login_id) = 11
	) THEN
		REPLACE (
			apv.login_id,
			SUBSTR(apv.login_id, 4, 4),
			'****'
		)
	ELSE
		apv.login_id
	END AS login_id,
	
to_char('2019-12-07'::date,'IYYY_IW')   ---------获取一年中第几周

to_char(now(),'hh24:mi:ss') < '23:00:00'  ---------是否在当天23点之前

to_char(now() - INTERVAL '1 MONTH','IYYY-MM')   ----------获取上个月日期

to_char(now() - INTERVAL '1 day', 'yyyy-MM-dd')   ----------获取当前天的前一天

round()  ----------- 第一个参数是取值的数据,第二个参数是精度,第三个参数是数据取值模式(四舍五入还是截断),其中第三个参数是可选参数,默认是四舍五入模式。

sum()  -------------函数返回数值列的总数

EXTRACT(epoch from now()-w.create_timestamp)>60*60*18 -------提取秒数(大于18小时)

w.create_timestamp + INTERVAL '14 hour' <= now( )  -----------时间计算(14小时内)
Minutes

COUNT(DISTINCT CASE WHEN 条件 THEN 去重字段 END) xxx GROUP BY 分组字段   --------count去重
COUNT(DISTINCT 去重字段 ) xxx GROUP BY 分组字段      --------count去重

\\\\
DCL(Data Control Language)
创建用户,删除用户,分配权限等 grant/revoke
创建用户:
create user ‘用户名’@‘机主名’ identified by ‘密码’; --------通配符%,表示任意主机名
例如: create ‘user2’@‘localhost’ identified by ‘123’;

	给用户授权:
	   grant 权限 on 数据库名.表名 to '用户名'@'机主名';
	   
	撤销授权:
       revoke 权限 on 数据库名.表名 from '用户名'@'主机名';

    删除用户:
        drop user '用户名'@'主机名';

    修改管理员密码:
        mysqladmin -uroot -p password 新密码;
        输入老密码			

\\\\\
事务
事务特性:原子性,一致性,隔离性,持久性
start transaction 开启事务
commit 提交事务
rollback 回滚事务

select @@autocommit;  查看是否自动提交事务,1=自动提交,0=手动提交
set @@autocommit = 0;

savepoint 名字      设置回滚点
rollback to 名字    回到回滚点

四种隔离级别
serializable(串行化): 可以解决所有并发访问问题
repeatable read(可重复读): 只有幻读的问题
read committed(读已提交): 只能解决脏读问题
read uncommitted(读未提交): 所有并发访问的问题都会出现

\\\\
数据库优化之创建索引

 创建普通索引:CREATE INDEX username ON mytable(username);
               create index 列 on 表(列)

 创建唯一索引:CREATE UNIQUE INDEX age ON mytable(age);
               create unique index 列 on 表(列)
 
 创建主键索引:ALTER TABLE mytable ADD PRIMARY KEY (id);
               alter table 表 add primary key (列)

 组合索引:ALTER TABLE mytable ADD INDEX name_city_age (username,city,age);
           alter table 表 add index 新列名(列,列,列)	 
 
 删除索引:DROP INDEX 索引的名字 ON 索引的表;
           drop index 索引列名 on 索引的表
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值