1.SQL介绍
结构化查询语句
标准:sql 92 99 5.7版本开始加入了语法严格模式
Oracle 使用sql99 一直沿用语法严格(SQL_Mode)
2.SQL作用
用来管理和操作MySQL内部的对象(库,表)
库:库名
表:表明,表属性,列,记录,列属性和约束 数据类型
3.SQL语句类型
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言
4.数据类型
控制输入的规范,规定分为。字符串,数字,时间,二进制
一个字节255
字符串: char varchar enum
** 1.char:**
char(32) :定长长度为32的字符串。存储数据时,一次性提供32字符长度的存储空间。
2.varchar:
varchar(32):可变长度的字符串类型最多。首先进行字符串长度判断,然后按需分配存储空间。并且单独占用一个字符长度来记录总的字符长度
超过255个 需要两个字节长度来记录字符长度
3.enum :枚举类型
enum('xx','cc',...)
定制数据类型 提高性能
数据行较多时,会影响索引
注意:数字类禁止使用enum类型
面试题:
1.char和varchar的区别?
255 65535
定长(固定存储空间) 边长(按需)
2.char和varchar如何选择?
char类型:固定长度比如手机号,身份证号等。不用判断长度。
varchar类型:不确定长度的字符串场景下使用。
数字:tinyint int 整数
tinyint 最多255
存负数:-128~127之间
int:
时间:timestamp datetime
5.表属性
存储引擎:engine
字符集:charset 必须是utf8mb4
utf8 中文 三个字节长度
utf8mb4 中文 四个字符长度 这才是真的utf8
支持emoji表情
排序规则(校对格则)collation(大小写是否敏感)
针对英文字符串大小写问题
6.列的属性和约束
主键:primary key(pk)
不可有重复,不可为空,自增
一个表中只能有一个主键。 可以多个列组成一个主键
非空:NOT NULL
对于普通列,尽量设置not null
默认值default:数字列的默认使用0 字符串类型,设置nil null
唯一:unique
不能重复
自增:auto_increment
针对数字列,自动生成顺序值
无符号unsigned
注释comment
7.SQL语句应用
1.DDL 数据定义语言
重复的库无法创建
建库
create database oldchen charset utf8mb4;
设置库的字符集可以继承给库下的表
show create database oldchen; 查看建库语句
show databases; 查看数据库
改库
alter database oldchen1 charset utf8mb4;
修改字符集
删库
drop database oldchen1;
建表建库规范:
Window下不区分大小写, 在windows下写的sql语句应用在
Linux会出现无法识别 (Linux严格区分大小写)
1.库名,表名尽量小写。
2.不能以数字开头
3.不能使用特殊符号支出(_)
4.内部函数名不能使用
5、名字和业务功能有关
desc 接 表
查看建表信息
show create table 表;
create table xxx like jjj;
创建一个和jjj一样的kkk表
8.DML 数据操作语句
insert: 插入数据
insert into 学生表 values ()
update:更新表(更新数据行信息)
delete :删除表中数据
delete from xxx;逻辑逐行删除,不会降低自增长只其实值 ,(不会降低水位线)。效率低 占用I/O 碎片多影响表的未来性能(经常delete 也会生成碎片)
truncate table xxx; 物理层清空表总数据 将表段中的去进行清空,不会产生碎片。 会清空所有数据
伪删除:使用updata替代delete
添加状态列state(0代表存在,1代表删除)
将delete from xxx where id=1;
替换为:
updata xxx set state='1' where id='6';
业务语句修改
SELECT * FROM oldguo ;
改为
SELECT * FROM oldguo WHERE state=0;