MySQL 数据库 增删查改、克隆、外键 等操作


Posted in MySQL onMay 11, 2022

数据库中有数据表,数据表中有一条一条的记录。

可以用Navicat 等远程连接工具链接数据库,不过数据库需要开启授权。

SQL 字段数据类型

  • int:整型,默认长度是11
  • float:单精度浮点,4字节32位
  • double:双精度浮点,8字节64位
  • char:不可变长的字符类型,读取速度快,耗空间,长度不足会补空格。
  • varchar:可变长的字符类型,但读取数据比 char 低,容易产生内存碎片
  • text :文本
  • image:图片

decimal(6,2) :定义6个有效长度数字,小数点后面有两位

char 最多支持 255 个字符,char 如果存入数据的实际长度比指定长度要小,会补空格至指定长度;如果存入的数据的实际长度大于指定长度,低版本的 Mysql 会被截取前 255个 字符,高版本会报错。

注 varchar 类型:在4.0版本以下,varchar(20),指的是20字节;5.0版本以上,varchar(20),指的是20字符。

查看数据库信息语句

首先登陆MySQL,也可以用SQL工具如 Navicat 远程连接,前提是要在Linux Mysql 中用 grant 进行授权,允许远程登录。

#授予root用户可以在所有终端远程登录,使用的密码是123456
grant all privileges on *.* to 'root'@'%' identified by '123456';

#对所有数据库和所有表有操作权限 with grant option
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

Navicat 连接参数

MySQL 数据库 增删查改、克隆、外键 等操作

为了练习在Linux 中操作,下面的都是在 Linux 命令框中直接敲的。

Linux 中登录Mysql
mysql -u root -p密码
1.查看当前服务器中的数据库  
SHOW DATABASES;
2.查看数据库中包含的表
USE 数据库名    #注意:数据库名区分大小写
SHOW TABLES;
3.查看表的结构(设计、字段)
DESCRIBE [数据库名.]表名
或
DESC 表名
4. 查看创建表的命令
SHOW CREATE TABLE 表名
5.查询结果行转列查看 \G
SELECT * FROM USER_INFO\G;
6. 查看当前所在数据库
select database()

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

SQL 语句

SQL语句用于 维护管理数据库,包括 数据查询、访问控制、数据更新、对象管理、备份等功能。

SQL语言 功能
DDL 数据定义语言,用于 创建、删除数据库对象,如库、表、索引等
DML 数据操纵语言,用于 对表中的数据进行管理
DQL 数据查询语言,用于 从数据表中查找符合条件的数据记录
DCL 数据控制语言,用于 设置或者更改数据库用户或角色权限

创建、删除 数据库 数据表

创建新的数据库

CREATE DATABASE 数据库名;
例如:CREATE DATABASE SCHOOL;

在数据库中新建表

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
例:USE SCHOOL;
CREATE TABLE STUDENT (ID int(10) NOT NULL,NAME varchar(20),AGE int(3),SEX char(2),PRIMARY KEY (ID));

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

删除表

DROP TABLE [数据库名.]表名;				#如不用USE进入库中,则需加上数据库名

删除数据库

DROP DATABASE 数据库名;   #会连库中的表一起删除
删除操作要小心,删除前记得被备份

MySQL 数据库 增删查改、克隆、外键 等操作

向表中添加、删除 记录、查询记录

#先创建 STARBUCKS 数据库,再创建 USER_INFO 表,添加一些字段
CREATE DATABASE STARBUCKS;
USE STARBUCKS;
DROP TABLE IF EXISTS `USER_INFO`;
CREATE TABLE `USER_INFO`  (
  `ID` int(32) NOT NULL,
  `NAME` varchar(20) DEFAULT NULL,
  `TYPE` varchar(32) DEFAULT NULL,
  `ADD_TIME` varchar(20) DEFAULT NULL,
  `IS_USED` char(5) DEFAULT NULL,
  PRIMARY KEY (`ID`) 
)

MySQL 数据库 增删查改、克隆、外键 等操作

向表中添加记录

INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);
例:
#一条一条全字段添加
INSERT INTO USER_INFO(ID,NAME,TYPE,ADD_TIME,IS_USED) VALUES (1001, '咖啡机', '机器齐全', '2021-06-22', 'D0001');
INSERT INTO USER_INFO VALUES (1002, '奶茶机', '设备', '2021-06-23', 'D0001');
#或一条命令添加多条
INSERT INTO USER_INFO (ID,NAME,TYPE,ADD_TIME,IS_USED) VALUES (1003, '牛奶', '食品', '2021-06-24', 'D0002'),
(1004, '包装机', '设备', '2021-06-20', 'D0001'),
(1005, '糖块', '食品', '2021-06-25', 'D0001'),
(1006, '吸管', '设备', '2021-06-20', 'D0001'),
(1007, '奶油', '食品', '2021-06-25', 'D0002');

MySQL 数据库 增删查改、克隆、外键 等操作

SELECT 查询语句

SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
#从0行开始共几行
SELECT * FROM 表名 limit 行数 
#根据行数范围取记录数
SELECT * FROM 表名 limit 开始行数(不包括),从开始行数开始的共几行

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

UPDATE 更新
注意WHERE 加更新的条件,不然会更新所有

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
如 UPDATE USER_INFO SET TYPE='仪器' WHERE ID=1001;

MySQL 数据库 增删查改、克隆、外键 等操作

DELETE 删除记录
注意WHERE 加删除记录的条件,不然会删除所有

DELETE FROM 表名 [WHERE 条件表达式];
例:delete from class2 where id=4;

MySQL 数据库 增删查改、克隆、外键 等操作

修改表名,添加、修改、删除 字段,添加唯一约束

修改表名

ALTER TABLE 旧表名 RENAME 新表名;
例:ALTER TABLE USER_INFO RENAME USER_MESG;
SHOW TABLES;

MySQL 数据库 增删查改、克隆、外键 等操作

表中添加字段

ALTER TABLE 表名 ADD 字段名 varchar(50) default '默认值';
#default 表示此字段设置默认值;可与 NOT NULL 配合使用,默认值立即生效
例:
ALTER TABLE USER_MESG ADD STATUS VARCHAR(20) DEFAULT '在用';

MySQL 数据库 增删查改、克隆、外键 等操作

删除表中字段

ALTER TABLE 表名 DROP 字段名;

修改字段(列)名,添加唯一键约束

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
例:
ALTER TABLE USER_MESG CHANGE NAME DEV_NAME VARCHAR(30) UNIQUE KEY;
#验证唯一键约束,添加重名的约束字段
INSERT INTO USER_MESG VALUES (1008,'牛奶','饮料','2021-06-28','D0001','已过期');
#触发唯一键约束,新增失败
UNIQUE KEY 唯一键:可以用有空值,不能出现重复值,也不能为 NULL,

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

查看、删除、添加 表中的索引

#查看表有哪些索引
 SHOW INDEXES FROM 表名;

MySQL 数据库 增删查改、克隆、外键 等操作

单独新增 去除唯一键约束

#给字段 DEV_NAM 增加唯一键约束
ALTER TABLE USER_MESG ADD UNIQUE INDEX (DEV_NAME);
#给字段 DEV_NAM 去除唯一键约束
#查看索引表中,字段 DEV_NAME 对应的 索引名 Key_name,根据索引名删除索引
ALTER TABLE USER_MESG DROP INDEX 索引名;

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

扩展功能,字段值自增等

use school;
CREATE TABLE IF NOT EXISTS AREA_INFO (                                                                                                         -> AREA_ID int(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT,    #指定主键的另一种方式
-> AREA_NAME VARCHAR(20) NOT NULL UNIQUE KEY,
->  IS_USED CHAR(5) NOT NULL);
#---------------命令解释--------------------------------
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;
#自增长字段必须是主键;字段类型必须是 int 类型,如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

数据表高级操作

克隆表,将数据表的数据记录生成到新的表中

方法一:使用 like

#先克隆表结构
#在插入所有数据
CREATE TABLE AREA_CLONE1 LIKE AREA_INFO;     #通过 LIKE 方法,复制 AREA_INFO 表结构生成 AREA_CLONE1 表
INSERT INTO AREA_CLONE1 SELECT * FROM AREA_INFO;

MySQL 数据库 增删查改、克隆、外键 等操作

如果两张表结构一样,可将一张表的查询结果集返回给 另一张表
INSERT INTO 表1 SELECT * FROM 表2

MySQL 数据库 增删查改、克隆、外键 等操作

方法二:直接克隆

#直接将源表的查询结果给创建的新表
CREATE TABLE 克隆表名(SELECT * FROM 源表名);
SHOW CREATE TABLE 克隆表名\G;					#获取数据表的表结构、索引等信息

注意:直接克隆无法复制原表的 主键、自动增长、约束、索引等配置。 用 LIKE 可以。

MySQL 数据库 增删查改、克隆、外键 等操作

删除记录后主键记录重头开始自增

DELETE FROM 表名;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。
truncate table 表名;
#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。
#相当于直接格式化表

创建临时表

临时表是在当前连接中生效的表。

  • 临时表创建成功之后,使用 SHOW TABLES 命令是看不到创建的临时表的;
  • 临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
例:
CREATE TEMPORARY TABLE TEM_TABLE (ID int(4) PRIMARY KEY, REMARK VARCHAR(20));
INSERT INTO TEM_TABLE VALUES(1001,'临时表');
SELECT * from TEM_TABLE;

MySQL 数据库 增删查改、克隆、外键 等操作

执行 quit 退出连接后,再次登录,就操作不了临时表了

MySQL 数据库 增删查改、克隆、外键 等操作

创建外键约束,保证数据的完整性和一致性

外键的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。
主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)
注意:
1. 与外键关联的主表的字段必须设置为主键。
2. 要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。

#创建主表HOBBY 
CREATE TABLE HOBBY (HOBID int(4),HOBNAME VARCHAR(50));
#创建从表HOBBY_DETAIL 
CREATE TABLE HOBBY_DETAIL (ID int(4) PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),AGE int(3),HOBID int(4));
#为主表HOBBY 添加一个主键约束。主键名建议以“PK_”开头。
ALTER TABLE HOBBY ADD CONSTRAINT PK_HOBID PRIMARY KEY (HOBID);
#为从表HOBBY_DETAIL 表添加外键,并将 HOBBY_DETAIL 表的 hobid 字段和 HOBBY 表的 hobid 字段建立外键关联。
#外键名建议以“FK_”开头。
ALTER TABLE HOBBY_DETAIL ADD CONSTRAINT FK_HOB FOREIGN KEY (HOBID) REFERENCES HOBBY (HOBID);
DESC HOBBY_DETAIL ;
#插入新的数据记录时,要先主表再从表
INSERT INTO HOBBY VALUES(1,'Football');
INSERT INTO HOBBY_DETAIL VALUES(1,'Messi',32,1);

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

#删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表。
DROP TABLES HOBBY_DETAIL ;
DROP TABLES HOBBY ;
#查看和删除外键约束
SHOW CREATE TABLE HOBBY_DETAIL ;
ALTER TABLES HOBBY_DETAIL DROP foreign key FK_HOB ;  #FK_HOB 是之前添加的外键名
ALTER TABLES HOBBY_DETAIL DROP key FK_HOB ;
DESC HOBBY_DETAIL ;

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

MySQL 数据库 增删查改、克隆、外键 等操作

去除外键后就可以删除表了
DROP TABLES HOBBY_DETAIL ;
DROP TABLES HOBBY ;

MySQL 六种约束

  • 主键约束(primary key)
  • 外键约束(foreign key)
  • 非空约束(not null)
  • 唯一性约束(unique [key|index])
  • 默认值约束(default)
  • 自增约束(auto_increment)

key 列值的含义:

如果键是 PRI,则列是主键或多列主键中的列之一。如果键是 UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查NULL字段来判断该列是否允许空。)如果键为 MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。

到此这篇关于MySQL 数据库 增删查改、克隆、外键 等操作的文章就介绍到这了!


Tags in this post...

MySQL 相关文章推荐
将图片保存到mysql数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
MySQL 计算连续登录天数
May 11 #MySQL
mysql 获取相邻数据项
May 11 #MySQL
MySQL脏读,幻读和不可重复读
May 11 #MySQL
MySql数据库 查询时间序列间隔
May 11 #MySQL
Mysql中常用的join连接方式
May 11 #MySQL
MySQL的prepare使用以及遇到的bug
May 11 #MySQL
MySQL批量更新不同表中的数据
May 11 #MySQL
You might like
php实现转换ubb代码的方法
2015/06/18 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python实现队列的方法
2015/05/26 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
机电一体化专业推荐信
2013/12/03 职场文书
会议邀请函范文
2014/01/09 职场文书
宿舍标语大全
2014/06/19 职场文书
踏青活动策划方案
2014/08/19 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
建国大业观后感600字
2015/06/01 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python