# SQL 命令

# 标准SQL语句分类

DDL: Data Define Language 定义数据结构
 CREATE/DROP/ALTER

DML: Data Manipulate Language 操作数据
 INSERT/UPDATE/DELETE

DQL: Data Query Language 查询数据
 SELECT

DCL: Data Control Language 控制用户权限
 GRANT(授权)/REVOKE(收权)

# 计算机存储字符

  • 如何存储英文字符

TIP

  • ASCII: 总共有128个,对所有的英文字母和符号进行了编码。
  • Latin-1: 总共有256个,兼容ASCII码,同时对欧洲符号进行了编码。MySQL默认使用这种编码。
  • 如何存储中文字符

TIP

  • GB2312: 对常用的6千多汉字进行了编码,兼容ASCII
  • GBK: 对2万多汉字进行了编码,同时兼容GB2312
  • Unicode: 对世界上主流国家的常用语言进行了编码,兼容ASCII码,不兼容GB2312GBK。具体分为utf-8utf-16,utf-32存储方案。
  • 解决MySQL存储中文乱码

TIP

  • SQL脚本另存为的编码
  • 客户端连接服务器端的编码(SET NAMES UTF8)
  • 服务器端创建数据库使用的编码(CHARSET=UTF8)

# MySQL 中的列类型

创建数据表的时候,指定的列可以存储的数据类型

CREATE  TABLE  t1( nid  列类型 );

# 数值型 引号可加可不加

-- 微整型,占1个字节,范围-128~127
TINYINT  

-- 小整型,占2个字节,范围-32768~32767
SMALLINT  

-- 整型,占4个字节,范围
INT  
-- -2147483648~2147483647

-- 大整型,占8个字节,范围很大
BIGINT  

-- 单精度浮点型,占4个字节,最多3.4E38,可能产生计算误差。
FLOAT  

-- 双精度浮点型,占8个字节,范围比BIGINT大的多,可能产生计算误差。
DOUBLE  

-- 定点小数,不会产生计算误差,M代表总的有效位数(不包含小数点),D代表小数点后的有效位数
DECIMAL(M, D)

-- 布尔型,只有两个值TRUE、FALSE,真正存储的时候,列类型会变成TINYINT,TRUE和FALSE变成了1和0,使用的时候也可以直接插入1和0。常用于只有两个值的数据。 例如性别、是否在线、是否注册、是否为会员…
BOOL  

WARNING

注意事项:TRUEFALSE不能加引号

# 日期时间型 必须加引号

DATE  日期型  ‘2019-12-31TIME  时间型   ’14:53:30DATETIME  日期时间型   ‘2019-12-31 14:53:30

# 字符串类型 必须加引号

-- 变长字符串,不会产生空间浪费,操作速度相同比较慢,M最大值是65535
VARCHAR(M)  

-- 定长字符串,可能存在空间浪费,操作速度比较快,M最大值是255;用于存储固定长度的数据,例如身份证号码、手机号码等。
CHAR(M)  

-- 大型变长字符串,M最多2G
TEXT(M)  
CHAR(5) VARCHAR(5)
a a\0\0\0\0 a\0
ab ab\0\0\0 ab\0
一\0\0\0\0 一\0
一二 一二\0\0\0 一二\0
-- TB  GB  MB  KB  Byte  Bit
-- 1Byte = 8Bit(位)

CREATE  TABLE  t1(
  id  INT,
  age  TINYINT,
  commentCount  INT,
  salary DECIMAL(8,2),   -- 999999.99
  phone  CHAR(11),
  article  VARCHAR(5000),
  sex  BOOL,
  ctime  DATETIME
);
练习
  • 编写脚本文件02_xz.sql,先丢弃再创建数据库,设置存储的编码为utf8,进入该数据库,创建保存笔记本数据的表laptop,包含编号lid,标题title,价格price,库存量stockCount,上架时间shelfTime,是否显示在首页isIndex;插入若干条数据。
  • 创建保存员工的表temp,包含编号eid,姓名ename,性别sex,生日birthday,工资salary,所属部门编号deptId,插入若干条数据。

# 列约束

MySQL 在插入数据的时候,进行特定的验证;只有满足条件才允许插入,否则被认为是非法插入。

例如:一个人的性别只能是男或者女,一个人的成绩0~100

CREATE  TABLE  t1( eid 列类型 列约束 );

# 主键约束——PRIMARY KEY

声明了主键约束的列上值不能出现重复,一个表中只能有一个主键,通常加在编号列,表中查询的记录会按照编号从小到大排序,加快查找速度。

WARNING

注意事项:声明了主键约束后就不允许在插入NULL值。

NULL 表示空,在插入数据时,无法确定要保存的数据。例如:无法确定员工的生日,工资都可以使用NULL

# 课后任务

练习
  • 创建保存笔记本分类的表laptop_family,包含fidfname名称,laptopCount数量,插入若干条数据
  • 创建保存笔记本数据的表laptop,包含lidtitlepricespec规格,detail详情,shelfTime上架时间,isOnsale是否在售,familyId 所属分类编号; 插入若干条数据
  • )预习mysql中的列类型