Web前端105天-day23-MySQL

MySQL02

目录

前言

一、复习

二、计算机如何存储字符

三、列类型

3.1数值型

3.2日期时间型 

3.3字符串型

 四、列约束

4.1主键约束 —— primary key

4.2非空约束 —— not  null

总结


前言

day22-Mysql02学习开始


一、复习

  • 关系型数据库逻辑结构
    • 数据库服务器 -> 数据库 -> 数据表 -> 行 ->  列

  • mysql部署结构
    • 服务器端:负责存储维护数据
    • 客户端:连接数据库
    • 连接:
      • mysql.exe  -h127.0.0.1  -P3306  -uroot  -p
      • mysql   -uroot
      • mysql   -uroot < 拖拽文件
  • 常用管理命令
    • quit;
    • show  databases;
    • use  数据库名称;
    • show  tables;
    • desc  数据表名称;
  •  标准的SQL命令
    • 定义数据结构(DDL):drop/create/alter(修改)
    • 操作数据(DML):insert/delete/update
    • 查询数据(DQL):select
    • 控制用户权限(DCL):grant(授权)/revoke(收权)

二、计算机如何存储字符

  • 如何存储英文字符
    • ASCII:对英文字符进行了编码,总共有128个
    • Latin-1:对欧洲的字符进行了编码,总共有256个,兼容ASCII;mysql默认使用这种编码
  • 如何存储中文字符
    • GB2312:对常用的6000多汉字进行了编码,兼容ASCII
    • GBK:对2万多的汉字进行了编码,兼容GB2312
    • BIG5:台湾繁体字编码
    • Unicode:对世界上主流国家常用的语言进行了编码,具体分为三种存储方案,分别是utf-8、utf-16、utf-32
  • 解决mysql中文乱码
    • 确保脚本文件的编码为utf-8
    • 设置客户端连接服务器端的编码为utf8->set  names  utf8;
    • 设置服务器端创建数据库存储字符的编码为utf8->charset=utf8
    • 针对于部分在交互模式下查看依然有乱码解决方法:
      • 退出交互模式

      • 在命令行中执行(修改编码为utf-8):  chcp  65001

      • 重新进入交互模式,查询数据

  • 练习:编写脚本文件01_sina.sql,先丢弃再创建数据库sina,设置编码为utf8,进入数据库,创建保存新闻数据的表news,包含的列有编号nid,标题title,发表时间ctime,来源origin,详情detail;插入若干条数据,修改1条,删除1条。

-- 设置客户端连接服务器端的编码
set names utf8;
-- 丢弃数据库,如果存在
drop database if exists sina;
-- 创建新的数据库,设置存储字符的编码
create database sina charset=utf8;
-- 进入数据库
use sina;
-- 创建数据表
create table news(
	nid int,
	title varchar(32),
	ctime varchar(10),
	origin varchar(8),
	detail varchar(10000)
);
-- 插入数据
insert into news values(1,'新闻1!','2022-9-30','北京晚报','详情1');
insert into news values(2,'新闻2','2022-10-1','纽约时报','详情2');
insert into news values(3,'新闻3','2022-12-20','华盛顿时报','详情3');
-- 修改数据
update news set ctime='2022-10-8' where nid=1;
-- 删除数据
delete from news where nid=3;

三、列类型

  • 在创建数据表的时候,指定的列所能存储的数据类型

  create  table  news(
     nid  列类型
  );

3.1数值型

  • tinyint
    • 微整型,占1个字节,范围-128~127
  • smallint
    • 小整型,占2个字节,范围-32768~32767
  • int
    • 整型,占4个字节,范围-2147483648~2147483647
  • bigint
    • 大整型,占8个字节
  • float
    • 单精度浮点型,占4个字节
  • double
    • 双精度浮点型,占8个字节
      • 以上浮点型,存储的值越大,精度越低;以牺牲小数点后的数字为代价

  • decimal(M,D)

    • 定点小数,小数点不会发生变化,占16个字节,M表示总的有效位数,D小数点后的有效位数

  •  boolean

    • 布尔型,只有两个值,分别是true和false,用来存储只有两个值的数据,例如:性别、是否在线、是否为VIP

      • true和false是关键字,使用的时候不能加引号

3.2日期时间型 

  • date
    • 日期型   格式为'2022-09-30'
  • time
    • 时间型   格式为'14:47:30'
  • datatime
    • 日期时间型   格式'2022-09-30 14:47:30'

3.3字符串型

  •  varchar(M)
    • 变长字符串,不会产生空间浪费,数据操作速度相对慢,常用于存储变化长度的数据,例如:姓名、标题、详情...  M的最大值是65535
  • char(M)
    • 定长字符串,可能会产生空间浪费,数据的操作速度相对快,常用于存储固定长度的数据,例如:手机号码、身份证号码...  M的最大值是255
  • text(M)
    •  大型变长字符串,M的最大值是4G

varchar(5)

char(5)

aa\0a\0\0\0\0
abab\0ab\0\0\0
一二三一二三、0一二三\0\0
  • 练习:编写脚本文件02_xuezi.sql,先丢弃再创建数据库xuezi,设置编码为utf8,进入数据库,创建保存商品数据的表product,包含的列有编号pid,标题title,价格price,库存量stock,上架时间shelf,是否为首页推荐isindex;插入若干条数据  —— 选择合理的列类型
-- 设置客户端连接服务器端编码
set names utf8;
-- 丢弃数据库,如果存在
drop database if exists xuezi;
-- 创建新的数据库,设置存储字符的编码
create database xuezi charset=utf8;
-- 进入数据库
use xuezi;
-- 创建数据表
create table product(
	pid int primary key,
	title varchar(128),
	price decimal(7,2) not null,   -- 99999.99
	stock smallint,
	shelf date not null,
	isindex boolean  -- true 是   false 否
);
-- 插入数据
insert into product values(3,'Thinkpad P17',71499,200,'2022-2-1',true);
insert into product values(1,'小米Air',3488,1000,'2022-10-1',false);
insert into product values(4,'华硕RX310',4699,500,'2021-8-1',0);
insert into product values(2,'联想T320C',5399,500,'2020-7-1',1);

 四、列约束

  • mysql可以对插入的值进行验证,只有通过验证才允许插入
  create  table  t1(
     pid  int  列约束
  );

4.1主键约束 —— primary key

  • 声明了主键约束的列,不允许插入重复的值,一个表中只能有一个主键约束,通常加在编号列,可以加快数据的查找速度。
  • null:空,表示一个暂时无法确定的值,例如:无法确定一个员工的手机号码、家庭住址,无法确定一个商品价格...
  • null是关键字,使用的时候不能加引号
  • 主键约束的列不允许插入null

4.2非空约束 —— not  null

  • 声明了非空约束的列,不允许插入null

  • 练习:

    编写脚本文件03_xz.sql,先丢弃再创建数据库xz,设置编码为utf8,进入数据库,创建保存笔记本分类的表family,包含的列有编号fid(主键约束),分类名称fname(非空约束),插入以下数据

  • 10联想 
    20小米 
    30戴尔
  • 1 小米Air  20
    2 外星人30
      创建保存笔记本数据的表laptop,包含的列有编号lid(主键约束),标题title,价格price(非空约束),是否在售onsale,详情detail,所属分类编号familyid;插入若干条数据
-- 设置客户端连接服务器端编码
set names utf8;
-- 丢弃数据库,如果存在
drop database if exists xz;
-- 创建新的数据库,设置存储字符的编码
create database xz charset=utf8;
-- 进入数据库
use xz;
-- 创建笔记本分类表
create table family(
	fid int primary key,
	fname varchar(8) not null
);
-- 插入数据
insert into family values(10,'联想');
insert into family values(20,'小米');
insert into family values(30,'戴尔');
-- 创建笔记本商品表
create table laptop(
	lid int primary key,
	title varchar(128),
	price decimal(7,2) not null,    -- 99999.99
	onsale boolean,   -- 1->是  0->否
	detail varchar(10000),
	familyid int
);
-- 插入数据
insert into laptop values(1,'小米Air',3499,0,'详情1',20);
insert into laptop values(2,'外星人',13688,1,'详情2',30);
insert into laptop values(3,'燃7000',4699,1,'详情3',10);


总结

day23-mysql02学习结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值