MySQL:基础语法-1

记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了

关于数据库的安装操作,可见博文:安装多个版本的MySQL

这部分主要记录的是 DDL、DML、DCL 相关操作

概述

可有可无的概述,过个形式

DBMS

DBMS (DataBase Management System) / 数据库管理系统:指一种操作和管理数据库的大型软件,用于建立、 使用和维护数据库, 对数据库进行统一管理和控制, 以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

SQL

Structured Query Language 结构化查询语言,有以下分类:

  • DDL:Data Definition Language (数据定义语言) 如:建库,建表
  • Data Manipulation Language (数据操纵语言), 如:对表中的记录操作增删改
  • Data Query Language (数据查询语言),如:对表中的查询操作
  • Data Control Language (数据控制语言),如:对用户权限的设置

数据定义语言:DDL

操作数据库

创建数据库

  • 创建数据库:create database 数据库名;

  • 判断数据库是否已经存在,不存在则创建数据库:

    create database if not exists 数据库名;

  • 创建数据库并指定字符集

    create database 数据库名 character set 字符集;

查看数据库

  • 查看所有的数据库:show databases;

  • 查看某个数据库的定义信息:

    show create database 数据库名;

修改数据库

  • 修改数据库默认的字符集

    alter database 数据库名 default character set 字符集名;

删除数据库

  • 删除数据库:drop database 数据库名;

使用数据库

  • 查看正在使用的数据库:select database();

    使用的一个 MySQL 中的全局函数

  • 使用/切换数据库:use 数据库名;

操作表结构

创建表

  • 正常创建:

    create table 表名(
    字段1 字段标识1,
    字段2 字段标识2,
    ...
    );
    create table student (
    id int,
    name varchar(20),
    birthday date
    );
  • 快速创建一个表结构相同的表

    create table 新表名 like 旧表名;

MySQL 常用数据类型

类型 描述
int 整形
double 浮点型
varchar 字符串型
data 日期型

不具体展开,后续会有补充

查找表

  • 查看某个数据库中的所有表:show tables;

  • 查看表结构:desc 表名;

  • 查看创建表的 SQL 语句:show create table 表名;

删除表

  • 直接删除表:drop table 表名;

  • 判断表是否存在,如果存在则删除表:drop table if exists 表名;

    与直接删除的区别:如果表不存在,不删除,存在则删除

修改表结构

  • 添加表列 add:alter table 表名 add 列名 字段标识;
  • 修改列类型 modify:alter table 表名 modify 列名 新的字段标识;
  • 修改列名 change :alter table 表名 change 旧列名 新列名 字段标识;
  • 删除列 drop :alter table 表名 drop 列名;
  • 修改表名:
    • rename table 旧表名 to 新表名;
    • alter table 表名 rename to 新表名 -- 在sqllite中支持,上面的语句却不支持
  • 修改字符集:alter table 表名 character set 字符集;

数据表的约束

约束种类

约束名 约束关键字
主键 primary key
唯一 unique
非空 not null
外键 foreign key
检查约束 check 注: mysql 不支持

主键约束

说明:用来唯一标识数据库中的每一条记录:通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。 主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行

主键关键字: primary key

主键的特点

  1. 非空 not null
  2. 唯一

创建主键

  1. 在创建表的时候给字段添加主键

    字段名 字段类型 primary key

  2. 在已有表中添加主键

    alter table 表名 add primary key(字段名);

删除主键

alter table 表名 drop primary key;

主键自增

  • 默认:auto_increment 表示自动增长(字段类型必须是整数类型)

  • 修改自增长的默认值起始值:

    默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法

    create table 表名(
    列名 int primary key auto_increment
    ) auto_increment=起始值;
  • delete 和 truncate 对自增长的影响

    • delete : 删除所有的记录之后,自增长没有影响
    • truncate:删除以后,自增长又重新开始。

唯一约束

表中某一列不能出现重复的值

基本格式:字段名 字段类型 unique

null 没有数据,不存在重复的问题

非空约束

某一列不能为 null

基本语法格式:字段名 字段类型 not null

默认值字段名 字段类型 default 默认值

如果一个字段设置了非空与唯一约束,该字段与主键的区别?

  • 主键数在一个表中,只能有一个;不能出现多个主键;主键可以单列,也可以是多列
  • 自增长只能用在主键上

外键约束

外键:在从表中与主表主键对应的那一列

  • 主表: 一方,用来约束别人的表
  • 从表: 多方,被别人约束的表

创建约束的语法

  • 新建表时增加外键

    [constraint] [外键约束名] foreign key(外键字段名) references 主表名(主键字段名) [on update/delete cascade];

  • 已有表增加外键

    alter table 从表 add [constraint][外键约束名] foreign key(外键字段名) references 主表名(主键字段名);

删除外键

alter table 从表 drop foreign key 外键名称;

外键的级联

在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

级联操作语法 描述
on update cascade 级联更新, 只能是创建表的时候创建级联关系。
更新主表中的主键, 从表中的外键 列也自动同步更新
on delete cascade 级联删除

数据操纵语言:DML

插入记录

  • 插入全部字段

    insert into 表名 (字段名1, 字段名2, 字段名3,...) values (值1, 值2, 值3, ...);

  • 不写字段名

    insert into 表名 values (值1, 值2, 值3, ...);

  • 插入部分数据

    insert into 表名 (字段名1, 字段名2, 字段名3,...) values (值1, 值2, 值3, ...);

    有添加数据的字段会使用 NULL

蠕虫复制

将一张已经存在的表中的数据复制到另一张表中

语法格式:

  • 将表名 2 中的所有的列复制到表名 1 中:

    insert into 表名1 select * from 表名2;

  • 只复制部分列

    insert into 表名1(列1, 列2) select 列1, 列2 from 表名2;

更新表记录

  • 不带条件修改数据:update 表名 set 字段名=值; --修改所有行
  • 带条件修改数据:update 表名 set 字段名=值 where 字段名=值;

删除表记录

  • 不带条件删除数据:delete from 表名;

  • 带条件删除数据:delete from 表名 where 字段名=值;

  • truncate:truncate 相当于删除表的结构,再创建一张表。

数据控制语言:DCL

创建用户

create user '用户名'@'主机名' identified by '密码';

  • 用户名:将创建的用户名
  • 主机名:指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
  • 密码:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

用户授权

grant 权限1, 权限2, ... on 数据库名.表名 to '用户名'@'主机名';

  • grant...on...to: 授权关键字
  • 权限:授予用户的权限,如 CREATEALTERSELECTINSERTUPDATE 等。如果要授予所有的权限则使用 ALL
  • 数据库名.表名:用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
  • '用户名'@'主机名':给哪个用户授权,注:有 2 对单引号

撤销授权

revoke 权限1, 权限2, ... on 数据库.表名 from '用户名'@'主机名';

  • revoke ... on ... from:撤销授权的关键字

撤销 user1 用户对 test 数据库所有表的操作的权限:

revoke all on test.* from 'user1'@'localhost';

查看权限

show grants for '用户名'@'主机名';

删除用户

drop user '用户名'@'主机名';

修改密码

  • 修改管理员密码:

    mysqladmin -uroot -p password 新密码

    需要在未登陆 MySQL 的情况下操作,新密码不需要加上引号

  • 修改普通用户密码

    set password for'用户名'@'主机名'=password('新密码');

    需要在登陆 MySQL 的情况下操作,新密码要加单引号

MySQL:基础语法-1的更多相关文章

  1. MYSQL基础语法的使用

    喜欢的朋友可以关注下,粉丝也缺. MYSQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之 ...

  2. MYSQL从入门到放弃系列:mysql基础语法

    Mysql基本语法 启动MySQL net start mysql 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 跳过权限验证登录MySQL mysqld --ski ...

  3. mysql基础语法之(全文索引)

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()…AGAIN ...

  4. Mysql 基础语法1

    MySQL的软件架构 1.开启MySQL服务器:以windows服务的形式开启,在cmd下net startmysql|net stop mysql,在cmd下使用mysqld –default-fi ...

  5. 一. MySQL基础语法

    1. 案例库表 2. DQL语言(数据查询) 2.1 基础查询 -- 进入指定的库 USE myemployees; DESC employees; -- 使用SELECT查询字段 # 1.查询表中的 ...

  6. mysql基础语法及拓展到web中的sql注入

    本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建,  昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...

  7. mysql 基础语法

    以下为自己学习mysql 的一些笔记,以方便查询 目录 一. ALTER的 语法 二. 表的完整性约束 三. 索引的操作(mysql 数据库支持至少 16 个索引) 四. 视图的操作 五. 触发器的操 ...

  8. MySQL基础语法命令

    1. 建表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 通用语法: CREATE TABLE table_name (column_name column_type); 实例: ...

  9. Mysql基础语法-建库-建表(增、删、改、查、表关联及子查询)

    前言:MySQL是一个数据库管理系统,也是一个关系数据库.它是由Oracle支持的开源软件,MySQL可以在各种平台上运行UNIX,Linux,Windows等.可以将其安装在服务器甚至桌面系统上. ...

  10. Mysql基础语法

    mysql SELECT VERSION(), CURRENT_DATE, now();select user(); create database pets;show databases; use ...

随机推荐

  1. VS Code 搭建stm32开发环境

    MCU免费开发环境 一般芯片厂家会提供各种开发IDE方案,通常其中就包括其自家的集成IDE,如: 意法半导体 STM32CubeIDE NXP Codewarrior TI CCS 另外也可以用ecl ...

  2. adb 常用命令大全(7)- 其他实用功能

    屏幕截图 adb exec-out screencap -p > sc.pn 截图保存到电脑执行该命令的目录下 如果指定文件名以 .png 结尾时可以省略 -p 参数 注意 如果 adb 版本较 ...

  3. 基于ECDHE的TLS握手流程

    <!doctype html>3.3 基于ECDHE的TLS握手流程 html { overflow-x: initial !important } :root { --bg-color: ...

  4. view+element+java登陆验证码

    一.前端: 1.页面标签: <el-row :gutter="20"> <el-col :span="24"> <el-input ...

  5. Nginx rewrite跳转 location匹配

    目录: 一.常用的Nginx 正则表达式 二.location 三.rewrite 一.常用的Nginx 正则表达式 1 ^ :匹配输入字符串的起始位置 2 $ :匹配输入字符串的结束位置 3 * : ...

  6. Excel中怎么快速选中区域

    连续的表格选定 一张表格中会有不同的部分,若想选择某一个区域的数据的时候我们可以使用快捷键Ctrl+A,这是需要先选中第一个单元格,接着点击Ctrl+A即可选中连续的单元格.       汇总后需要汇 ...

  7. PHP中的强制类型转换

    学过静态语言开发的朋友对类型转换不会陌生,比如Java.C#.C++等.静态语言的好处就是变量强制必须指定类型,这也是编译的要求,所以大部分编译型的语言都会有强制变量类型的要求.而PHP据说也会在PH ...

  8. Docker系列(1) - Centos8.X安装Docker

    环境准备 需要会Linux的基础 Centos8.x 使用Xshell连接远程服务器 环境查看 #系统内核是4.18以上 [root@localhost ~]# uname -r 4.18.0-305 ...

  9. svn的应用

    SVN 如何来进行多人协作开发? 在实际工作中,通常是一个小组或者一个团队一起开发同一个项目,不同的人开发不同的功能模块,有一个公共的地方存放项目代码. 如果多个人同时对同一个文件做了修改,比如按照分 ...

  10. P5137-polynomial【倍增】

    正题 题目链接:https://www.luogu.com.cn/problem/P5137 题目大意 \(T\)组数据给出\(n,a,b,p\)求 \[\left(\sum_{0=1}^na^ib^ ...