Mysql 笔记(二)

来源:互联网 发布:网络教育金融牌照 编辑:程序博客网 时间:2024/06/04 19:24

Mysql 笔记(二)

本文仅是作为学习过程中记录笔记(Mysql菜鸟教程学习的整理):

UPDATE 修改表格数据语法

UPDATE table_name SET field=field_name1, field2=f_val2[WHERE clause]
  • 可以同时更新一个或多个字段
  • 可以在WHERE子句中指定任何条件
  • 可以在单独表中同时更新数据
+-----------+--------------+---------------+-----------------+| runoob_id | runoob_title | runoob_author | submission_date |+-----------+--------------+---------------+-----------------+|         1 | find a job   | q_fight       | NULL            |+-----------+--------------+---------------+-----------------+1 row in set (0.00 sec)mysql> UPDATE runoob_tbl SET submission_date='2017-09-11';mysql> select * from runoob_tbl;+-----------+--------------+---------------+-----------------+| runoob_id | runoob_title | runoob_author | submission_date |+-----------+--------------+---------------+-----------------+|         1 | find a job   | q_fight       | 2017-09-11      |+-----------+--------------+---------------+-----------------+1 row in set (0.00 sec)

DELECT删除数据语法

DELECT FROM table_name [WHERE clause]
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 可以在 WHERE 子句中指定任何条件
  • 可以在单个表中一次性删除记录。
mysql> DELETE FROM runoob_tbl WHERE runoob_id=1;Query OK, 1 row affected (0.00 sec)mysql> select * from runoob_tbl;Empty set (0.00 sec)

LIKE 语法
我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。
WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"
但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

SELECT field1, field2,...fieldN FROM table_nameWHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • where指定任何条件,用like代替=号,LIKE通常与%一同使用,类似于一个元字符的搜索功能。AND/OR指定多个条件,LIKE可以和update delete等结合。
mysql> select runoob_author from runoob_tbl where runoob_title like 'just ';Empty set (0.00 sec)mysql> select runoob_author from runoob_tbl where runoob_title like 'just%';+---------------+| runoob_author |+---------------+| q_fight       || justin        |+---------------+2 rows in set (0.00 sec)

UNION语法
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

SELECT expression1, expression2, ... expression_nFROM tables[WHERE conditions]UNION [ALL | DISTINCT]SELECT expression1, expression2, ... expression_nFROM tables[WHERE conditions];
  • expression1, expression2, … expression_n: 要检索的列。
  • tables要检索的数据表
  • DISTINCT:可选,删除结果中的重复数据,默认是删除的,ALL返回所有的结果数据,包括重复数据。
测试表格+-----------+-------------+| kabble_id | kabble_time |+-----------+-------------+|         1 | 2017-09-11  ||         2 | 2008-10-11  |+-----------+-------------+mysql> select * from runoob_tbl;+-----------+------------------+---------------+-----------------+| runoob_id | runoob_title     | runoob_author | submission_date |+-----------+------------------+---------------+-----------------+|         2 | just learn       | q_fight       | 2017-09-11      ||         3 | just test        | justin        | 2017-09-11      ||         4 | andy story       | doublek       | 2016-10-05      ||         5 | machine learning | NG            | 2013-10-05      |+-----------+------------------+---------------+-----------------+
mysql> select submission_date from runoob_tbl union ALL  select kabble_time from kabble;+-----------------+| submission_date |+-----------------+| 2017-09-11      || 2017-09-11      || 2016-10-05      || 2013-10-05      || 2017-09-11      || 2008-10-11      |+-----------------+

Mysql排序语句

SELECT field1, field2,...fieldN table_name1, table_name2...ORDER BY field1, [field2...] [ASC [DESC]]
mysql> select * from runoob_tbl ORDER BY submission_date DESC;+-----------+------------------+---------------+-----------------+| runoob_id | runoob_title     | runoob_author | submission_date |+-----------+------------------+---------------+-----------------+|         2 | just learn       | q_fight       | 2017-09-11      ||         3 | just test        | justin        | 2017-09-11      ||         4 | andy story       | doublek       | 2016-10-05      ||         5 | machine learning | NG            | 2013-10-05      |+-----------+------------------+---------------+-----------------+

GROUP BY 语句
根据一列或者多列进行分组,在每组可以进行COUNT、SUM 、AVG等函数

SELECT column_name, function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;
mysql> SELECT * FROM employee_tbl;+----+--------+---------------------+--------+| id | name   | date                | singin |+----+--------+---------------------+--------+|  1 | 小明   | 2016-04-22 15:25:33 |      1 ||  2 | 小王   | 2016-04-20 15:25:47 |      3 ||  3 | 小丽   | 2016-04-19 15:26:02 |      2 ||  4 | 小王   | 2016-04-07 15:26:14 |      4 ||  5 | 小明   | 2016-04-11 15:26:40 |      4 ||  6 | 小明   | 2016-04-04 15:26:54 |      2 |+----+--------+---------------------+--------+mysql> SELECT name, count(*) FROM employee_tbl GROUP BY name;+--------+----------+| name   | count(*) |+--------+----------+| 小丽   |        1 || 小明   |        3 || 小王   |        2 |+--------+----------+mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name;+--------+--------------+| name   | singin_count |+--------+--------------+| 小丽   |            2 || 小明   |            7 || 小王   |            7 |+--------+--------------+mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;+--------+--------------+| name   | singin_count |+--------+--------------+| 小丽   |            2 || 小明   |            7 || 小王   |            7 || NULL   |           16 |+--------+--------------+
  • 使用WITH ROLLUP 实现在分组统计的基础上,再进行相同的统计(SUM,AVG,COUNT…)

Mysql连接使用
使用 MySQL 的 JOIN 在两个或多个表中查询数据。
可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

  • INNER JOIN :获得两个表中字段匹配关系的记录
  • LEFT JOIN:左表中所有记录+右表中匹配的
  • RIGHT JOIN:右表中所有记录+左表中匹配的
mysql> SELECT * FROM tcount_tbl;+---------------+--------------+| runoob_author | runoob_count |+---------------+--------------+| 菜鸟教程      |           10 || RUNOOB.COM    |           20 || Google        |           22 |+---------------+--------------+3 rows in set (0.00 sec)mysql> SELECT * from runoob_tbl;+-----------+---------------+---------------+-----------------+| runoob_id | runoob_title  | runoob_author | submission_date |+-----------+---------------+---------------+-----------------+|         1 | 学习 PHP      | 菜鸟教程      | 2017-04-12      ||         2 | 学习 MySQL    | 菜鸟教程      | 2017-04-12      ||         3 | 学习 Java     | RUNOOB.COM    | 2015-05-01      ||         4 | 学习 Python   | RUNOOB.COM    | 2016-03-06      ||         5 | 学习 C        | FK            | 2017-04-05      |+-----------+---------------+---------------+-----------------+
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;+-----------+---------------+--------------+| runoob_id | runoob_author | runoob_count |+-----------+---------------+--------------+|         1 | 菜鸟教程      |           10 ||         2 | 菜鸟教程      |           10 ||         3 | RUNOOB.COM    |           20 ||         4 | RUNOOB.COM    |           20 |+-----------+---------------+--------------+等价于:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;+-----------+---------------+--------------+| runoob_id | runoob_author | runoob_count |+-----------+---------------+--------------+|         1 | 菜鸟教程      |           10 ||         2 | 菜鸟教程      |           10 ||         3 | RUNOOB.COM    |           20 ||         4 | RUNOOB.COM    |           20 ||         5 | FK            |         NULL |+-----------+---------------+--------------+mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;+-----------+---------------+--------------+| runoob_id | runoob_author | runoob_count |+-----------+---------------+--------------+|         1 | 菜鸟教程      |           10 ||         2 | 菜鸟教程      |           10 ||         3 | RUNOOB.COM    |           20 ||         4 | RUNOOB.COM    |           20 ||      NULL | NULL          |           22 |+-----------+---------------+--------------+

NULL值处理

  • IS NULL: 当前列是NULL 返回true
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true
  • 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 ,在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。

事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 只使用了Innodb数据库引擎的数据库或者表才支持事务
  • 事务处理用来维护数据库的完整性,保证成批的语句要么全部执行,要么全部不执行
  • 事务用来管理insert,update,delete语句

事务的四要素:
Atomicity(原子性):要么成功,要么失败
consistency(持久性):有非法数据,事务撤回
isolation(隔离性):事务独立运行,一个事务处理后的结果,影响了其他事物,那么其他事物撤回,事务100%隔离需要牺牲速度。
durability(可靠性):软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候把事务保存到日志里。
事务控制语句

  • BEGIN/START TRANSACTION: 显示开启一个事务
  • COMMIT:提交事务,使对数据的修改永久性
  • ROLLBACK:回滚,会结束用户的事务,撤销所有正在进行未提交的修改。
  • SAVEPOINT identifier:SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT
  • RELEASE SAVEPOINT identifie:删除事务结点
  • ROLLBACK TO identifier:回滚到标记结点
  • SET TRANSACTION:设置事务的隔离性

事务处理两种方法:
1、BEGIN、ROLLBACK、COMMIT实现:

  • BEGIN : 开始一个事务
  • ROLLBACK: 事务回滚
  • COMMIT: 事务确认

2直接用SET改变事务自动提交的模式

  • SET AUTOCOMMIT=0/1 禁止/开始
mysql> select * from runoob_transaction_test;Empty set (0.00 sec)mysql> begin; Query OK, 0 rows affected (0.00 sec)mysql> insert into runoob_transaction_test value(5);Query OK, 1 row affected (0.00 sec)mysql> insert into runoob_transaction_test value(6);Query OK, 1 row affected (0.00 sec)mysql> commit;Query OK, 0 rows affected (0.00 sec)mysql> select * from runoob_transaction_test;+------+| id   |+------+|    5 ||    6 |+------+2 rows in set (0.00 sec)mysql>  begin;Query OK, 0 rows affected (0.00 sec)mysql> insert into runoob_transaction_test values(7);Query OK, 1 row affected (0.00 sec)mysql> rollback; Query OK, 0 rows affected (0.00 sec)mysql>  select * from runoob_transaction_test;+------+| id   |+------+|    5 ||    6 |+------+2 rows in set (0.00 sec)

ALTER 命令
用来修改表名,数据字段等;

1、删除、增加表字段

select * from runoob_tbl;+-----------+---------------+---------------+-----------------+| runoob_id | runoob_title  | runoob_author | submission_date |+-----------+---------------+---------------+-----------------+|         1 | 学习 PHP      | 菜鸟教程      | 2017-04-12      ||         2 | 学习 MySQL    | 菜鸟教程      | 2017-04-12      ||         3 | 学习 Java     | RUNOOB.COM    | 2015-05-01      ||         4 | 学习 Python   | RUNOOB.COM    | 2016-03-06      ||         5 | 学习 C        | FK            | 2017-04-05      |+-----------+---------------+---------------+-----------------+mysql> ALTER TABLE runoob_tbl DROP runoob_author;mysql> select * from runoob_tbl;+-----------+---------------+-----------------+| runoob_id | runoob_title  | submission_date |+-----------+---------------+-----------------+|         1 | 学习 PHP      | 2017-04-12      ||         2 | 学习 MySQL    | 2017-04-12      ||         3 | 学习 Java     | 2015-05-01      ||         4 | 学习 Python   | 2016-03-06      ||         5 | 学习 C        | 2017-04-05      |+-----------+---------------+-----------------+mysql> ALTER TABLE runoob_tbl ADD runoob_author char;mysql> show columns from runoob_tbl;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || runoob_author   | char(1)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+mysql> ALTER TABLE runoob_tbl ADD i INT FIRST;mysql> show columns from runoob_tbl;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| i               | int(11)      | YES  |     | NULL    |                || runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || runoob_author   | char(1)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+mysql> ALTER TABLE runoob_tbl ADD j INT AFTER runoob_id;Query OK, 0 rows affected (0.03 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> show columns from runoob_tbl;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| i               | int(11)      | YES  |     | NULL    |                || runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || j               | int(11)      | YES  |     | NULL    |                || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || runoob_author   | char(1)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+

2、修改字段类型及名称
在ALTER命令中使用MODIFY或CHANGE 子句。

mysql> ALTER TABLE runoob_tbl MODIFY runoob_author INT(10);Query OK, 5 rows affected (0.02 sec)Records: 5  Duplicates: 0  Warnings: 0mysql> show columns from runoob_tbl;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| i               | int(11)      | YES  |     | NULL    |                || runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || j               | int(11)      | YES  |     | NULL    |                || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || runoob_author   | int(10)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+mysql> ALTER TABLE runoob_tbl CHANGE runoob_author KK  INT(10);Query OK, 0 rows affected (0.00 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> show columns from runoob_tbl;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| i               | int(11)      | YES  |     | NULL    |                || runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || j               | int(11)      | YES  |     | NULL    |                || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || KK              | int(10)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+修改字段时,可设置默认值,不设置则为NULLmysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;+-----------------+--------------+------+-----+---------+----------------+| Field           | Type         | Null | Key | Default | Extra          |+-----------------+--------------+------+-----+---------+----------------+| i               | int(11)      | YES  |     | 1000    |                || runoob_id       | int(11)      | NO   | PRI | NULL    | auto_increment || j               | int(11)      | YES  |     | NULL    |                || runoob_title    | varchar(100) | NO   |     | NULL    |                || submission_date | date         | YES  |     | NULL    |                || KK              | int(10)      | YES  |     | NULL    |                |+-----------------+--------------+------+-----+---------+----------------+#删除字段的默认值:mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

修改表名
ALTER TABLE 语句中使用RENAME子句来实现。

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

索引
索引可以大大提高检索速度。

  1. 普通索引
创建CREATE INDEX indexName ON mytable(username(length)); 删除DROP INDEX [indexName] ON mytable; 修改表结构增加索引ALTER table tableName ADD INDEX indexName(columnName)创建表时直接指定CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,  INDEX [indexName] (username(length))  );  
  1. 普通索引
    索引列的值必须是唯一的,如果是组合索引,则列值得组合必须是唯一的。
创建索引CREATE UNIQUE INDEX indexName ON mytable(username(length)) 修改表结构ALTER TABLE table_name ADD UNIQUE [indexName](username(length))

有四种方式来添加数据表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):
    该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
    实例
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);ALTER添加删除主键添加时确保该主键不为空mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

临时表
临时表只在当前连接是可见,当关闭连接后,Mysql会自动删除表并释放所有空间。

创建临时表CREATE TEMPORARY TABLE table_name (column1 type1,...,);手动删除临时表DROP TABLE table_name;

复制表
单纯的CREATE TABLE …. SELECT 命令无法实现完整复制。
完整复制步骤:

  • 使用SHOW CREATE TABLE 命令获取创建数据表语句,该语句包含了原始表的结构,索引等。
  • 复制以下命令显示的SQL语句,修改数据表名
  • 使用INSERT INTO … SELECT 实现。
步骤一:mysql> SHOW CREATE TABLE runoob_tbl \G;*************************** 1. row ***************************       Table: runoob_tblCreate Table: CREATE TABLE `runoob_tbl` (  `runoob_id` int(11) NOT NULL auto_increment,  `runoob_title` varchar(100) NOT NULL default '',  `runoob_author` varchar(40) NOT NULL default '',  `submission_date` date default NULL,  PRIMARY KEY  (`runoob_id`),  UNIQUE KEY `AUTHOR_INDEX` (`runoob_author`)) ENGINE=InnoDB 1 row in set (0.00 sec)步骤二:mysql> CREATE TABLE `clone_tbl` (  -> `runoob_id` int(11) NOT NULL auto_increment,  -> `runoob_title` varchar(100) NOT NULL default '',  -> `runoob_author` varchar(40) NOT NULL default '',  -> `submission_date` date default NULL,  -> PRIMARY KEY  (`runoob_id`),  -> UNIQUE KEY `AUTHOR_INDEX` (`runoob_author`)-> ) ENGINE=InnoDB;步骤三:mysql> INSERT INTO clone_tbl (runoob_id,    ->                        runoob_title,    ->                        runoob_author,    ->                        submission_date)    -> SELECT runoob_id,runoob_title,    ->        runoob_author,submission_date    -> FROM runoob_tbl;Query OK, 3 rows affected (0.07 sec)Records: 3  Duplicates: 0  Warnings: 0

Mysql序列使用
mysql序列是一组整数:1,2,3…,一张数据表只能有一个字段自增主键,如果想实现其他字段也实现自动增加,可以使用mysql序列实现。
- 使用 MySQL AUTO_INCREMENT 来定义列。
- 获取AUTO_INCREMWNT的值:在MySQL的客户端中你可以使用 SQL中的LAST_INSERT_ID( ) 函数来获取最后的插入表中的自增列的值。
- 重置序列,可通过删除自增列,然后重新添加实现。

mysql> ALTER TABLE table_name DROP id;mysql> ALTER TABLE table_name     -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,    -> ADD PRIMARY KEY (id);

设置序列开始值:

默认情况下从1开始,可以指定创建表时指定mysql> CREATE TABLE insect    -> (    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,    -> PRIMARY KEY (id),    -> name VARCHAR(30) NOT NULL,     -> date DATE NOT NULL,    -> origin VARCHAR(30) NOT NULL)engine=innodb auto_increment=100 charset=utf8;创建表完成后设置:mysql> ALTER TABLE t AUTO_INCREMENT = 100;

重复值处理
1、防止出现重复值
指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。

CREATE TABLE person_tbl(    first_name CHAR(20),    last_name CHAR(20),    sex CHAR(10)); #这种情况下不指定索引和主键,因此可能可以多条重复记录CREATE TABLE person_tbl(   first_name CHAR(20) NOT NULL,   last_name CHAR(20) NOT NULL,   sex CHAR(10),   PRIMARY KEY (last_name, first_name)); #这里将first_name、last_name设置双主键,设置了数据的唯一性,主键必须为NOT NULL#如果我们设置了唯一索引,那么在插入重复数据时,SQL语句将无法执行成功,并抛出错。可用 INSERT IGNORE INTOINSERT INTO 插入,前者执行后不会抛出错误。mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)    -> VALUES( 'Jay', 'Thomas');Query OK, 1 row affected (0.00 sec)

2、添加一个UNIQUE索引

CREATE TABLE person_tbl(   first_name CHAR(20) NOT NULL,   last_name CHAR(20) NOT NULL,   sex CHAR(10)   UNIQUE (last_name, first_name));

统计重复数据

mysql> SELECT COUNT(*) as repetitions, last_name, first_name    -> FROM person_tbl    -> GROUP BY last_name, first_name    -> HAVING repetitions > 1;    #确定那一列有重复    #在列选择上用COUNT(*)列出那些列    #GROUP BY子句中列出的列。    #HAVING子句设置重复数大于1。#过滤重复数据mysql> SELECT DISTINCT last_name, first_name    -> FROM person_tbl;

Mysql导出、导入数据

mysql> SELECT * FROM table_name     -> INTO OUTFILE 'path';输出指定格式,用‘,’隔开。SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'LINES TERMINATED BY '\n'FROM test_table;   
  • LOAD DATA INFILE是SELECT … INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT … INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
  • SELECT…INTO OUTFILE ‘file_name’形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此必须拥有FILE权限,才能使用此语法。
  • 输出不能是一个已存在的文件。防止文件数据被篡改。
  • 在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。

导入数据

mysql> LOAD DATA LOCAL INFILE 'file_name' INTO TABLE mytbl;#如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。#可以明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。两个子句都是可选的,但是如果两个同时被指定,FIELDS 子句必须出现在 LINES 子句之前。
原创粉丝点击