MySQL笔记 | SQL基础与常用的SQL语句

仅做笔记分享,如有错误请高手指出

1.MYSQL数据库

  1. mysql部署结构
    服务器端:服务存储/维护数据
    C:/安装位置/bin/mysql.exe 启动服务
    确保3306端口不被占用
    客户端:负责向服务器端发起增删改查
    C:/安装位置/bin/mysql.exe 客户端工具
  2. 使用客户端连接服务器端
    mysql.exe -h127.0.0.1 -P3306 -uroot -p
    -h host 主机(IP地址/域名)
    -P port 端口
    -u user 用户
    -p password 密码
    简写形式:mysql -uroot

2.mysql常用管理命令

quit;  退出服务器连接
show databases;  显示服务器上当前所有的数据库
use  数据库名;  进入指定的数据库
show  tables;  显示当前数据库中所有的数据表
desc  表名;  描述表中都有哪些列(表头)

3.数据库中解决中文乱码

  1. sql脚本文件存储使用UTF-8
  2. 客户端连接服务器使用UTF-8
  3. 服务器存储数据使用UTF-8

4…SQL命令

SQL: Structured Query Language,结构化查询语言,用于操作关系型数据库服务器,对数据执行增删改查等操作。
SQL命令的两种执行方式
(1)交互模式: 客户端输入一行,点击回车,服务器执行一行。适用于临时性的查看数据
(2)脚本模式: 客户端把要执行的多行命令写在一个文本文件中,一次性的提交给服务器。适用于批量的操作数据

4.SQL语法规范

(1)每条SQL命令可以跨越多行,遇到英文分号作为结束
(2)假如某一条命令出现语法错误,则此条语句以及后边所有的语句不会再执行
(3)SQL命令不区分大小写,习惯上关键字用大写,非关键字用小写
(4)SQL命令中可以使用单行注释(#…)和多行注释(//),注释的内容不会被服务器所执行

常用的SQL命令

常用的SQL命令
  #(1)丢弃指定的数据库,如果存在的话
   DROP  DATABASE  IF  EXISTS  emp;
  #(2)创建新的数据库
   CREATE  DATABASE  emp;
  #(3)进入创建的数据库
   USE  emp;
  #(4)创建保存数据的表
   CREATE  TABLE  employee(
     eid  INT,
     ename  VARCHAR(8),
     sex  VARCHAR(1),
     salary  INT
   );
  #(5)向数据表中插入数据
   INSERT INTO  employee  VALUES('1','tom','m','8500');
  #(6)查询表中所有的数据
   SELECT * FROM  employee;
  #(7)修改数据
   UPDATE employee SET ename='lucy',salary='100' WHERE  eid='2';
  #(8)删除数据
   DELETE  FROM  employee  WHERE  eid='3';

5.解决mysql存储中文乱码

使用UTF-8编码形式
sql脚本文件另存为的编码
客户端连接服务器的编码(SET NAMES UTF8)
服务器端创建数据库使用的编码(CHARSET=UTF8)

在这里插入图片描述

6.mysql中的列类型

创建数据表的时候,指定的列可以存储的数据类型
CREAT TABLE book( bid 列类型 );
1.数值类型——引号可加可不加
TINYINT 微整型,占1个字节 范围-128~127
SMALLINT 小整型,占2个字节 范围-32768~32767
INT 整型,占4个字节 范围 -2147483648~2147483647
BIGINT 大整型,占8个字节
FLOAT(M,D) 单精度浮点型,占4个字节,范围3.4E38,范围比INT大的多,可能产生计算误差。
DOUBLE(M,D) 双精度浮点型,占8个字节,范围比BIGINT大的多
DECIMAL(M,D) 定点小数,不会产生计算误差,M代表总的有效位数,D代表小数点后的有效位数
BOOL 布尔型,只有两个结果TRUE、FALSE(不能加引号),真正存储数据的时候,会自动变成1和0;也可以直接使用1和0;数据库的列类型自动变成TINYINT
2.日期时间类型——必须加引号
DATE 日期型 ‘2018-12-31’
TIME 时间型 ‘14:37:30’
DATETIME 日期时间型 ‘2018-12-31 14:37:30’
3.字符串类型——必须加引号
VARCHAR(M) 变长字符串,不会产生空间浪费,操作速度相对慢,M的最大值是65535
CHAR(M) 定长字符串,可能产生空间浪费,操作速度快,用于存储手机号码、身份证号等固定长度字符,M最大值是255
TEXT(M) 大型变长字符串,M最多存2G

7.列约束

mysql可以对插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则认为是非法的插入。
1.主键约束——PRIMARY KEY
声明了主键约束的列上不能出现重复的值,表中查询的记录会按照主键从小到大排序——加快查找速度;通常主键添加到编号列中。
注意:一个表中只能出现一个主键,主键列上不允许插入NULL。
2.非空约束——NOT NULL
声明了非空约束的列上不允许插入NULL值
3.唯一约束——UNIQUE
声明了唯一约束的列上不能插入重复的值,允许插入NULL,甚至多个NULL;一个表中可以出现多个唯一约束
4.检查约束——CHECK
检查约束可以对插入的数据进行自定义验证

CREATE  TABLE  student(
    score TINYINT CHECK(score>=0 AND score<=100)
   );

mysql不支持检查约束,会降低数据的插入速度。
5.默认值约束——DEFAULT
可以使用DEFAULT关键字声明默认值,有两种方式可以使用默认值

INSERT INTO laptop_family VALUES(50,'华硕',DEFAULT);
INSERT INTO laptop_family(fid,fname) VALUES(60,'神州');

6.外键约束——FOREIGN KEY
声明了外键约束的列上,取值必须在另一个表中的主键列上出现过,两者的列类型要保持一致,允许使用NULL
FOREIGN KEY(外键列) REFERENCES 另一数据表(主键列)
在这里插入图片描述

8.mysql中的自增列

AUTO_INCREMENT: 自动增长,假如一个列声明了自增列,无需手动赋值,直接赋值为NULL,会获取当前的最大值,然后加1.
注意:
只适用于整型的列上
自增列允许手动赋值

9.简单查询

  1. 查询特定的列
#查询所有员工的姓名、生日
SELECT ename,birthday FROM emp;
  1. 查询所有的列
SELECT * FROM emp;
  1. 给列起别名
#查询所有员工的编号,姓名,性别,生日;使用中文别名
 SELECT eid AS 编号,ename AS 姓名,sex AS 性别,birthday AS 生日 FROM emp;

在起别名的时候,AS关键字可以省略

  1. 显示不同的记录/合并相同的记录
#查询出员工都在哪些部门
  SELECT DISTINCT deptId FROM emp;
  1. 查询时执行计算
#假如每个员工工资加500,年终奖加5000,查询所有员工的姓名及其年薪,给列起中文别名。
  SELECT ename 姓名,(salary+500)*12+5000 年薪 FROM emp;
  1. 查询结果集排序
#查询所有部门表数据,结果集按照编号从小到大排序
SELECT* FROM dept ORDER BY did ASC; #ascendant
#查询所有部门表数据,结果集按照编号从大到小排序
SELECT*FROM dept ORDER BY did DESC;#descendant;
  1. 条件查询
    where
#查询出工资在6000以上员工所有列
SELECT * FROM emp WHERE salary>=6000;

!=

#查询出不在10号部门的员工所有列
SELECT * FROM emp WHERE deptId!=10;

is null

#查询出没有明确部门的员工所有列
SELECT * FROM emp WHERE deptId IS NULL;

is not null

#查询出有明确部门的员工所有列
SELECT * FROM emp WHERE deptId IS NOT NULL;

and

#查询出工资在6000以上的男员工所有列
SELECT * FROM emp WHERE salary>=6000 AND sex=1;

between …and…

#查询出工资在7000~10000之间员工所有列
SELECT * FROM emp WHERE salary>=7000 AND salary<=10000;
SELECT * FROM emp WHERE salary BETWEEN 7000 AND 10000;

or

#查询出工资不在7000~10000之间员工所有列
SELECT * FROM emp WHERE salary NOT BETWEEN 7000 AND 10000;
SELECT * FROM emp WHERE salary<7000 OR salary>10000;

in

#查询出20号和30号部门员工所有的列
SELECT * FROM emp WHERE deptId=20 OR deptId=30;
SELECT * FROM emp WHERE deptId IN(20,30);

not in

#查询出不在20号和30号部门员工所有的列
SELECT * FROM emp WHERE deptId NOT IN(20,30);

10.分页查询

假如查询的结果集有太多的数据,一次显示不完,可以使用分页显示。
需要两个条件:当前的页码,每页的数据量
每页的开始=(当前的页码-1)*每页数据量
分页查询语法:
SELECT * FROM emp LIMIT start,count;
start:每页的开始
count:每页数据量

#假设每页显示5条数据
 #第1页:
 SELECT * FROM emp LIMIT 0,5;
 #第2页:
 SELECT * FROM emp LIMIT 5,5;
 #第3页:
 SELECT * FROM emp LIMIT 10,5;

【高手文章】:MYSQL基础常见常用语句200条
https://blog.youkuaiyun.com/c361604199/article/details/79479398

后记

此篇作为笔记分享,请各位大家多多指导,若有错误还请指出,若有知识点遗漏还请补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值