同城可以做别人一样的门户网站吗,建网站的平台,公司制作官网,优秀网站大全文章目录 1.插入记录INSERTREPLACE 2.删除记录3.修改记录4.备份还原数据参考文献 1.插入记录
INSERT
使用 INSERT INTO 语句可以向数据表中插入数据。INSET INTO 有三种形式。
INSET INTO tablename SELECT...INSET INTO tablename SET column1value1,column2value2...INSET… 文章目录 1.插入记录INSERTREPLACE 2.删除记录3.修改记录4.备份还原数据参考文献 1.插入记录
INSERT
使用 INSERT INTO 语句可以向数据表中插入数据。INSET INTO 有三种形式。
INSET INTO tablename SELECT...INSET INTO tablename SET column1value1,column2value2...INSET INTO tablename(column1,column2,...) VALUES(value1,value2,...);以下是一些插入示例。
# 使用 SELECT 结果集进行插入
INSET INTO tbl_name1 SELECT * FROM tbl_name2;# 注意tbl_name2 数据表的定义要与 tbl_name1 相同不同的话则需要指定需要插入的列
INSET INTO tbl_name1(col0,col1,col2) SELECT col0,col1,col2 FROM tbl_name2;# 使用 INSET INTO SET
INSET INTO student SET
namelvlv0, schoolsoftware, gradefirst year,majorsoftware engineering,gender0# 插入一行
INSET INTO student(name,school,grade,major,gender)
VALUES(lvlv,software,first year,software engineering,0);# 如果插入值刚好与数据表的所有列一一对应那么可以省略书写插入的指定列
INSET INTO student
VALUES(lvlv,software,first year,software engineering,0);# 插入多行
INSET INTO student VALUES
(lvlv,software,first year,software engineering,0),
(lvlv1,software,first year,software engineering,0);REPLACE
除了使用 INSERT 语句向数据表中插入数据还可以使用 REPLACE 进行插入。
如果发现表中已经有此行数据根据主键或者唯一索引判断则先删除此行数据然后插入新的数据否则直接插入新数据。
REPLACE INTO tbl_name(col_name, ...) VALUES(...)REPLACE INTO tbl_name(col_name, ...) SELECT ...REPLACE INTO tbl_name SET col_namevalue, ...REPLACE 语句会返回一个数来指示受影响的行数目。该数是被删除和被插入的行数和。如果一行被插入同时没有行被删除则返回 1。如果表包含多个唯一索引并且新行包含了多个不同唯一索引的旧值则有可能是一个单一行替换了多个旧行。如果在新行被插入前有一个或多个旧行被删除则返回值大于 1。
频繁的 REPLACE INTO 会造成新纪录的主键的值迅速增大。总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了不是因为空间不够了而是因为主键的值没法再增加了。
如果因唯一索引导致旧行被删除新纪录与老记录的主键值不同所以其他表中所有与本表老数据主键建立的关联全部会被破坏。
2.删除记录
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias][PARTITION (partition_name [, partition_name] ...)][WHERE where_condition][ORDER BY ...][LIMIT row_count]比如删除学号为 10000 的学生记录。
DELETE FROM student WHERE FROM student_no10000;3.修改记录
UPDATE [LOW_PRIORITY] [IGNORE] table_referenceSET assignment_list[WHERE where_condition][ORDER BY ...][LIMIT row_count]value:{expr | DEFAULT}assignment:col_name valueassignment_list:assignment [, assignment] ...比如将学号为 10000 的学生性别改为女性。
UPDATE student SET gender1 WHERE student_no1000;如果要更新的列是一个 JSON 类型比如设置列为 JSON 数组。
UPDATE my_table SET my_json JSON_SET(my_json, $, JSON_ARRAY(apple, banana, orange)) WHERE id 1;这里只列出简单的增删改的 DML 操作关于全面基础的 DML 操作请参考 MySQL 官方文档。
4.备份还原数据
mysqldump 是用于转存储 MySQL 数据库的实用程序。
利用 mysqldump 可以用最少的命令来帮助备份数据库。使用一条简单的命令便可将整个数据库输出到单个文本文件中。 该工具用途广泛足以备份所需的数据库部分并提供多种选项来更改需要保存的数据。
1导出数据库的所有数据表。
# 命令格式
mysqldump -u 用户名 -p 数据库名 导出的文件名# 示例
mysqldump -u user_name -p123456 database_name outfile_name.sql2还原整个数据库。
在命令行选择一个数据库之后直接执行 SQL 文件即可。
mysql source file.sql;3导出一个表到 SQL 文件。
# 命令格式
mysqldump -u 用户名 -p 密码 数据库名 表名导出的文件名# 示例
mysqldump -u user_name -p pwd database_name tbl_name outfile.sql4导入 SQL 文件。
方法同还原整个数据库。
5将数据表导出到 CSV 文件。
# 命令格式
SELECT * FROM [TABLE] INTO OUTFILE [FILE];# 或
SELECT * FROM [TABLE] INTO OUTFILE [FILE] FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY LINES TERMINATED BY \n; # 示例
SELECT * FROM student INTO OUTFILE student.csv;如果不指明输出文件的输出目录默认输出至数据库文件的存储目录。可使用命令find / -name student.csv来查看具体位置。
如果使用指定csv文件输出目录的话报如下错误 ERROR 1 (HY000): Cant create/write to file (Errcode: 13)错误的原因是所在目录没有写权限给所在的目录增加写权限即可。
6导入 CSV 文件。
# 命令格式
LOAD DATA INFILE file INTO TABLE [TABLE]; # 或
LOAD DATA INFILE file INTO TABLE [TABLE] FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY LINES TERMINATED BY \n;# 示例
LOAD DATA INFILE file.csv INTO TABLE student;导入 CSV 文件时有几点需要注意。
指定 csv 文件时使用绝对路径否则 MySQL 默认从数据库存储的目录寻找。在导入时如果出现如下错误
ERROR 13 (HY000) at line 1: Cant get stat of /fullpath/file.csv (Errcode: 13)检查之后并非文件没有可读权限请使用LOAD DATA LOCAL INFILE。
MySQL客户端与服务端在同一台主机时加不加 LOCAL 是一样的因为因为默认从服务器端读取文件。
MySQL客户端与服务端不在同一台主机时即使用本 MySQL 客户端将本地数据导入远程 MySQL需要加 LOCAL。
默认域分隔符为Tab空格或其它分隔符需显示指定。
7导入 EXCEL 文件。
同导入 CSV 文件的方法一致。注意导入文件时都需要提前建立好与文件内各个段对应好的数据表并且文件的路径需要使用引号括起来双引号和单引号都可以。
8导出远程 SELECT 结果集到本地。
使用如下方法不可行因为这个语句并不是在MySQL客户端而是在MySQL服务器上执行的通常用于服务器管理员在服务器机器上进行数据备份使用由于MySQL客户端账号并没有访问服务器机器本身的权限所以这个SQL执行不会成功。即使有权限SELECT 结果集会被导出到MySQL服务端而非本地。
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e SELECT * FROM tbl_name WHERE condition INTO OUTFILE /tmp/file.txt正确方法使用重定向的方式将 SELECT 结果导出到本地。
mysql -h10.10.10.10 -ucrazyant -p123456 -P3306 -e SELECT * FROM tbl_name WHERE condition /tmp/file.txt参考文献
MySQL 8.0 Reference Manual :: 13.2.7 INSERT Statement MySQL 8.0 Reference Manual :: 13.2.12 REPLACE Statement MySQL 8.0 Reference Manual :: 13.2.2 DELETE Statement MySQL 8.0 Reference Manual :: 13.2.9 LOAD DATA Statement