美文网首页
day03 SQL基础应用——Infommation_Schem

day03 SQL基础应用——Infommation_Schem

作者: 藏鋒1013 | 来源:发表于2019-06-17 22:16 被阅读0次

一、SQL介绍

一种结构化查询语言

SQL标准:
     SQL 92
     SQL 99

5.7版本:SQL_mode严格模式

二、SQL作用

SQL:用来管理和操作MySQL内部的对象
对象:
库:库名、库属性
表:表名、表属性、列名、记录、列属性和约束

三、SQL语言的类型

DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言

四、数据类型

4.1、作用

控制数据的规范性,让数据有具体的含义,在列上进行控制。

4.2种类

4.2.1字符串

1.char(32):定长长度为32的字符串。在存储数据时,一次性提供32字符长度的存储长度,存不满,用空格填充。

2.varchar(32):可变长度的字符串类型。存数据时,首先进行字符串长度判断,按需分配存储空间,会单独占用一个字节来记录此次的字符长度,字符长度超过255之后,需要两个字节长度记录字节长度。

比如:
需存储的字符串是10个字符,只会分配10个字符长度存储空间,并且会单独占用一个字符长度来记录此次的字符长度。

3.enum:枚举类型
    数据行较多时,会影响到索引的应用。

注意:数字类禁止使用enum类型
面试题:
1.char和varchar的区别?
(1)最大字符长度:char:255  varchar:65535
(2)char:定长(固定存储空间)  varchar:变长(按需)
2.char和varchar如何选择?
(1)char类型,固定长度的字符串列,比如手机号,身份证号,银行卡号,性别等……
(2)varchar类型,不确定长度的字符串可以使用。
4.2.2数字

1.tinyint -128~127
2.int

4.2.3时间

1.timestmp
范围:从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
TIMESTAMP
2.datetime
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
timestamp会受到时区的影响

4.2.4二进制

五、表属性

5.1存储引擎

engine=InnoDB

5.2字符集

charset=utf8mb4

utf8     中文  三个字节长度
utf8mb4   中文   四个字节长度
支持emoji字符

5.3排序规则(校对规则) collation

针对英文字符串大小写问题

六、列的属性和约束

1.主键:primary key(PK)

值必须唯一
非空
数字列、整数列、无关列、自增
聚集索引列
是一种约束,也是一种索引类型,在一张表中只能有一个主键

2.非空:not null

建议:对于普通列,尽量设置not null

3.默认值:dedault

数字列的默认值,使用0,字符串类型,设置为一个nil null

4.唯一:unique

不能重复

5.自增:auto_increment

针对数字列,自动生成顺序值

6.无符号:unsigned

针对数字列

7.注释:comment

七、SQL语句应用

7.1DDL:数据定义语言

7.1.1库

(1)建库

mysql> create database oldboy charset utf8mb4;
mysql> show databases; ##查看库信息
mysql> show create database oldboy;  ##另一种方法查看库信息

(2)改库

mysql> alter database oldboy charset utf8mb4;

(3)删库

mysq> drop dababase oldboy;
7.1.2

(0)建表建库规范

1.库名和表名是小写字母
为啥?
开发和生产平台可能会出现问题。

2.不能以数字开头
3.不支持- 支持_
4.内部函数名不能使用
5.名字和业务功能有关(his,jf,yz,oss.erp.crm…)

(1) 建表

create table oldguo(
ID int not null primary key AUTO_INCREMENT comment '学号',
name varchar(255) not null comment '姓名', 
age tinyint unsigned not null default 0 comment '年龄',
gender enum('m','f','n') NOT null default 'n' comment '性别'
)charset=utf8mb4 engine=innodb;

(2)改表

1. 改表结构

例子:

在上表中添加一个手机号列15801332370.(重点*****)

alter table oldguo add telnum char(11) not null unique comment '手机号';
练习:

添加一个状态列:

ALTER TABLE oldguo ADD state TINYINT  UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态列';

查看列的信息:

DESC  oldguo;

删除state列(不代表生产操作):

ALTER TABLE oldguo DROP state;

online-DDL : pt-osc (自己研究 )***

在name后添加 qq 列 varchar(255):

ALTER TABLE oldguo ADD qq VARCHAR(255) NOT NULL UNIQUE  COMMENT 'qq' AFTER NAME;

练习 在name 之前添加wechat列 :

ALTER TABLE oldguo ADD wechat VARCHAR(255) NOT NULL UNIQUE COMMENT '微信' AFTER ID;

在首列上添加 学号列:sid(linux58_00001):

ALTER TABLE oldguo ADD sid VARCHAR(255) NOT NULL UNIQUE COMMENT '学生号' FIRST;

修改name数据类型的属性:

ALTER TABLE oldguo  MODIFY NAME VARCHAR(128)  NOT NULL ;

将gender 改为 gg 数据类型改为 CHAR 类型:

ALTER TABLE oldguo  CHANGE gender gg CHAR(1) NOT NULL DEFAULT 'n' ;

7.2DML数据操作语言

7.2.1 INSERT

(1)最简单的方法插入数据:

insert into oldguo values(1,'oldguo','11111111',18);

(2)最规范的方法插入数据:(重点记忆)

insert into oldguo(name,qq,age) values ('oldboy','1111111',50);

(3)查看表数据(不代表生产操作)

select * from oldguo;
7.2.2 UPDATE(注意:谨慎操作!!!)
update oldguo set qq='123456' where id=5;
7.2.3DELETE(注意:谨慎操作!!!)
delete from oldguo where id=5;
7.2.4生产需求:将一个大表全部清空
方法一:delete from oldguo;
方法二:truncate table oldguo;

DELETE和TRUNCATE区别?
1.DELETE: 逻辑逐行删除,不会降低自增长的起始值。
效率很低,碎片较多,会影响性能。
2.TRUNCATE: 属于物理删除,将表段中的去进行清空,不会产生碎片,性能较高。

7.2.5 生产需求:使用update代替delete,进行伪删除

1.添加状态列state(0代表存在,1代表删除)

alter table oldguo add state tinyint not null dafault 0;

2.使用update模拟delete

delete from oldguo where id=6;
替换为
update oldguo set state=1 where id=6;
查看替换的结果
select * from oldguo;

3.业务语句修改

select * from oldguo;
改为
select * from oldguo where state=0;

相关文章

网友评论

      本文标题:day03 SQL基础应用——Infommation_Schem

      本文链接:https://www.haomeiwen.com/subject/eeuofctx.html