mysql--数据库表的创建及基础命令

今日目标

  1. 表的创建

  2. 数据库的数据类型

  3. 表的约束

  4. 表结构的修改和调整

  5. 数据库的权限管理

  6. 单表的数据的CRUD

sql的一些规范

SQL的分类

SQL脚本注意点

SQL的注释

ISO提出SQL官方注释:

1、多行注释

/* */

2、当行注释

-- 注释 注意,空格是必不可少的!!!

MySQL自身提供一种注释

后面写注释

数据库相关内容的补充

# 查出数据库创建的一些信息
show create database db_name;
​
# 如果在命令行中,返回SQL很长,导致换行,看起来不太方便时
show create database db_name\G

show指令可以使用模糊查询

show xxx xxx xx [like 'xx%xxx'];
​

数据编码校验集

CREATE DATABASE  [if not exists ] `db_zm`  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci 

表的创建

基本语法:

create table  [if not exists ] t_name(column1 type [约束条件,]column2 type [约束条件,]……columnN type [约束条件]
)[engine=innodb];

表结构的查询

desc t_name;
describe t_name;
show columns from user;

查询创建表的SQL

show create table t_name;

数据库的数据类型

数据类型

数值型:int,float, double

Number 类型:

数据类型描述
TINYINT(size)-128 到 127 常规。 0 到 255 无符号*。在括号中规定最 大位数。
SMALLINT(size)-32768 到 32767 常规。 0 到 65535 无符号*。在括号中 规定最大位数。
MEDIUMINT(size)-8388608 到 8388607 普通。 0 to 16777215 无符号*。在 括号中规定最大位数。
INT(size)-2147483648 到 2147483647 常规。 0 到 4294967295 无 符号*。在括号中规定最大位数。
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规。 0 到18446744073709551615 无符号*。在括号中规定最大位 数。
FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点。

字符串

Text 类型:

数据类型描述
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的最大长度。最多 255 个字 符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT存放最大长度为 255 个字符的字符串。
TEXT存放最大长度为 65,535 个字符的字符串。
BLOB用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
binary存储较小的二进制数据
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。 可以按照此格式输入可能的值: ENUM('X','Y','Z')
SET与 ENUM 类似, SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

时间和日期

数据类型描述
DATE()日期。格式: YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME()日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是'1000-01-01 00:00:00' 到 '9999-12- 31 23:59:59'
TIMESTAMP()时间戳。 TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS<br/>注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME()时间。格式: HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR()2 位或 4 位格式的年。<br/>注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069
内容回顾:
  1. 回顾了第一天的相关知识

  2. SQL脚本的注释

  3. 编码相关的知识

  4. 数据库表的创建

  5. 数据库的数据类型

表的约束

create database 数据库名称 default charset="utf8mb4";
create database 数据库名称 default charset set utf8mb4;
​
create table `表名称` (`字段` 该字段的类型 [约束条件,]`字段` 该字段的类型 [约束条件,]-- ……`字段` 该字段的类型 [约束条件]
);
​
// char(20)

MySQL8.0数据库,存在如下约束条件

1、主键约束

2、外键约束【需要在后面讲解】

3、唯一约束

4、非空约束

5、默认值约束

6、检查约束

主键约束

主键(primary key):数据库中一个独立无二的字段,该字段不允许数据重复,是一条记录的唯一标识符。

主键约束:强制规范这个字段,特点:不能重复、而且不能为空

非空约束

非空约束(not null):不允许为空,对应就是允许为空(is null)。

默认值约束

default 值,表示如果在插入数据库,没有这个字段对应的值,会插入对应的默认值

唯一约束

unique:该字段,不能存在相同的值

检查约束

检查约束:SQL标准中检查很早就出现了,但是MySQL在8.0之前没有检查约束(写上也不报错,但是也不生效),在8.0之后,MySQL真正实现了检查约束。

create table user(id int primary key auto_increment,name varchar(255) not null unique,age int default 18,gender varchar(10) check(gender in ("男", "女")),address varchar(255)
)

修改表结构

alter 指令,该指令,主要用来修改已存在的一种数据库对象的结构

主要使用在调整和修改表结构

  • 增加列

  • 删除列

  • 修改列类型或者条件

  • 修改列名称

alter table 表名称 add 字段名称 类型 [约束条件];
​
ALTER TABLE 表名称 drop 字段名称;
​
ALTER TABLE 表名称 modify 字段 新类型 [新的约束];
​
ALTER TABLE 表名称 change 旧字段名称 新的字段名称  新类型 [新的约束];
​
# 修改表名称
ALTER TABLE 表名称 rename 新名称;
RENAME TABLE 表名 TO 新表名;

复制表信息

复制表结构

方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
create table 新表名 like 源表
​
# 注意:会完整的复制表结构,并且连约束也会复制
# 表的数据不会复制

复制表结构和数据

方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表
记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。
create table 新表名 select {*|字段 [, 字段...]} from 源表
​
# 注意:约束中的主键和唯一约束复制不了

快速插入数据

方法三:如果已经存在一张机构一致的表,复制数据
insert into 表 select {*|字段 [, 字段...]} from 原表;

用户管理和权限问题

grant来管理权限

在MySQL8.0之前,grant是集授权、创建用户、修改密码到等一系列权限于一身的一个命令。

  grant 权限列表  on 库名.表名 to 用户名@'客户端主机' [identified by '密码'  with option参数];grant all on *.* TO ljh@'%' indentify by 'ljh';

在8.0之后,主要用来授权,像修改密码、创建用户、删除用户。

# 创建用户
create user [if not exists] 用户名称@‘localhost’ identified by 密码;
​
create user if not exists ljh@'%' identified by 'ljh';
​
grant all on db_zm.* to ljh@'%';flush privileges;

撤销权限

revoke指令

方法1:create和grant结合help CREATE USER;命令:CREATE USER <'用户名'@'地址'> IDENTIFIED BY ‘密码’;查看用户权限: help SHOW GRANTS;命令:show grants  for '用户名'@'地址';授权:help GRANT;
方法2:直接grant收回权限:REVOKE删除用户:DROP USER username
    生产环境授权用户建议:
  1、博客,CMS等产品的数据库授权select,insert,update,delete,create库生成后收回create权限2、生产环境主库用户授权select,insert,update,delete3、生产环境从库授权select
​
​
创建用户方法(推荐使用方法三):
方法一:CREATE USER语句创建
CREATE USER user1@’localhost’ IDENTIFIED BY ‘123456’;
    
方法二: INSERT语句创建
INSERT INTO mysql.user(user,host, authentication_string,ssl_cipher,x509_issuer,x509_subject)VALUES('user2','localhost',password('ABCabc123!'),'','','');

刷新权限: 

FLUSH PRIVILEGES;
    ​
方法三: GRANT语句创建
 GRANT SELECT ON *.* TO user3@’localhost’ IDENTIFIED BY ‘123456’;FLUSH PRIVILEGES;
    
语法格式:
grant 权限列表  on 库名.表名 to 用户名@'客户端主机' [identified by '密码'  with option参数];
        如:
 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%'  grant update on testdb.* to common_user@'%'  grant delete on testdb.* to common_user@'%' grant select, insert, update, delete on testdb.* to common_user@'%'grant create on testdb.* to developer@'192.168.0.%';  grant alter  on testdb.* to developer@'192.168.0.%';  grant drop   on testdb.* to developer@'192.168.0.%';  grant all    on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库  show grants;  -- 查看当前用户(自己)权限show grants for dba@localhost;  grant all on *.* to   dba@localhost; # 移除权限# revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可revoke all on *.* from dba@localhost; with_option参数GRANT OPTION: 授权选项MAX_QUERIES_PER_HOUR: 定义每小时允许执行的查询数MAX_UPDATES_PER_HOUR: 定义每小时允许执行的更新数MAX_CONNECTIONS_PER_HOUR: 定义每小时可以建立的连接数MAX_USER_CONNECTIONS: 定义单个用户同时可以建立的连接数     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序抓取数据包(Proxifier联动burpsuite)

1、打开bp&#xff0c;确保开启127.0.0.1&#xff1a;8080监听地址。 2、点击setting--proxy&#xff0c;点击impor CA certificate&#xff0c;生成bp的证书。 保存到桌面为1.cer&#xff0c;文件后缀为cer就OK了&#xff0c;前缀任意 3、安装证书&#xff0c;双击打开刚刚生成…

BERT系列算法解读

1.bert训练的方法 为了训练BERT模型&#xff0c;主要采用了两种方法&#xff1a;掩码语言模型&#xff08;Masked Language Model, MLM&#xff09;和下一个句子预测&#xff08;Next Sentence Prediction, NSP&#xff09;。 方法一&#xff1a;掩码语言模型&#xff08;Mask…

公共Mono模块笔记

一、公共Mono的主要作用 让不继承MonoBehaviour的脚本也能 1.利用帧更新或定时更新处理逻辑 2.利用协同程序处理逻辑 3.可以统一执行管理帧更新或定时更新相关逻辑(不管你是否继承MonoBehaviour) 二、基本原理 1.通过事件或委托 管理 相关更新函数&#xff08;如AddUpdateLis…

优化电源设计:反激二极管选择与注意事项

反激二极管也被称为续流二极管、缓冲二极管、抑制二极管、钳位二极管或换向二极管&#xff0c;是一种电子元件&#xff0c;通常应用在开关电源和其他涉及电感性负载的电路中。它的主要功能是保护电路&#xff0c;防止感性负载在开关断开时产生的反激电压&#xff08;或反电动势…

DOS学习-目录与文件应用操作经典案例-xcopy

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 xcopy命令是DOS系统中一个强大的文件和目录复制工具&…

MySQL——表的约束

表约束 一、概念 ​ 表中一定要有各种约束&#xff0c;通过各种约束使得未来插入到数据库中的数据是合法的&#xff0c;在语法上是没有问题的&#xff1b; ​ 约束本质就是通过技术手段&#xff0c;倒逼着程序员插入正确的数据&#xff0c;换句话说就是&#xff0c;插入进来…

6个精品免费wordpress模板下载

要找到视觉效果非常出色的WordPress模板&#xff0c;我们可以从多个角度来考虑。根据《Smashing WordPress Themes: Making WordPress Beautiful》一书&#xff0c;WordPress不仅仅是一个博客平台&#xff0c;它还能被用来创建各种风格的网站&#xff0c;从企业网站到摄影画廊等…

洗地机哪个牌子好?全面评测多款口碑洗地机

洗地机的出现&#xff0c;让人们摆脱了每天打扫卫生的繁琐&#xff0c;因为它只需轻轻一推&#xff0c;就能把扫地、拖地、擦地的活全做了&#xff0c;干垃圾湿垃圾统统都能一次清理干净&#xff0c;操作简单&#xff0c;更轻松。本文主要分享一些挑选洗地机的技巧&#xff0c;…

python报错ImportError: The _imagingft C module is not installed

前言 以下解决方案来自gpt&#xff0c;但亲测有效&#xff0c;uu们可放心食用 解决方法 ImportError: The _imagingft C module is not installed 错误通常表明你的Python环境中缺少用于处理图像字体的模块。这可能是由于Pillow&#xff08;PIL的分支&#xff09;库未正确安…

大数据运维学习笔记之Ambari——筑梦之路

原则&#xff1a;分布式存储和分布式计算分开 今天就到这里啦。

c语言如何向文件写入字符串

c语言里向文件写入字符串&#xff0c;用到fputs语句 fputs&#xff08;str,fp&#xff09;是将str字符数组里的内容写入到fp指针指向的文件 #include<stdio.h>int main() {FILE *fp;char s[100];fpfopen("ddd.txt","w");fputs("good time\n&q…

PostgreSQL 的pg_rman 和 Oracle 的 RMAN 对比

PostgreSQL 的pg_rman和 Oracle 的 RMAN 对比 PostgreSQL 的pg_rman 和 Oracle 的 RMAN&#xff08;Recovery Manager&#xff09;都是数据库备份和恢复管理工具&#xff0c;分别用于 PostgreSQL 和 Oracle 数据库。尽管它们的目的和某些功能类似&#xff0c;但在许多方面也存…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 17 节&#xff09; P17《16.Ark-状态管理Prop Link Provide Consume》 将上一节写出的代码进行功能模块封装&#xff1a;1、任务…

【退役之重学Java】关于 Nacos 注册中心

一、下载&#xff0c;安装 见官网 二、配置 流程&#xff1a; 建module&#xff0c;pom&#xff0c;yml&#xff0c;主启动&#xff0c;业务类 三、功能 负载均衡&#xff1a; Nacos 整合 Ribbon&#xff0c;可以使用 RestTemplate Nacos整合了Ribbon后&#xff0c;可以使用Res…

一个通过ADC采集NTC热敏电阻的温度传感器

前言: 如何设计一个电路,使用具有逐次逼近寄存器(SAR)模数转换器(ADC)的热敏电阻直接监测温度呢?温度传感电路需要使用负温度系数(NTC)热敏电阻与电阻器串联形成分压器,监测-25C至100C的温度范围。分压器具有产生与监测的温度成反比的输出电压的效果。电阻器分压器的…

如何彻底搞懂迭代器(Iterator)设计模式?

说起迭代器&#xff08;Iterator&#xff09;&#xff0c;相信你并不会陌生&#xff0c;因为我们几乎每天都在使用JDK中自带的各种迭代器。那么&#xff0c;这些迭代器是如何构建出来的呢&#xff1f;就需要用到了今天内容要介绍的迭代器设计模式。在日常开发过程中&#xff0c…

查找效率满分的算法—— “二分查找” 算法 (Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

removeAttribute和removeAttributeNode有什么区别(代码举例说明)

removeAttribute 和 removeAttributeNode 都是用于从 HTML 元素中移除属性的 DOM 方法&#xff0c;但它们在用法和接受的参数上有一些区别。 removeAttribute removeAttribute 是一个元素&#xff08;Element&#xff09;对象的方法&#xff0c;它接受一个字符串参数&#xf…

深入了解Nginx(一):Nginx核心原理

一、Nginx核心原理 本节为大家介绍Nginx的核心原理,包含Reactor模型、Nginx的模块化设计、Nginx的请求处理阶段. &#xff08;本文源自微博客,且已获得授权&#xff09; 1.1、Reactor模型 Nginx对高并发IO的处理使用了Reactor事件驱动模型。Reactor模型的基本组件包含时间收集…

华为OBS命令行简单使用

华为OBS&#xff08;Object Storage Service&#xff09;是一种云存储服务&#xff0c;提供了高可靠、高性能、安全的数据存储能力。通过使用OBS的命令行工具obsutil&#xff0c;用户可以方便地进行文件上传、下载、删除等操作&#xff0c;而无需依赖图形界面。下面&#xff0c…