【MySql的数据定义语言归纳】MySql操作数据库、操作表以及操作表记录案例讲解

本专栏将从基础开始,循序渐进,讲解数据库的基本概念以及使用,希望大家都能够从中有所收获,也请大家多多支持。
专栏地址: 数据库必知必会
相关软件地址:软件地址
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。

1 SQL概述

1.1 Sql介绍

1.1.1 什么是sql?

  • SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
  • SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
  • 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
  • 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0qj0m6h-1653630201369)(imgs.assets/tu_17.png)]

1.1.2 sql的语法

  • 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的。
  • SQL在window中不区分大小写,关键字中认为大写和小写是一样的

1.1.3 sql的分类

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

2 DDL操作数据库

2.1 DDL操作数据库

​ 我们把Sql介绍完成了, 那下面就通过DDL操作数据库。DDL的英文全称为Data Definition Language,中文含义为数据库模式定义语言。

2.1.1 创建数据库

  • 语法
create database 数据库名 [character set 字符集][collate  校对规则]     注: []意思是可选的意思

字符集(charset):是一套符号和编码。

  • 练习

创建一个web14_1的数据库(默认字符集)

create database web14_1;

创建一个web14_2的数据库,指定字符集为gbk(了解)

create database web14_2 character set gbk;

2.1.2 查看所有的数据库

  • 语法
show databases; 

2.1.3 查看数据库的定义结构

  • 语法
show create database 数据库名;
  • 查看web14_1这个数据库的定义
show create database web14_1; 

2.1.4 删除数据库

  • 语法
drop database 数据库名;
  • 删除web14_2数据库
drop database web14_2;

2.1.5 修改数据库

  • 语法
alter database 数据库名 character set 字符集;
  • 修改web14_1这个数据库的字符集(gbk)
alter database web14_1 character set gbk;

注意:

  • 是utf8,不是utf-8
  • 不是修改数据库名

2.1.6其他操作

  • 切换数据库, 选定哪一个数据库
use 数据库名;   		//注意: 在创建表之前一定要指定数据库. use 数据库名
  • 练习: 使用web14_1
use web14_1;
  • 查看正在使用的数据库
select database();

3 DDL操作表

3.1 创建表

​ 前面已经把数据库的CRUD讲解完了,下面我们就学习创建表

3.1.1 创建表的语法

create table 表名(
   字段名 字段类型 [约束],
   字段名 字段类型 [约束],
   ........
   字段名 字段类型 [约束]
);

3.1.2 类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z40YH1cB-1653630201370)(imgs.assets/tu_4.png)]

  1. 整型 一般使用int 或者bigint

  2. 浮点/双精度型

    • 默认的范围 float或者double
    • 指定范围 float(M,D) eg: float(4,2) 表达的范围: -99.99~99.99
  3. 字符串

    • 固定长度 char(n) eg: char(20), 最大能存放20个字符. ‘aaa’, 还是占20个字符的空间
    • 可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间

    一般使用varchar(n) 节省空间; 如果长度(eg:身份证)是固定的话 可以使用char(n) 性能高一点

  4. 关于大文件

    • 一般在数据库里面很少存文件的内容, 一般存文件的路径
    • 一般不使用二进制存, 使用varchar(n)存文件的路径
  5. 日期

    • DATE 只有日期
    • DATETIME 日期和时间

3.1.3 约束

  • 即规则,规矩 限制;
  • 作用:保证用户插入的数据保存到数据库中是符合规范的
约束 约束关键字
主键 primary key
唯一 unique
非空 not null

约束种类:

  • not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据

  • unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo字段不能出现重复的数据

  • primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的

    • auto_increment: 自动增长,必须是设置了primary key之后,才可以使用auto_increment
  • id int primary key auto_increment; id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.

注意:

  1. 先设置了primary key 再能设置auto_increment
  2. 只有当设置了auto_increment 才可以插入null 自己维护 否则插入null会报错

id列:

  1. 给id设置为int类型, 添加主键约束, 自动增长
  2. 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长

3.1.4 练习

  • 创建一张学生表(含有id字段,姓名字段,性别字段. id为主键自动增长)
create table student(
	id int primary key auto_increment,
	name varchar(40),
	sex int
);

3.2 查看表

我们把表创建好了, 下面就来介绍查看表

3.2.1 查看所有的表

show tables;

3.2.2 查看表的定义结构

  • 语法

    desc 表名;

  • 练习: 查看student表的定义结构

desc student;

3.3 修改表

3.3.1 目标

​ 我们表创建好了, 如果要增加一列,要删除一列呢? 那下面就来讲解修改表

3.3.2 步骤

  • 增加列
  • 修改列的类型约束
  • 修改列的名称,类型,约束
  • 删除列
  • 修改表名

3.3.2.1 语法

  • 增加一列;alter table 表 add 字段 类型 约束;
  • 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
  • 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;
  • 删除一列; alter table 表名 drop 列名;
  • 修改表名 ; rename table 旧表名 to 新表名;

3.3.2.2 练习

  • 给学生表增加一个grade字段
alter table student add grade varchar(20) not null;
  • 给学生表的sex字段改成字符串类型
alter table student modify sex varchar(10);
  • 给学生表的grade字段修改成class字段
alter table student change grade class varchar(20);
  • 把class字段删除
alter table student drop class;
  • 把学生表修改成老师表
rename table student to teacher

3.4 删除表

​ 表创建好了, 我们还可以删除。 掌握表的删除

  • 语法

    drop table 表名;

  • 把teacher表删除

drop table teacher;

4 DML操作表记录-增删改

  • 准备工作: 创建一张商品表(商品id,商品名称,商品价格,商品数量.)
create table product(
	pid int primary key auto_increment,  //只有设置了auto_increment id列才可以赋值为null
	pname varchar(40),
	price double,
	num int
);

4.1 插入记录

  • 方式一: 插入指定列, 如果没有把这个列进行列出来, 以null进行自动赋值了.

    eg: 只想插入pname, price , insert into t_product(pname, price) values(‘mac’,18000);

insert into 表(列,列..) values(值,值..);

注意: 如果没有插入了列设置了非空约束, 会报错的

  • 方式二: 插入所有的列

    insert into 表 values(值,值…);

    eg:
    insert into product values(null,‘苹果电脑’,18000.0,10);
    insert into product values(null,‘华为5G手机’,30000,20);
    insert into product values(null,‘小米手机’,1800,30);
    insert into product values(null,‘iPhonex’,8000,10);
    insert into product values(null,‘苹果电脑’,8000,100);
    insert into product values(null,‘iPhone7’,6000,200);
    insert into product values(null,‘iPhone6s’,4000,1000);
    insert into product values(null,‘iPhone6’,3500,100);
    insert into product values(null,‘iPhone5s’,3000,100);

    insert into product values(null,‘方便面’,4.5,1000);
    insert into product values(null,‘咖啡’,11,200);
    insert into product values(null,‘矿泉水’,3,500);

命令行插入中文数据报错:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4p4r0jb-1653630201371)(imgs.assets/tu_3.png)]

  • 关闭服务, net stop MySql
  • 在数据库软件的安装目录下面, 修改配置文件 my.ini中客户端的编码为gbk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NN4rk1w-1653630201371)(imgs.assets/1535858746067.png)]

  • 重新打开命令行,开启服务, net start MySql

4.2 更新记录

我们数据插入成功了, 还可以对已有的数据进行更新。

4.2.1 语法

update 表 set 列 =值, 列 =值 [where 条件]

4.2.2 练习

  • 将所有商品的价格修改为5000元
  • 将商品名是Mac的价格修改为18000元
  • 将商品名是Mac的价格修改为17000,数量修改为5
  • 将商品名是方便面的商品的价格在原有基础上增加2元
update product set price = 5000;
UPDATE product set price = 18000 WHERE name = 'Mac';
UPDATE product set price = 17000,num = 5 WHERE name = 'Mac';
UPDATE product set price = price+2 WHERE name = '方便面';

4.3 删除记录

4.3.1 delete

  • 语法
delete from 表 [where 条件]    注意: 删除数据用delete,不用truncate
  • 练习

    • 删除表中名称为’Mac’的记录
    • 删除价格小于5001的商品记录
    • 删除表中的所有记录
delete from product where pname = 'Mac';
delete from product where price < 5001;
delete from product;

4.3.2 truncate

truncate table 表;
  1. delete 和truncate区别【面试题】
  • DELETE 删除表中的数据,表结构还在; 删除的记录可以找回
  • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表(空)。删除的记录不可以找回
  1. 工作里面常用的删除
  • 物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除
  • 逻辑删除: 没有真正的删除, 数据还在。做一个标记,逻辑删除就是对表的更新 eg: state字段 1 启用 0禁用

工作里面一般使用逻辑删除用的多

猜你喜欢

转载自blog.csdn.net/Learning_xzj/article/details/125002354