MySQL笔记

MySQL笔记

简介

  1. 关系型数据库服务器的结构:数据库服务器(server)->数据库(database)->数据表(table)->行(row)->列(column)
  2. 连接MySQL数据库的代码结束不加;,所有控制MySQL数据库的代码结束都加;
  3. xampp下root的密码默认为空,端口默认为3306,本机IP为127.0.0.1localhost

命令

  1. 连接数据库:mysql.exe -h127.0.0.1 -P3306 -uroot -p
  2. 连接数据库(简写):mysql -uroot
  3. 断开数据库连接:quit;
  4. 显示所有数据库:show databases;
  5. 进入指定数据库:use 数据库名称
  6. 显示当前数据库中所有数据表:show tables
  7. 查看表头:desc 数据表名称
  8. 运行sql文件:mysql -uroot < 拖拽脚本文件

SQL语句

  1. 丢弃存在的数据库:drop database if exists 数据库名称;
  2. 创建数据库:create database 数据库名称;
  3. 进入数据库:use 数据库名称;
  4. 创建数据表:create table 数据表名称(列名称 列类型 列约束,...);
  5. 插入数据:insert into 数据表名称 values(值1,值2,default,...);insert into 数据表名称 set 列名称=值,... where 条件;insert into 数据表名称(列名称1,列名称2,...) values(值1,值2,...)
  6. 查询所有数据:select * from 数据表名称
  7. 修改数据:update 数据表名称 set 列=值,... where 条件;
  8. 删除数据:delete from 数据表名称 where 条件

计算机存储字符

  1. 英文字符
    1. ASCII:对所有英文字符进行了编码,共有128个
    1. Latin-1:对欧洲字符进行了编码,共256个,同时兼容ASCII码
  2. 中文字符
    1. GB2312:对6000多常用汉字进行了编码,同时兼容ASCII码
    1. GBK:对两万多的汉字进行了编码,同时兼容GB2312码
    1. BIG5:台湾繁体字编码
    1. Unicode:对世界上主流国家常用的语言进行了编码,分为三种存储方案,分别是utf-8,utf-16,utf-32

MySQL中文乱码

  1. 原因:MySQL默认使用Latin-1编码,没有对中文字符进行编码
  2. 解决:
    1. 确保脚本文件的编码为utf-8
    1. 设置客户端连接服务器端编码为utf-8:set names utf8
    1. 服务器创建数据库存储字符的编码为utf-8:charset=utf8
  3. 针对电脑交互模式下依然有乱码:
    1. 先退出交互模式
    1. 改变命令行的编码为utf-8:chcp 65001
    1. 重新连接数据库,进入交互模式,查询数据

列类型

数值型

  1. tinyint微整型:占1个字节,范围-128~127

  2. smallint小整型:占2个字节,范围-32768~32767

  3. int整型:占4个字节,范围-2147483648~2147483647

  4. bigint大整型:占8个字节,范围-2(8*8-1)~2(8*8-1)-1

  5. decimal(M,D)定点小数:占16个字节,M代表总的有效位数,D代表小数点后的有效位数

  6. boolean布尔型:只有两个值,存储时true和false都不用加引号

日期时间型

  1. date日期型:‘2022-11-01’
  2. time时间型:‘14:44:30’
  3. datetime日期时间型:‘2022-11-01 14:44:30’

字符串型

  1. varchar(M)变长字符串:不会产生空间浪费,数据操作速度相对较慢,常用于存储变幻长度的数据,M的最大值为65535
  2. char(M)定长字符串:可能产生空间浪费,数据操作速度相对较快,常用于存储固定长度的数据,M的最大值为255
  3. text(M)大型变长字符串:M的最大值为4G

列约束

  1. primary key主键约束:不允许插入重复的值,一个表只能有一个主键约束,通常加在ID列上,加快数据的查找速度,主键约束的列不允许插入null(表示一个暂时无法确定的值)
  2. not null非空约束:不允许插入null
  3. unique唯一约束:不允许插入重复的值允许插入多个null,唯一约束可能会影响排序规则
  4. default默认值约束:使用default关键字设置默认值,插入数据时可以不给值
  5. foreign key外键约束:foreign key(外键列) references 另一个表名称(主键列),外键约束的列,插入的值必须在另一个表的主键列中出现过,类型也要保持一致,以确保两个表建立联系
  6. check检查约束:也叫自定义约束,可以自己指定约束条件,mysql不支持检查约束,会极大的影响数据插入速度

自增列

auto_increment:在插入时赋值为null,就会获取当前列最大值然后加一插入,必须添加在整数形式的主键列,也允许手动设置编号

简单查询

  1. 查询所有的列:select * from emp;
  2. 查询特定的列:select eid,ename from emp;
  3. 给列起别名:select eid as a,ename as b from emp;
  4. 查询特定的列(不重复):select distinct ename from emp;
  5. 查询时执行计算: select ename,salary*12 from emp;
  6. 查询结果排序(默认升序):select * from emp order by eid asc;select * from emp order by eid desc;
  7. 条件查询:
    1. select * from emp where eid=7;select * from emp where eid!=10;select * from emp where eid is not null;select * from emp where salary>8000 and sex=0;select * from emp where eid not in(20,30);
    1. 可用条件:</>/<=/>=/=/!=/is null/is not null/and/&&/or/||/in()/not in()
  8. 分页查询:
    1. 需要提供两个条件:当前的页码,每页的数据量
    1. 每页开始查询的值=(当前页码-1)*每页的数据量
    1. select * from emp limit 开始查询的值,每页的数据量
  9. 模糊条件查询:
    1. 必须结合like关键字使用;%匹配任意个字符;_匹配任意一个字符
    1. 名字含有e的员工:select * from emp where ename like '%e%';
    1. 名字倒数第二个字符是e的员工:select * from emp where ename like '%e_';

复杂查询

聚合查询/分组查询:

  1. 聚合函数:count()/sum()/avg()/max()/min() eg:select count(*) from emp;
  2. 分组查询:通常用于查询聚合函数和分组条件group by eg:select count(*),sum(salary),sex from emp group by sex;
  3. year():获取日期中的年份部分 eg:select year(birthday) from emp;
  4. md5():对一个值进行加密 eg:select md5('123456');

子查询:

  1. 是多个查询命令的组合,把一个查询结果作为另一个的条件来使用

  2. 查询工资最高的员工:select * from emp where salary=(select max(salary) from emp);

  3. 查询和tom同一年出生的员工有哪些:select * from emp where year(birthday)=(select year(birthday) from emp where ename='tom') and ename!='tom';

多表查询:

  1. 查询的列分布在多个表中,前提是表之间建立了联系
  2. eg:select emp.ename,dept.dname from emp,dept where emp.deptid=dept.did;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值