MySQL简介,库,表S的QL语句,数据类型(重要)

数据的演变史

# 以ATM为例
# 1. 把数据存放在单个文件里面
	1. 文件名不规范
    2. 数据格式也不规范
    	kevin|123   kevin$123  kevin*123
# 2. 软件目录开发规范
	db文件夹里
    	# 当数据量多的时候,会产生很多的文件,多次读取文件会占用大量的资源
# 3. 数据库阶段
	把数据单独存放在一台计算机上
    '''数据库能解决以上你所有遇到的问题.'''
    

数据存储发展史

1. 单机游戏阶段
	# 数据各自保存在各自的电脑上,不能实现数据的共享
2. 联网游戏
	# 核心就是可以在计算机之间数据共享,数据库一定是基于网络的!!!
    
  '''以上所有遇到的问题核心都是基于数据的'''

数据库的本质

'''数据库的本质其实就是cs架构的软件'''
cs架构的软件就必须有服务端和客户端,理论上来说,我们每个人都能写一款数据库出来,只不过是你写的数据库没人用,因此,市面上有很多牛逼的程序员,就写了很多的数据库软件,所以,你也会发现,现在市场上的确有很多的数据库

数据库的分类

'''市面上有很多的数据库,但是,大致分类两大类'''
1. 关系型数据库
	MySQL、Oracle、SqlServer、PostgreSQL、sqlite、MariaDB、db2、access
    MySQL:开源免费的
	Oracle:不开源,收费
    MariaDB:开源的

2. 非关系型数据库
	Redis缓存数据库(新项目使用)memcahce缓存数据库(老项目有再用)、MongoDB(爬虫)
    '''redis淘汰了memcahce'''
    
3. 二者的特点
	"""
		关系型数据库:
			拥有固定的表结构,表与表之间可以建立关系
		非关系型数据:
			没有固定的表结构,它是以K:V键值对的形式存储数据
			name------------------->kevin
			age-------------------->20
	"""

sql与NoSql

# 服务端为了兼容各个客户端的交互,统一规定了交互格式:
	mysql >>>>>>: sql
    redis >>>>>>>: nosql

MySQL简介

1. 版本问题
	# 4.x之前的版本直接忽略,不够稳定
    5.6:老项目用的多,是最稳定的版本
    5.7: 新老项目都在用
    8.x:最新版本
'''在IT界,生产环境中尽量不要使用最新版本,测试环境中用哪个版本都可以'''
# 任何软件,生产环境中,都要使用稳定版本,而不是追求最新版本
# 教学使用5.6版本,如果你下载了其他版本也无所谓
'''如果你之前的电脑装过mysql,而卸载的方式又不对,就有可能存在很多的残留垃圾文件,如果不删除掉,就有可能导致新的mysql装不上,装上之后,有可能启动不起来,反正就是各种问题!!!'''

# 如果你的电脑中确实存在了残留文件,怎么办呢?
利用一些杀毒软件,去检测你电脑上的残留文件,然后把检测出来的垃圾文件全部删除即可

'''今天的任务,每个人必须把MySQL装成功!!!'''
2. 下载MySQL
	# 1. Windows版本
    # 2. mac版本
    # 3. linux版本
    我们使用 Windows版本的,mac版本有教程,linux版本这里不讲
3. 下载
	去挂网下载:https://www.mysql.com/ >>>>>>   DOWNLOAD    >>>> 
     # 下载下来之后,是一个zip的压缩包,去解压文件
4. mysql目录介绍:
	# bin
        mysql.exe # 这个是mysql自带的客户端
        mysqld.exe # 这个是mysql的服务端
   # data
	   '''它是mysql的存储数据的地方'''
    my-defalut.ini   # 这个是mysql的配置文件
    README   # 是说明文件
    
5. 如何使用mysql
	1. 先启动服务端,要去到bin路径下找到mysqld.exe启动文件
    2. 启动客户端(新建一个cmd窗口出来),链接服务端(服务端的cmd窗口不能关闭)
	3. ctrl + c是停止服务的
    4. 把mysqld服务端所在的路径加入到环境变量中
    5. 制作系统服务
    	# 目的:就是可以随时关闭mysql的服务端,达到开启自启动,自关闭
        1. 先关闭已经启动的服务端
        2. 在打开cmd窗口:
        	mysqld --install (Install/Remove of the Service Denied!) # 没有权限
            '''使用管理员方式启动cmd'''
        	# 第一次安装成功之后,服务并没有启动,需要手动启动一次
        3. 启动服务的方式:
            	1. 鼠标点击启动按钮
                2. net start mysql  # (管理员权限)
        4. 停止服务
        	1. 鼠标点击停止
            2. net stop mysql # (管理员权限)
       5. 如何卸载服务
    		1. 先关闭服务
        	2. mysqld --remove
            
# 如何退出客户端:  exit
'''
	打开服务的方式:
		1. 在底部任务栏右键选择任务管理器  >>>>>  服务
		2. 此电脑右键  >>>  管理  >>>  服务和应用程序 >>> 服务
		3. win + r  >>>  输入:services.msc  >>>  回车
'''

修改管理员密码及忘记密码怎么办

1. 修改管理员密码
	mysqladmin -u用户名 -p旧密码 password 新密码 
	# mysqladmin -u root -p password 123
2. set password=PASSWORD('密码')
	
    
'''管理员密码改完之后,一定要使用管理员账号登录:'''
mysql -u root -p密码
# 直接输入mysql登录是游客模式
# 以后都用管理员模式登录,不要使用游客模式,游客模式只能查看,权限很低

'''忘记密码了怎么办?'''
1. 先停止服务端
2. 用'跳过授权表'的形式再次启动服务端
	mysqld --skip-grant-tables
    '跳过授权表' >>>: 客户端在登录mysql的时候,只需要输入用户名即可,不在验证密码
3. 用管理形式登录成功之后,进行修改密码
	# 下面的命令先了解,你看不懂
    update mysql.user set password=password('123') where Host='localhost' and User='root';
4. 退出客户端,终止服务端
5. 不要在使用跳过授权表了,正常启动服务

以上的修改密码可参考此连接博客,我觉得写得很清晰:https://www.cnblogs.com/rmxd/p/11236736.html

概念补充

库    >>>  文件夹

表    >>>  文件夹下的文件

记录   >>>  文件夹下的文件下的一行行的数据

'''
	information_schema库是mysql默认在内存中创建的库
'''

基本SQL语句

'''在mysql中,sql语句都要以分号结尾!!!'''
1. 如何查看所有的数据库
	show databases;  # 查看所有数据库

2. 如何选择数据库
	use 库名;
    user mysql;
3. 查看当前在哪个库下
	select database();

针对库的sql语句

1. 查看库
	show databases; # 查看所有库
    show create dabatabse db1;  # 查看具体库的信息
   
2. 增加库
	create database 库名;
    
3. 修改库 # 一般很少用,甚至于不用
# alter database 库名 charset='gbk'
alter database db1 charset='gbk'

4. 删除库
drop database 库名
	drop database 库名;
    drop database db1;	

针对表的sql语句

1. 查看表
	show tables;  # 查看库下的所有表
 
    desc  t1;  # 查看表结构
    show create table t1;
 
2. 增加表
	create table t1(id int, name varchar(10));
3. 修改
	# 修改表明
    alter table t1 rename tt1; # 重命名表名
 4. 删除
	drop table tt1;

针对表的SQL语句(重要)

有表的前提是先有库
什么是表?
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

# 先有库

select database();  # 查看当前所在的库
use db1;选择库
0. 查看表
	show tables;
    show create table t1; # 查看表结构
    describe t1;  # 格式化之后的表结构
    desc t1;

以上例子1:


1. 创建表
	create table t1(id int(11), name varchar(20), age int);

以上例子2:

2. 修改表(一般不建议改)
	alter table t1 rename tt1;

以上例子3:

3. 删除表
	drop table t1;

以上例子4:

### 针对记录的SQL语句

````python
select、insert、update、delete

"""初始学MySQL,所有的命令都要尽量自己手敲一遍,不要复制粘贴."""

1. 查看表中的数据
	select * from t1;
    select id from t1;
    select id, name from t1;
    select id, name, age from t1;

以上例子5:

以上例子6:


    
2. 增加数据
	insert into t1 values(1, 'kevin', 18);  # 单条增加数据,并且是全字段增加
    insert into t1 values(2, 'tank', 20), (3, 'oscar', 21), (4, 'jack', 22);
    insert into t1(id, name) values(5, 'jerry'),(5, 'jerry'),(5, 'jerry'),(5, 'jerry') ;

以上例子7:

3. 修改数据
	update 表名 set 字段名='子端值' where  条件;
    update t1 set name='kevin2' where age=18;
    update t1 set name='jason1', age = 190 where id=3;

    以后要是还需在后面加数据,可以按照k=v,k1=v1的方式加即可!
    update t1 set name='jason1', age = 190, k=v,k1=v1 where id=3;

    update t1 set name='tank1' where id=2 and age=20;
    update t1 set name='aaa'; # 全表改,一定c不能使用
    '''以后你在写更新语句的时候,一定别忘了检测更新条件'''
    """以后可千万要有安全意识,尤其是对公司里的核心数据,数据对一个公司太重要了"""

以上例子8:


4. 删除数据
	delete from t1 where id =1;
    delete from t1 where id =1 and name='';

以上例子9:

### 存储引擎(存储数据的方式)

```python
什么是存储引擎?
	# 就是存储数据的方式

MySQL中有哪些存储数据的方式:select
    show engines;
 
# 总共支持9中存储引擎,我们需要掌握2种:
MyISAM:
    它是MySQL5.5及之前的版本默认的存储引擎,它的存取速度更快,但是数据相对InnoDB不够安全
InnoDB
	它是MySQL5.6及之前的版本默认的存储引擎,它的存取速度相对MyISAM更慢了,但是数据相对MyISAM更加安全
MEMORY
	它的数据是在内存中存着的,内存是基于电工作的,所以断电数据丢失,重启服务端也会丢失数据

# 验证以上三者存储引擎所产生的文件
create table t2(id int) engine=MyISAM;
create table t3(id int) engine=InnoDB;
create table t4(id int) engine=MEMORY;

MyISAM:
    # 产生三个文件
    .frm: 这个文件存表结构
    .MYD:这个文件存数据 data
    .MYI: 这个文件存数据的索引 index >>> 类似于是书的目录 >>> 加快查询速度的
InnoDB        
    # 产生两个文件
    .frm: 这个文件存表结构
    .ibd: 这个文件存数据的索引和数据 index >>> 类似于是书的目录 >>> 加快查询速度的
MEMORY
	# 产生两个文件
    .frm: 这个文件存表结构

以上例子10:

数据类型(重要)

1. 整型
tinyint   smallint  mediumint  int    bigint
# 不同的类型存储的范围不一样
存储范围比较:
tinyint:1个字节------>8位------>2 **8----> 256----->0-255----->-128-127
smallint:2个字节存储----->16位---->2 ** 16 ----> 65536----->0-65535---->-32768-32767
int:4个字节------>32位----->2 ** 32----> 21...---->
bigint:8个字节----->64为----->2 ** 64---->

# 默认情况整型是否带符号
create table t5 (id tinyint);
create table t5 (id smallint);
create table t5 (id int);
create table t5 (id bigint);

insert into t5 values(999);
insert into t5 values(-129);
"""得出结论:默认情况整型是带符号的"""

以上例子11:


2. 浮点型
# 小数
float   double  decimal
"""语法格式"""

float(255, 30);  # 255表示的是存储的位数,30代表的是小数位数
double(255,30);  # 255表示的是存储的位数,30代表的是小数位数
decimal(65, 30); # 65表示的是存储的位数,30代表的是小数位数

decimal(8, 2) # 表示的最大范围是:999999.99

# 这三个有什么区别
create table t6(id float(255, 30));
create table t7(id double(255, 30));
create table t8(id decimal(65, 30));

# 插入数据
insert into t6 values(1.111111111111111111111111);
insert into t7 values(1.111111111111111111111111);
insert into t8 values(1.111111111111111111111111);

"""得出结论:精确度不一样"""
decimal  >>> double >>> float

# 以后就是使用decimal
# 这个地方只能存字符串了

以上例子12:

3. 字符串

char(4)    varchar(4)
# 这两个都是用来存储字符串使用的
char(4):   它是定长,那么他就存4位,如果没有超出4位,空格填充到4位,超出4位,报错或者,最大存4位
varchar(4):可变长的,不超出4位,有几位存几位,超出4位,报错或者,最大存4位

show
# 验证
create table t9(id int, name char(4));
create table t10(id int, name varchar(4));

insert into t9 values(1, 'kevin');
insert into t10 values(1, 'kevin');

# 如果你想让报错,需要设置严格模式
如何查看严格模式
1. select @@sql_mode;
2. show variables like '%mode%' # 模糊查询,变量中带有mode的


# 设置严格模式
1. 永久修改:需要改配置文件
2. 临时修改:
	set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
  


##########研究定长和可变长
insert into t9 values(2, 'k');
insert into t10 values(2, 'k');

# 验证存储的长度
select char_length(name) from t9;
select char_length(name) from t10;

# 以后到底使用定长还是不定长呢,
大多数情况使用的都是varchar,如果你的存储数据就是固定的,就是有char


4. 日期类型
	datetime      date      time      year
    年月日 时分秒   年月日    时分秒     年份
    
    create table t14 (id int, 
                      reg_time datetime, 
                      update_time date,
                      delete_time time, 
                      birth year
                     );
    
    insert into t14 values(1, '2023-10-01 11:11:11', '2023-07-10', '11:11:11', '2023');

以上例子13:

 5. 枚举类型
	enum:多选一
        create table t15 (id int,
                         hobby enum('tangtou', 'hejiu', 'xijio', 'chouyan')
                         );
     insert into t15 values(1, 'tangtou');  

以上例子14:

    set:
    	多选多
          create table t16 (id int,
                         hobby set('tangtou', 'hejiu', 'xijio', 'chouyan')
                      );

以上例子15:

整型中的数字代表的什么意思

char(4)
varchar(4) # 括号里的数字代表的就是存储的长度
int
tinyiny
smallint
# 整型的存储范围跟括号中的数字有没有关系:没有任何关系
整型的存储范围完全是跟关键字相关,int, smallint

create table t11 (id int(3));
insert into t11 values(99999);

# 整型中括号中的数字代表的是数据展示的位数
create table t12 (id int(3) zerofill);
insert into t12 values(9);

create table t13 (id int(11) zerofill);
insert into t13 values(9);

创建表的完整语法结构

create table 表名(
	字段名1  数据类型  约束条件 约束条件 约束条件,
    字段名2  数据类型  约束条件 约束条件 约束条件,
    字段名3  数据类型  约束条件 约束条件 约束条件,
    字段名4  数据类型  约束条件 约束条件 约束条件,
    字段名5  数据类型  约束条件 约束条件 约束条件,
);

create table t17 (
	id int,
    name varchar(16),
    age int
);


# 注意事项:
1. 字段名和数据类型是必须要写的
2. 约束条件是可选的,有就写,没有不写
3. 最后一个字段的末尾不能加逗号
posted @ 2023-07-10 21:31  毓见  阅读(25)  评论(0)    收藏  举报