MySQL(1)

发布于:2023-01-16 ⋅ 阅读:(275) ⋅ 点赞:(0)

一、基础

1. 客户端和服务端是通过网络来进行交互的,而数据是存储在服务器上的。

 内存和外存的区别:

        内存的储存空间小、访问速度快、成本高、且内存上的数据容易丢失(一断电就没有了)

        外存的储存空间大、访问速度慢、成本低、且内存上的数据不容易丢失,但是一般的硬盘存储时间有限,可能几年到几十年,特别是SSD固态硬盘存储时间更短。

注意:数据库是要把数据存储到外存上的,外存的数据能够持久化保存,而且数据库组织数据会很多。

2. 关系型数据库:

数据库服务器==》包含很多数据库==》包含很多数据表==》包含很多行(记录)==》包含很多列(字段)

 3. 非关系型数据库组织形式会更加灵活,通常是按照文档或者键值对方式来存储的。

二、基本操作

1. 安装

参考博客园https://www.cnblogs.com/gaobo123/articles/13304745.html

视频教程mysql安装视频_哔哩哔哩_bilibili

2. 显示当前所有数据库:show databases;   

        注意:databases是复数形式;末尾是英文的分号“ ; ".

3. 创建数据库 :create database 数据库名称 ; 

        注意:database是单数形式;create是sql的关键字,所以不能当作名称,如果实在有需要可以写成create database `create`即加上反引号。

create database if not exist 数据库名称 ;

        正常情况下如果数据库已经存在会出现报错,如果加上 if not exist则不会报错。

create database if not exist 数据库名称 create_specification ;

        create_specification是指属性,有character set 和collate两个。

        character set:指定数据库采用的字符集,在表示中文的时候会用到字符集,例如:Unicode、GBK(使用两个字节表示一个汉字)、utf8(是变长编码,其可表示的范围比GBK大得多)。collate:指定数据库字符集的校验规则,即按照什么样的规则来比较字符串之间的大小和相等。

例如:create database if not exist test character set utf8mb4;

4. 选中数据集: use 数据库名称 ;

5. 删除数据库: drop database 数据库名 ;

drop database if exists 数据库名 ;

注意:数据库一旦删除,里面的表和数据将会全部被删除

三、 数据类型

1. 数值类型

注意: 1字节=8bit

        有符号范围:-2^(类型字节数*8-1) ~  2^(类型字节数*8-1)-1

        无符号类型:0 ~ 2^(类型字节数*8)-1

2. 字符串类型

文本数据:例如  .txt  .java  .c等等结尾的文件

二进制数据:例如  .docx  .ppt  .xlsx  .exe等等用记事本打开看不懂的文件

3. 日期类型

三、表基本操作 

1. 创建表 : creat table 表名(列名 类型, 列名 类型... ... );

        creat table 表名(列名 类型 comment ’备注‘,

                                     列名 类型... ... );

注意:创建表需要保证同一个数据库里不能有同名的表,且表名和关键字不能重复

            comment是用来进行注释的,也可以用”--“来进行注释

2. 查看表 : show tables;

3. 查看指定表结构 : desc 表名 ; 

4. 删除表: drop table 表名;

                   drop table if exists 表名;

三、表的增删查改 (CRUD)

1. 新增

insert into 表名 values(值, 值,...);   值的类型要与列匹配

指定列插入 : insert into 表名(列名) values(值);   

多行插入 : insert into 表名 values(值 类型),(值 类型),(值 类型)...;

注意:对于数据库来说,内部存储中文是需要指定对应的中文编码方式的,其默认的字符集是拉丁文(Latin1,它不存储中文),所以可以通过修改数据库字符编码。下面是修改默认方式的步骤:

 2. 查询语句

1)全列查找: select * from 表名;

        注意: select *会让服务器大规模的读取磁盘上的数据,再把数据通过网卡写回客户端。但是如果数据量非常大,则会导致读取磁盘和网卡会很慢甚至卡死。

2)指定列查找:select 列名 from 表名;

3)查询字段为表达式: 即边查询边计算,但只影响临时表的数据展示,对原数据没有任何影响。

select 列名, 表达式  from 表名;

        例: select name, english+math  from exam;

4)给查询的列起个别名:select 列名, 表达式 as 别名 from 表名;

5)查询时进行去重: select distinct 列名  from 表名;

6)查询结果进行排序:

        升序:  select 列名  from 表名 order by 列名;

        降序: select 列名  from 表名 order by 列名 desc;

7)指定多个列进行查询:(哪个列靠前,哪个列优先级就高)

        select 列名  from 表名 order by 列名,列名...;

        select 列名  from 表名 order by 列名 desc , 列名 desc , ...;

8)条件查询:使用where子句来表示条件

        select 列名  from 表名 where 条件;

注意:在条件查询的时候,会先执行where,再执行select前半部分决定显示哪些列。

例:select * Chinese + math as total from exam where total>200;会报错,因为total是在各种条件判定后才定义的。

 
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩:
1.   SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
2.   SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese
<= 90;

9)like, 模糊查询,依赖一些通配符来表示要匹配的值是什么样的

        %代替多个任意字符; _ 代替一个任意字符

例:select * from exam where name like '孙%';即找到名字以孙开头的人

10)NULL:判断空值

例:select * from exam where math <=> null;

11)分页查询:因为数据很多时,会分成几个页来显示

        select 列名 from 表名 limit N;即查询前N条记录

        select 列名 from 表名 limit N offset M;即从第M条开始查询前N条记录

例:select name,english+math+chinese as total from exam where name != '猪八戒' order by total desc limit 3;即找到名字不是猪八戒的记录,并降序排列,只显示前3条

3. 修改(update)

        update 表名 set 列名 = 值 , 列名 = 值 ... ... where 条件 ;

例:update exam set math=80, english = 90 where name = '孙悟空';

4. 删除

        delect from 表名 where 条件;

注意:若不写条件,则相当于表中内容全部删除,即空表。

三、表的增删查改 (进阶)

1. 数据库约束

1)not null :指定列非空,写在某一列的类型的后面

例:create table student ( id int not null, name varchar(20));

2)unique : 值唯一,保证其列的每行必须有唯一的值,不能重复,也是写在某一列的类型的后面

                使用unique时,会先查询再遍历

3)default : 修改默认值,本来默认值为null,默认值一般在指定列插入


网站公告

今日签到

点亮在社区的每一天
去签到