Mysql总结之基本语句

Mysql

DDL(数据库定义语言)

1、数据库

  • 查看所有数据库:SHOW DATABASES;
  • 切换(选择要操作的)数据库: USE 数据库名;
  • 创建数据库: CREATE DATABASE [IF NOT EXITS] 数据库名[CHARSET = utf8];
  • 删除数据库: DROP DATABASE [IF EXITS] 数据库名;
  • 修改数据库编码: ALTER DATABASE 数据库名 CHARACTER SET utf8;
    2、常用数据类型(列类型)
    int:整型
    Tinyint:
    Smallint:
    Mediumint:
    Int:
    Bigint:
    double:浮点型,例如double(5,2)表示最多5位,其中非必须有2位小数,即最大值为999.99;
    decimal:浮点型,在表示金钱方面使用该类型,因为不会出现精度缺失问题;
    char:固定长度字符串类型; char(255)最大值,如数据长度不足指定长度,补足到指定长度;
    varchar:可变长度字符串类型; varchar(65535)最大值,zhangsan
    text(clob):字符串类型(可变字符串);
    tinytext ->2^8 -1B 256B
    text ->2^16-1B 64K
    mediumtext->2^24-1B 16M
    longtext ->2^32-1B 4G

blob:字节类型;
tinyblob ->2^8-1B 256B
blob ->2^16-1B 64K
mediumblob->2^24-1B 16M
longblob ->2^32-1B 4G
date:日期类型,格式为:YYYY-MM-DD;
time:时间类型,格式为:HH:MM:SS;
timestamp:时间戳类型;格式为:YYYY-MM-DD HH:MM:SS;
3、表

  • 创建表:
    CREATE TABLE 表名(
    列名 列类型,
    列名 列类型,

列名 列类型
);

  • 查看当前数据库中所有表名称:SHOW TABLES;
  • 查看表结构:DESC 表名;
  • 删除表:DROP TABLE 表名;
  • TRUNCATE TABLE 表名:先删除drop该表,再create该表。而且无法回滚。
  • 修改表:
    修改之添加列:
    ALTER TABLE 表名 ADD(
    列名 列类型,
    列名 列类型,

    列名 列类型
    );
    修改之修改列类型:ALTER TABLE 表名 MODIFY 列名 新的列类型;
    修改之修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
    修改之删除列:ALTER TABLE 表名 DROP 列名;
    修改表名称:ALTER TABLE 原表名 RENAME TO 新表名;

DML(数据库操作语言,对表记录的操作(增、删、改))

1、插入数据

  • INSERT INTO 表名(列名1,列名2,…) VALUES(列值1,列值2, …);
    在表名后给出要插入的列名,其他没有指定的列等同与插入null值。所以插入一行,不可能是 半行。
    在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应

  • INSERT INTO 表名 VALUES(列值1,列值2)
    没有给出要插入的列,那么表示插入所有列。
    值的个数必须是该表列的个数
    值的顺序,必须与表创建时给出的顺序相同。

2、修改数据

  • UPDATE 表名 SET 列名1 = 列值1,列名2 = 列值2,…[WHERE 条件]
  • 条件(条件可选的):
    条件必须是一个Boolean类型的值或表达式:UPDATE t_person SET sex = ‘男’ , age = age+1 WHERE sid = ‘1’;
    运算符:=、!=、<>、>、<、<=、>=、BETWEEN…AND…IN(…)、IS NULL、NOT、OR、AND
    3、删除数据
  • DELETE FROM 表名 [WHERE 条件];

DCL(数据控制语言)
1、创建用户

  • CREATE USER 用户名@IP地址 IDENTIFIED BY ‘密码’;
    用户只能在指定的IP地址上登录
  • CREATE USER 用户名@’%’ IDENTIFIED BY ‘密码’;
    用户可以在任意IP地址上登录
    2、给用户授权
  • GRANT 权限1,2…权限n ON 数据库.* TO 用户名@IP地址
    权限、用户、数据库
    给用户分派在指定的数据库上的指定的权限
    例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON student.* TO user1@localhost;
    给user1用户分派在student数据库上的create、alter、drop、insert、update、delete、select权限
  • GRANT ALL ON 数据库.* TO 用户名@IP地址
    给用户分派数据库上的所有权限
    3、撤销权限
  • REVOKE 权限1,2…权限n ON 数据库.* FROM 用户名@IP地址
    撤销指定用户在指定数据库上的指定权限
    例如:REVOKE CREATE,ALTER,DROP ON student.* FROM user1@localhost;
    撤销user1用户在student数据库上的create、alter、drop权限
    4、查看权限
    *SHOW GRANTS FOR 用户名@IP地址
    5、删除用户
  • DROP USER 用户名@IP地址

DQL(数据查询语言(查询不会修改数据库表记录!))

一、基本查询
1.字段(列)控制
1)查询所有列

SELECT * FROM 表名;
例:SELECT * FROM emp;
--> 其中“*”表示查询所有列

2)查询指定列

SELECT 列1[,列2, ... 列N] FROM 表名;
例:SELECT empno, ename, sal, comm FROM 表名; 

3)完全重复的只记录(显示)一次
当查询结果中的多行记录一模一样是,只显示一行。

SELECT DISTINCT * 列1[,列2, ... 列N] FROM 表名;
例:SELRCT DISTINCT sal FROM emp;

–> 查询员工表的工资,如果存在只显示一次!
4)列运算
数量类型的列可以做加、减、乘、除运算

SELECT sal*1.5 FROM emp;
SELECT sal+comm FROM emp;

字符串类型可以做连续运算

SELECT CONCAT(‘$’, sal) FROM emp;

转换NULL值
有时需要把NULL转换其他值,例如com+100时,如果com列存在NULL值,那么NULL+100还是NULL, 而我们这时希望把NULL当前0来运算。

SELECT IFNULL(com,0) FROM emp;

–> IFNULL(com,0) :如果com中存在NULL值,那么当成0来运算。
给列起别名
当使用列运算后,查询出的结果集中的列名称很不好看,这是我们需要给列名起个别名,这样在结果 集中列名就显示别名了
例:SELECT IFNULL(com,0) + 100 AS 奖金 FROM emp;
–> 其中AS可以省略
2.条件查询
1)条件查询
与UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE来控制记录。
2)模糊查询
当你想查询姓张,并且姓名一共两个字的员工时,这是就可以使用模糊查询

SELECT FROM emp WHERE ename LIKE ‘张_’;

–>模糊查询需要使用运算符:LIKE,注意:只能匹配一个字符而不是多个
如果想要查询姓张,名字不限长度的员工时就要使用“%”了。

SELECT * FROM emp WHERE ename LIKE ‘张%’

–>其中%可以匹配0~N个任意字符

SELECT FROM emp WHERE ename LIKE ‘%阿%’

–>不能理解成名字中间有“阿”,因为%匹配0~N,所以姓名只要出现“阿”字,不管开头结尾都会查 询到。
当你想查询名字为3个字的员工详细信息时可以使用

SELECT * FROM emp WHERE ename LIKE ‘___’;

–> 一个下划线匹配一个字符,多个下划线匹配相应的字符
二、排序
1)升序

SELECT * FROM WHERE emp ORDER BY sal ASC;

–> 将sal排序,升序!
–> 其中ASC是可以省略,默认
2)降序

SELECT * FROM WHERE emp ORDER BY comm DESC;

–> 将comm排序,降序!
–> 其中DESC不能省略
3)使用多列作为排序条件

SELECT * FROM WHERE emp ORDER BY sal ASC, comm DESC;

–> 将sal升序排列,如果sal相同,使用comm的降序排列。可以继续追加条件。
三、聚合函数
聚合函数用来做某列的纵向运算
1)COUNT

SELECT COUNT(*) FROM emp;

–> 计算emp表中所有列都不为null的记录的行数
SELECT COUNT(comm) FROM emp;
–> 计算emp表中comm列不位null的记录的行数
2)MAX

 SELECT MAX(sal) FROM emp;

–> 查询最高工资
3)MIN

 SELECT MIN(sal) FROM emp;

–> 查询最低工资
4)SUM

 SELECT SUM(sal) FROM emp;

–> 查询工资合
5)AVG

 SELECT AVG(sal) FROM emp;

–> 查询平均工资
四、分组查询
分组查询是把记录使用某一列进行分组,然后查询组信息
例如:查看所有部门的记录数。

SELECT deptno,COUNT(*) FROM emp GROUP BY depyno;

–> 使用deptno分组,查询部门编号和每个部门的记录数

SELECT job,MAX(sal) FROM emp GROUP BY job;

–> 使用job分组,查询每种工作的最高工资
组条件:以部门分组,查询每组记录数。条件记录数大于3

SELECT deptno,COUNT(*) FROM emp GROUP BY deptno HAVING COUNT(*) > 3;

五、Limit子句(方言)
LIMIT用来限定查询结果的起始行,以及总行数。
例如:查询起始行为第5行,一共查询3行记录

SELECT * FROM emp LIMIT 4,3

–> 其中4表示从第5行开始,其中3表示一共查询3行。即第5、6、7行记录。
数据库备份与恢复
1、备份语句
mysqldump -u用户名 -p密码 数据库名>生成的脚本文件路径

mysqldump -uroot -p123456 mydb1>C:/a.sql    

注意,不要打分号,不要登录mysql,直接在cmd下运行
注意生成的脚本文件中不包含create database语句
2、恢复语句
1)mysql -u用户名 -p密码 数据库<脚本文件路径
例:
先删除mydb1数据库,再重新创建mydb1库

mysql -uroot -p123456 mydb1<C:/a.sql

2)登录mysql
Source SQL脚本路径
例:
先删除mydb1库,再重新创建mydb1库
切换到mydb1库

source C:/a.sql

约束
1、主键约束
在这里插入图片描述
2、主键自增长
在这里插入图片描述
3、非空和唯一约束
在这里插入图片描述
4、外键约束
在这里插入图片描述
5、一对一关系

在这里插入图片描述
6、多对多关系

在这里插入图片描述
7、合并结果集

在这里插入图片描述
7、查询连接之内外连接
在这里插入图片描述

8、子查询

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值