mysql常用指令整理(入门)

mysql

第1章 SQL语句

1-1 SQL语句分类

  1. DDL(data Definition language)数据定义语言

    用来定义数据库对象:数据库 表 列 关键词:create drop alter show

  2. DML(data manipulation language)数据操作语言

    用来对数据库中表的数据进行增删改 关键词:insert delete update

  3. DQL(data Query language)数据查询语言

    用来对数据中表的数据进行查询 关键词:select where

  4. DCL(data Control language)数据控制语言

    用来定义数据访问权限和安全级别 关键词:grant revoke

1-2 SQL语法规范

  1. sql可以单行或多行书写,以分好结尾
  2. sql语句里面的关键字大写
  3. 表名和字段尽可能使用反引号
  4. 当你写一些文本内容的时候的必须使用引号包裹

1-3 DDL语句

1-3-1 DDL操作数据库

创建数据库
  1. 直接创建数据库

    CREATE DATABASE 数据库名;
    
  2. 判断是否存在并创建数据库

    CREATE DATABSE IF NOT EXISTS 数据库名;
    
  3. 创建数据库并制定制定字符集

    CREATE DATABASE 数据库名 CHARACTER SET 字符集;(jbk,ytf8..
查看数据库
  1. 查看所有数据库

    SHOW DATABASES
    
  2. 查看某个数据库的定义信息(创建时候的使用的sql语句)

    SHOW CREATE DATABSE 数据库名
    
修改数据库
  1. 修改数据库的字符集格式

    ALTER DARABASE 数据库名 DEFAULT CHARACTER 字符集;
    
删除数据库
  1. 删除数据库

    DROP DATABASE 数据库名;
    
使用数据库
  1. 查看正在使用的数据库

    SELECT DATABASE();
    
  2. 使用数据库

    USE 数据库名;
    

1-3-2 DDL操作表和列

创建表
CREATE TABLE 表名(字段1 类型1, 字段2 类型2);

注意:写varchar需要在后面定义长度,不然会报错

CREATE TABLE table2(id int,name varchar(255),age int,sex char,address varchar(255));
查看表
  1. 查看某个库里的所有表

    SHOW TABLES;
    
  2. 查看表结构

    DESC 表名;
    
  3. 查看表创建的时候的sql语句

    SHOW CREATE TABLE 表名;
    
快速创建一个表结构相同的表
CREATE TABLE 新表3 LIKE 旧表1;
删除表
  1. 删除表

    DROP TABLE 表名;
    
  2. 判断表是否存在并删除表

    DROPDES TABLE IF EXISTS 表名;
    
修改表结构
  1. 添加表列

    ALTER TABLE 表名 ADD 列名 类型;
    ALTER TABLE student ADD age int;
    
  2. 修改类型

    ALTER TABLE 表名 MODIFY 列名 类型;
    
  3. 修改列名

    ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
    
  4. 删除列

    ALTER TABLE 表名 DORP 列名;
    
  5. 修改表名

    RENAME TABLE 旧表名 TO 新表名;
    
  6. 修改表字符集

    ALTER TABLE 表名 character set 字符集;
    

1-4 DML语句

插入记录
  1. 插入全部字段

    • 所有字段都写出来

      INSERT INTO 表名 (字段1,字段2,字段3) VALUES (1,2,3);
      
    • 不写字段名

      INSERT INTO 表名 VALUES (1,2,3);
      
  2. 插入部分字段

    INSERT INTO 表名 (字段1) VALUES (1);
    
  3. 蠕虫复制 (把老表的数据迁移到新表,可以将原来数据也迁移过来,like关键字不可有)

    INSERT INTO 新表 SELECT * FROM 旧表; 
    
    INSERT INTO 新表(id,name) select id,name FROM 旧表;
    
更新表记录
  1. 不带条件修改数据

    UPDATE 表名 SET 字段名 = '值';
    
  2. 带条件修改

    UPDATE 表名 SET 字段名 = '值' WHERE 字段名 = "值"
    
  3. 关键词说明

    UPDATE 更新
    SET 	 设置
    WHERE  指定条件
    
删除表记录
  1. 不带条件删除

    DELETE FROM 表名;
    
  2. 带条件删除

    DELETE FROM 表名 WHERE 字段名 = '值';
    

1-5 DQL语句

查询表所有数据
SELECT * FROM 表名;
查询指定列
SELECT id,name FROM 表名;
别名查询
SELECT name AS 姓名, age AS 年龄 FROM 表名;
清楚重复值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBfSOuyX-1603866172092)(/Users/panchenyang/Library/Application Support/typora-user-images/image-20201027144307801.png)]

SELECT DISTINCT 字段1 FROM 表名;  //按照name 就会剩一条
SELECT DISTINCT 字段1,字段2 FROM 表名; //按照name age 就会剩2条
查询结构参与运算
  1. 某列数据和固定值运算

    SELECT 列名1 + 固定值 FROM
  2. 某列数据和其他列数据运算

    SELECT 列名1 + 列名2 FROM
    SELECT math_score+english_score AS 总成绩 FROM
  3. 查询所有数据 + 你还想得到的数据

    SELECT *,math_score+english_score AS 总成绩 FROM

1-5 DCL语句

第2章 表的复杂查询

2-1 条件查询 => 比较运算符

> 大于
>= 大于等于 
< 小于
<= 小于等于
= 等于
!= 不等于
SELECT * FROM 表名 WHERT 字段 = '值';
SELECT * FROM table4 WHERT id = 1;
SELECT * FROM table4 WHERT age >= 18;

2-2 条件查询 => 逻辑运算符和范围运算符

逻辑轮算符
and 多个条件同时满足   		 相当于&&
or  多个条件满足其中一条 	  相当于||
not 不满足								相当于!
SELECT * FROM table4 WHERE id = 1 AND age = 18;
SELECT * FROM table4 WHERE age > 18 OR sex = '男';
in not in 关键字
SELECT * FROM table4 WHERE id = 1, OR id = 3, OR id = 5;
SELECT * FROM table4 WHERE id in(1,3,5);//id 满足1,3,5的会被查询出来
//上面两句sql 查出来是一样的
SELECT * FROM table4 WHERE id not in(1,3,5);//id不满足1,3,5的会被查询出来
范围运算符
关键字:  BETWEEN
BETWEEN1 AND2;   //表示值1到值2的范围,包头又包尾
例:				 age BETWEEN 35 AND 75
相当于==>		age>=35 && age<=75

SELECT * FROM table4 WHERE math_score BETWEEN 60 AND 100;
//查询table4  查询数学成绩 60 - 100 之剑的

2-3 条件查询 => 模糊查询

like模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'SELECT * FROM table4 WHERE name LIKE '%潘%'
MYSQL通配符有两个
'%' : 表示匹配0个或多个字符(任意字符)
例:匹配笔记本
	'%笔记本%' => 表示只要带笔记本三个字的,不管前后是什么 都能匹配上
	'%笔记本'  => 能匹配 苹果笔记本 外星人笔记本 但是不能匹配 苹果笔记本电脑
	'笔记本%'  => 能匹配 笔记本电脑 但是不能匹配 苹果笔记本电脑
'_' : 表示匹配一个字符,且必须出现
例:匹配人名
	'潘_' => 可以匹配 潘晨  但是不能匹配 潘晨阳
	'潘__' => 可以匹配 潘晨阳  但是不能匹配 潘晨

2-4 条件查询 => 结果排序

单列排序
SELECT * FROM 表名 WHERE 字段名<='值' ORDER BY 字段名 [ASC | DESC];
SELECT * FROM table4 WHERE age<=35 ORDER BY age ASC;
查询表table age大于35的 将他们安age升序排序
组合排序
SELECT * FROM 表名 WHERE 字段名<='值' ORDER BY 字段名1 [ASC | DESC],字段名2 [ASC | DESC];
SELECT * FROM table4 WHERE age<=35 ORDER BY age ASC , math_score DESC;
//查询table4表,age大于35的 按age升序排序 如果age一样 按照数学分数降序排列

2-5 条件查询 => 聚合函数

之前我们做的都是横向查询,他们都是根据条件一行一行的查询进行判断,而是用聚合函数是纵向查询,他是对一列的值进行计算,然后返回一个结果值,另外聚合函数会忽略空值。

五个聚合函数
  • count 统计指定列记录数,记录为null的不统计
  • sum 计算指定列的数值和,如果不是数值类型,计算结果为0
  • max 计算指定列的最大值
  • min 计算指定列的最小值
  • avg 计算指定列的平均值,如果不是数值类型,计算结果为0
聚合函数的使用: 写在sql语句select后 字段名的地方
SELECT 字段名.. FROM 表名;
SELECT COUNT(age) FROM 表名;

2-6 条件查询 => 分组查询

  • 分组查询是指使用group by语句对查询信息进行分组,比如将男人分一组,女人分一组

  • 分组的目的是为了统计,一般分组回合聚合函数一起使用

  • 分组后聚合函数的作用?不是操作所有数组,而是操作一组数据

//语法
SELECT * FROM 表名 GROUP BY 分组字段 [HAVING 条件];
 
//会将sex相同的作为一组  但是只会返回每一组的第一条 无意义
SELECT * FROM table1 GROUP BY sex;

//配合聚合函数
SELECT SUM(math),sex GROUP BY sex;//返回男生数学成绩总和 和 女生数据成绩总和

//查询表4,年龄小于30的 按照性别分组 返回男生有多少 女生有多少
SELECT COUNT(*),sex FROM table4 where age<30 GROUP BY sex;

//查询年龄大于25的人,按性别分组,统计每组人数,并且只显示性别人数大于2的。
SELECT COUNT(*),sex FROM table4 WHERE age<25 GROUP BY sex HAVING COUNT(*)>2

having 和 where的区别?

  • where是分组前对数据进行过滤 having是后
  • where后不可以使用聚合函数 having可以

2-7 条件查询 => Limit分页

limit是限制的意思,所以他的作用就是限制查询记录

SELECT *|字段列表 [AS 别名] FROM 表名 [WHERE 语句] [GROUP BY 语句] [having语句] [ORDER BY语句] [LIMIT  语句]

LIMIT 语法格式

LIMIT offset,length;     或者    LIMIT length;
offset : 偏移量,可以理解为可以跳过几条数据 默认为0
length : 需要显示的总记录条数

//查询一张表 从第3条开始显示,一共显示6条  ==>需要跳过2条 显示6条
SELECT * FROM table4 LIMIT 2,6
//查询一张表 从第2条开始显示,显示到第5条为止 ==>跳过1条,显示4条
SELECT * FROM table4 LIMIT 1,4

第3章 数据库的约束

对表的数据进行进一步的限制,保证数据的正确性有效性完整性

约束种类
primary key 主键    auto_increment 自增  truncate删除
unique 			唯一
not null		非空
default     默认
foreign key 外键

3-1 主键约束

主键的作用
  1. 用来唯一表示一条记录,每张表都应该有一个主键,并且每个表只能有一个主键

  2. 有些时候,表的数据的name age sex …字段都一样时,就无法区分这些数据,造成数据库的记录不唯一,这样不方便管理数据

  3. 那些字段应该作为表的主键?

    通常不做业务字段作为主键,单独给每张表设计一个id字段,把id作为主键,主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键没有含义没有关系,只要不重复,非空就行

  4. 主键特点

    • 不能重复
    • 不能为空
创建主键
关键词 : primary key
//创建表的时候 给id字段加主键
CREATE TABLE table1(
  id in primary key,
	name varchar(20),
  age int
)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TIVfJ8gL-1603866172095)(/Users/panchenyang/Library/Application Support/typora-user-images/image-20201028102124202.png)]

上图下面一条数据,加不进去,因为主键重复

删除主键
ALTER TABLE 表名 DROP primary key;
主键自增

数据库自动生成主键字段的值 ==> auto_increment

关键词 : auto_increment
//创建表的时候 给id字段加主键 并且自增
CREATE TABLE table1(
  id in primary key auto_increment,
	name varchar(20),
  age int
)

auto_increment的默认值为1,如果希望修改起始值

 ALTER TABLE 表名 auto_increment=1000;

DELECT 和 TRUNCATE 的区别?

  • delect删除表数据,但是不重置auto_increment的值
  • truncate是摧毁表,重建表,auto_increment的值重置为1

3-2 唯一约束

这张表中的这个字段的值不能重复

关键词 : unique
//创建表 给name字段设置唯一约束,不能出现同名的
CREATE TABLE table1(
	id int primary key auto_increment,
  age int,
  name varchar(10) unique
)

3-3 非空约束

关键词 : not null
//创建表 设置id为主键 自增 设置name字段为唯一  age字段为非空
CREATE TABLE hero (
	id int primary key auto_increment,
	name varchar(10) unique,
	age int not null
)

3-3 默认值的设置

关键词 : default
//创建表 设置id为主键 自增 设置name字段为唯一  age字段为非空  score字段默认为0
CREATE TABLE student(
	id int primary key auto_increment,
  name varcgar(20) unique,
  age int not null,
  score int default 0
)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值