实验4 数据操作
在数据库中创建表,只是建立了表结构,里面还没有数据。用户可以使用加载数据语句或插入元组操作来录入数据。数据录入后就可以对表中的数据进行查询、修改、删除等操作了。
【实验目的】
①掌握各种录入数据至表的方法。
②掌握修改表中数据的方法。
③掌握复制数据表(包含结构和数据)的方法。
④掌握删除表中行的方法。
【知识要点】
(1)加载数据的语法格式
LOAD DATA
[LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var
[, col_name_or_user_var] ...)]
[SET col_name = {expr | DEFAULT}
[, col_name = {expr | DEFAULT}] ...]
LOAD DATA语句会以非常高的速度将文本文件中的行读入表中。如果要将表中的数据写入文件,请使用 SELECT ... INTO OUTFILE。
LOAD DATA语句中关键字解释如下:
[LOW_PRIORITY | CONCURRENT] [LOCAL]:如果指定关键词LOW_PRIORITY,LOAD DATA会在其他线程完成之后再操作,但只对那些采用了表级别锁的引擎(如MyISAM)有影响,因为InnoDB使用的是行锁,所以不受影响。若指定关键词CONCURRENT,LOAD DATA会和其他线程同时进行操作,这个对性能是有一些影响。LOCAL是个非常重要的关键字,指明了文件的位置,也会影响到LOAD DATA命令对错误数据的处理方式。如果指定了LOCAL,则表示文件位于客户端,数据从客户端读取,会在服务端的临时目录下创建一份文件的拷贝,建议使用绝对路径,又因为涉及数据传输,所以这种方式会相对慢一些。当某条数据处理有误时,系统把这个错误记录为一个警告,不会影响下一条数据的处理;如果没有指定,则表示文件在服务器端,倘若文件名使用的是相对路径,那么又可以分为两种情况:一种是文件名前没有相对目录,则直接在默认数据库的data目录下查找;另一种是指定了相对目录,则从服务器的data目录下寻找。在处理过程中,如果遇到错误就不会继续执行。
[REPLACE | IGNORE]:当前的数据跟表中的数据有唯一性冲突的时候,如果指定了REPLACE,则替换已有值,如果指定了IGNORE,则忽略当前值。当这两种方式都未指定时,如果数据来自客户端,则重复的数据会被忽略;如果数据来源服务端,则命令会终止执行。
PARTITION:指定具体的分区。
CHARACTER SET:指定字符集。
FIELDS关键字指定了文件字段的分割格式,如果用到这个关键字,则至少有下面的一个选项:
• TERMINATED BY 描述字段的分隔符,默认情况下是tab字符(\t)。
• ENCLOSED BY 描述的是字段的括起字符。
• ESCAPED BY 描述的转义字符,默认的是反斜杠(backslash:\ )。
LINES关键字指定了每条记录的分隔符默认为'\n'即为换行符。
IGNORE number LINES:忽略特定行数,文本文件则可以忽略掉第一行标题。
(2)插入行的语法格式
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
{ {VALUES | VALUE} (value_list) [, (value_list)] ... }
[AS row_alias[(col_alias [, col_alias] ...)]](https://www.daowen.com)
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
SET assignment_list
[AS row_alias [(col_alias [, col_alias] ...)]]
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
{SELECT ...
| TABLE table_name
| VALUES row_constructor_list
}
[ON DUPLICATE KEY UPDATE assignment_list]
value:
{expr | DEFAULT}
value_list:
value [, value] ...
row_constructor_list:
ROW (value_list) [, ROW (value_list)] [, ...]
assignment:
col_name =
value
| [row_alias.] col_name
| [tbl_name.] col_name
| [row_alias.] col_alias
assignment_list:
assignment [, assignment] ...
(3)修改表数据的语法格式
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
(4)删除行的语法格式
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
[PARTITION (partition_name [, partition_name] ...)]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
(5)删除表中全部数据的语法格式
TRUNCATE [TABLE] tbl_name