文档章节

mysql基本语法

varju
 varju
发布于 02/27 10:21
字数 2506
阅读 74
收藏 0
运算符
     =      --------------------表示等于
	 <>     --------------------表示不等于
	 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)
		
				

              			  
   
 \\\\\\\\  
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() - 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小时内)
	
		     
 \\\\\\\\  
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 索引的表
	

 

© 著作权归作者所有

varju
粉丝 0
博文 41
码字总数 6332
作品 0
中山
程序员
私信 提问
加载中

评论(0)

史上最简单的 MySQL 教程(四十)「数据库变量」

变量 在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。 根据变量的作用范围,又分为: 会话级别变量:仅对当前客户端当次连接有效; 全局级别变量:对所有客户端的任一次连接...

qq_35246620
2017/12/03
0
0
九、MySQL存储过程和函数

存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。 9.1、创建存储过程和函数 存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别是...

运维菜鸟丶
2017/08/04
0
0
2、关于数据库的基本操作

一、概述 第一章内容介绍了,MySQL数据库的基本结构组成和SQL语言的组成部分,本章内容将从一些基本操作命令和MySQL数据库自带的库以及新建的库进行一些基本操作的使用说明。 二、MySQL数据库...

CARYFLASH
2017/11/14
0
0
史上最简单的 MySQL 教程(三十七)「数据备份与还原(下)」

数据备份与还原 基础概念: 备份,将当前已有的数据或记录另存一份; 还原,将数据恢复到备份时的状态。 为什么要进行数据的备份与还原? 防止数据丢失; 保护数据记录。 数据备份与还原的方...

qq_35246620
2017/10/02
0
0
Oracle和Mysql语法异同整理笔记

@[toc] 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造。 所以本博客主要介绍Oracle兼容mysql改...

smileNicky
2019/02/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP中Session ID的实现原理

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。 PHPSESSIONID的生产算法原理如下: hash_func = ...

php开源社区
15分钟前
9
0
MySQL设置允许用户远程登录

项目中需要连接虚拟机上面的MySQL数据库,但是总是出错,怀疑本机是否有连接远程数据库的权限。 执行命令: mysql> use mysql;mysql> select host,user from user; 查看结果是不是root用...

imzchloe
22分钟前
13
0
TI达芬奇系列TMS320DM8148浮点DSP C674x + ARM Cortex-A8USB OTG/USB HUB接口、SATA接口(仅DM8148)V

处理器 DM8148 TI TMS320DM8148是一款高性能嵌入式32位工业级ARM Cortex-A8+DSP C674x处理器。拥有多种工业接口资源,以下是DM8148 CPU资源框图: USB OTG/USB HUB接口 CON13、CON14为Micro...

Tronlong创龙
24分钟前
9
0
一个对二维数组进行多字段多顺序排序的方法

1,代码 <?php/** * 对二维数组依次按照排序规则数组指定的字段和顺序进行排序,在有相同的情况下按下一个字段和顺序进行排序 * @param array $arr 待排序的数组 * @param array $...

vinci321
24分钟前
3
0
2019阿里技术专家面试题大汇总(内含答案)

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次整体放出。并通过这些笔试真题开...

白楠楠
25分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部