第三章 - SQL基础及元数据获取

SQL的介绍

SQL的定义:结构化查询语句
SQL的作用:对库和表进行操作

SQL的常用分类

  • DDL 数据定义语言(Data Definition Language)
  • DCL 数据控制语言(Data Control Language)
  • DML 数据操作语言(Data Manipulation Language )
  • DQL 数据查询语言(Data Query Language)

表的核心属性介绍

列的属性

数据类型

## 数值类型
  - tinyint  极小整数数据类型(0-255)
  - INT      常规大小的整数数据类型

## 字符类型
  - CHAR      固定长度字符串、最多为255个字符
  - VARCHAR   可变长度字符串、最多为65535个字符
  - ENUM      有一个固定的合法值组成的枚举(相当组成个选项列表)

- 时间类型
  - DATETIME    范围从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
  - TIMESTAMP   范围从 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
                注意:TIMESAMP会受到时区的影响
## 二进制类型
   一般不使用(MYSQL不适合存储图片,视频等)
   neo4J 专门用来做图片视频的存储

约束((一般建表时添加))

primary key  #主键约束
设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。

not null     #非空约束
列值不能为空,也是表设计的规范,尽可能将所有的列设置为非空。可以设置默认值为0

unique key   #唯一键
列值不能重复

其他属性

unsigned   #无符号
针对数字列,非负数。

key   #索引
可以在某列上建立索引,来优化查询,一般是根据需要后添加

default #默认值
列中,没有录入值时,会自动使用default的值填充

auto_increment  #自增长
针对数字列,顺序的自动填充数据(默认是从1开始,将来可以设定起始点和偏移量)
comment #注释

表的属性

存储引擎

默认存储引擎:INNoDB

字符集

GBK       //一个中文字符占用2个字节  
UTF8      //一个中文字符占用3个字节
utf8mb4   //一个中文字符占用4个字节长度  

UTF8与UTF8MB4区别:
UTF8MB4支持emoji  支持音标

校对规则(collation)

校对规则是跟着字符集走的.
例如: utf8mb4
utf8mb4_general_ci     --> 通用的校对,默认值,大小写不区分(默认规则)
utf8mb4_bin           --> 大小写区分

-- 查看字符集校对规则
show collation;

-- 修改字符集校对规则
alter database world charset utf8mb4 collate utf8mb4_bin;

SQL基础操作-DDL

库的定义

建库

create database school;
create schema sch;
CREATE DATABASE test CHARSET utf8;
create database xyz charset utf8mb4 collate utf8mb4_bin;
-- 
建库规范:
    库名使用小写
    库名不能是数字开头
    库名要和业务有关
    建库时要添加字符集
-- 

删库

drop database test;

改库

alter database test charset utf8mb4;

查库

show databases;     //查看所有库
show create database test;  //查看单个库

表定义

建表

-- 建表格式:
create table  表名(
列名1  数据类型  约束  其他属性,
列名2  数据类型  约束  其他属性,
列名n  数据类型  约束  其他属性,
)engine=innodb charset=utf8mb4;

USE school;
CREATE TABLE stu(
id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname   VARCHAR(255) NOT NULL COMMENT '姓名',
sage    TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
sfz     CHAR(18) NOT NULL UNIQUE  COMMENT '身份证',
intime  TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'   
) ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

 #DEFAULT NOW()  当前时间的意思
 #ENGINE 指定使用的表结构   

建表规范:
1.表名小写,无数字开头,与业务有关
2.必须要有主键,一般是一个自增长的无关列
3.选择合适的数据类型,字符长度要适中
4.每个列都非空,并设置默认值
5.每个列必须要有注释
6.必须设置存储引擎和字符集

删表

-- 表定义和数据全部删除
drop table stu;

-- 清空表的区,数据清空,表定义保留
truncate table stu; 

改表

-- 在表中插入一列(默认最后列)
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'qq号';  //在stu表中添加qq列

-- 在指定列后插入一列--AFTER
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname; //在sname后添加wechat列(after)

-- 在第一列前插入一列-- FIRST
ALTER TABLE stu ADD num INT NOT NULL COMMENT '数字' FIRST;

-- 删除列
ALTER TABLE stu DROP wechat;

-- 修改列的数据类型的属性 -- MODIFY
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL;

-- 修改列名称(数据类型需要指定) -- CHANGE
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;

查表

-- 查看表结构
desc xs;

-- 查看单张表
show create table xs;

-- 查看当前库中所有表
show tables;

复制表结构

CREATE TABLE ceshi LIKE stu;  //将stu表结构复制到ceshi

SQL基础操作-DCL

权限回收

-- revoke 权限 on 范围  from 用户;
revoke delete on zhihu.* from zhihu@'10.0.0.%';

用户授权

-- grant 权限     no 对象   to 用户
grant all on *.* to admin@'10.0.0.%' identified by '123456';
grant all on *.* to admin1@'10.0.0.%' identified by '123456' with grant option;  
// with grant option:超级管理员才具备的,给别的用户授权的功能

猜你喜欢

转载自www.cnblogs.com/lpcsf/p/12076141.html