下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\web\mysql-8.0.15-winx64 下。
打开刚刚解压的文件夹 C:\web\mysql-8.0.15-winx64,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息:
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\\web\\mysql-8.0.11 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 # datadir=C:\\web\\sqldata # 允许最大连接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
1.以管理员身份打开 cmd 命令行工具,切换目录:
cd C:\web\mysql-8.0.15-winx64\bin
2.初始化数据库:
mysqld --initialize --console
3.输入以下安装命令:
mysqld install
4.启动输入以下命令即可:
net start mysql
注意: 在 5.7 需要初始化 data 目录:
cd C:\web\mysql-8.0.15-winx64\bin
mysqld --initialize-insecure
初始化后再运行 net start mysql 即可启动 mysql。
mysql -h 主机名 -u 用户名 -p
参数说明:
- -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
- -u : 登录的用户名;
- -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:
mysql -u root -p
按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应: 密码:w9V9V)#+!r0u
Enter password:
若密码存在, 输入密码登录, 不存在则直接按回车登录。登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。
然后命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。
以下是从命令行中连接mysql服务器的简单实例:
[root@host]# mysql -u root -p
Enter password:******
在登录成功后会出现 mysql> 命令提示窗口,你可以在上面执行任何 SQL 语句。
mysqli_connect(host,username,password,dbname,port,socket);
参数描述
四、创建数据库
CREATE DATABASE 数据库名;
mysql> create DATABASE RUNOOB;
使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库。
所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库。
以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB:
[root@host]# mysqladmin -u root -p create RUNOOB
Enter password:******
以上命令执行成功后会创建 MySQL 数据库 RUNOOB。
使用root登录后,可以使用
CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
创建数据库,该命令的作用:
五、删除数据库
删除数据库
drop database <数据库名>
mysql> drop database RUNOOB;
[root@host]# mysqladmin -u root -p drop RUNOOB Enter password:******
mysqli_query(connection,query,resultmode);
mysql 选择数据库
eg: mysql -uroot -p
123456
mysql>use RUNOOB
就此就选择了 RUNOOB数据库,在后续的操作中,都是在RUNOOB中执行,
注意:所有的字段,表名,都是区分大小写的
使用php脚本选择mysql 数据库
mysql_select_db(connection,dbname)
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
2、varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别
3、MySQL 检查长度,可用 SQL 语言来查看:
select LENGTH(fieldname) from tablename
取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。
2、浮点型(float 和 double)
设一个字段定义为 float(5,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。
3、定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d 4、字符串(char,varchar,_text) char 和 varchar: varchar 和 text: 5.二进制数据(_Blob) 6.日期时间类型 若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。 数据类型的属性 八、mysql 创建数据表 mysql 创建数据表,需要以下信息 1.表名, 2.表字段名, 3.定义每个表字段 创建mysql数据表的语法 eg: RUNOOB 数据库中创建数据表runoob_tbl: php脚本创建表 查询表字段 desc <表名> 语法 DROP TABLE table_name ; 使用PHP脚本删除数据表、 mysqli_query(connection,query,resultmode); 删除表内数据,用delete,格式为: delete from 表名 where 删除条件 eg:删除学生表内姓名为张三的记录 delete from student where t_name = "张三"; 清除表内数据,保存表结构,用truncate.格式为: truncate table 表名; eg:清除学生表内的所有数据 truncate table student; 删除表用drop,就是啥都没了,格式为: drop table 表名 eg:删除学生表 drop table student; 1、当你不需要该表时,用drop 2、当你仍要保留该表,但是要删除所有记录时,用truncate; 3、当你删除部分记录时,用delete. 语法 INSERT INTO table_name (field1,field2,...fieldN) VALUES(value1,value2,..valueN) 如果数据是字符型,必须使用单引号或者双引号,如:"value"。 eg: INSERT INTO runoob_tbl (runoob_title,runoob_author,submission_date) VALUES ('study php','cainiao',NOW()); 读取数据表 select * from runoob_tbl; 使用php脚本插入数据 mysqli_query(connection,query,resultmode); 语法: SELECT column_name,column_name From table_name [WHERE Clause] [LIMIT N] [OFFSET M] 语法: SElECT field1,field2,...fieldN, FROM table_name1,table_name2.. [WHERE condition1 [AND [OR]] condition2...] where 子句的操作符 使用主键来作为WHERE子句的条件查询是非常快速的 如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据 eg:select * from runoob_tbl where runoob_author='cainiao'; mysql 的where 子句的字符串比较式不区分大小写的,你可以使用BINARY 来设定where子句的字符串比较是区大小写的 语法: UPDATE table_name SET field1= new -value1,field2=new -value2 [WHERE Clause] 你可以同时更新一个或多个字段 你可以在WHERE 子句中指定任何条件 你可以在一个表中同时更新数据 当你需要更细数据表中指定行的数据时,WHERE子句是非常有用的。 eg: UPDATE runoob_tbl SET runoob_title='study c++' WHERE runoob_id=3; 再次查询:select * from runoob_tbl WHERE runoob_id=3; update 语句可用来修改表中的数据,简单来说基本的使用形式为: update 语句可用来修改表中的数据, 简单来说基本的使用形式为: update 表名称 set 列名称=新值 where 更新条件; 语法 DELETE FROM table_name [WHERE Clause] 如果没有指定WHERE子句,mysql 表中所有的记录将被删除 你可以在WHERE子句中指定任何条件 您可以在单个表中一次性删除记录 eg:delete from runoob_tbl where runoob_id=1; delete from 表名称 where 删除条件 delete drop truncate 都有删除表的作用,区别在于: delete 和 truncate 仅仅删除表输几局,drop连表数据表结构一起删除,delete 是单杀,truncate是团灭,drop是把电脑摔了 意义:有时后我们需要获取runoob_author 字段含有"com"字符的所有记录,这是我们就需要再WHERE 子句中使用SQL LIKE子句 语法; select field1,field2,field3...fieldN, from table_name where field1,LIKE condition [AND[OR]] filed2 ='somevalue' LIKE 通常与%一同使用,类似于一个元字符的搜索 like 匹配/模糊匹配,会与%和_结合使用 mysql union 操作符用于连接2个以上的select 语句的结果组合到一个结果结合中去,多个select 语句会删除重复的数据 select expression1,expression2,expression3,,,expression_n from tables; [where conditions] union [all |distinct] select expression1,expression2,,,expression_n FROM tables; [WHERE conditions] expression1,expression2,expressionn,要检索的列 tables; 要检索到的数据表 where conditions:可选,检索条件 DISINCT:可选,删除结果集中重复的数据,默认情况下UNION操作符已经删除了重复数据,所以DISTINCT 修饰符对结果没啥影响 ALL:可选,返回所有结果集,包含重复数据, eg: select country from websites union all select country from apps; order by country UNION 语句:用于将不同表中相同列中查询的数据展示出来(不包括重复数据) UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来 (包括重复数据) SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称 SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称 select field1,field2,..fieldn table_name1 table_name2... order by field1,field2,[field2...][ASC [DESC]] 你可以使用任何条件来作为排序的条件,从而返回排序后的查询结果 你可以设定多个字段来排序, 你可以使用ASC或者DESC 关键字来设定查询结果,是按升序或者降序排列, 你可以添加where...like 子句来设置条件 eg:select * from runoob_tbl order by submission_date ASC mysql 拼音排序,如果字符集采用的是gbk(汉字编码字符集,直接在查询语句中后面添加order by select * from runoob_tbl order by runoob_title; 如果字符集采用的是urtf8,需要先对字段进行转码然后排序 select * from runoob_tbl order by convert(runoob_title using gbk); GROUP BY 语句根据一个或者多个列对结果进行分组 selelct column_name ,function(column) FROM table_name WHERE column_name operator value GROUP BY column_name; group by 可以实现一个最简单的去重查询,假设想看下有哪些员工,除了用distinct 外,还可以用 select name from employee_tbl group by name; 返回的结果集就是所有员工的名字 分组后的条件使用HAVING 来限定,where 是对原始数据进行条件限制,几个关键字的使用顺序为where、 group by having,order by select name,sum(*) from employee_tbl where id <> 1 group by name HAVing sum(*) >5 order by sum(*) desc; 十八、mysql 连接的使用 十九、mysql null值处理 is null :当列的值是null ,此运算符返回true is not null 当列的值不为null ,运算符返回true, 二十、mysql 正则表达 eg: 查找name 字段中以‘st’ ,为开头的所有数据 select name FROM person_tbl where name REGEXP '^st' 查找name 字段中以‘ok’ 为结尾的所有数据 select name FROM person_tbl where name REGEXP 'ok$', 查找name 字段中包含‘mar’ 字符串中的所有数据 select name from person_tbl where name REGEXP 'mar' 查找name 字段中以元音字符开头或以‘ok’ 字符串结尾的所有数据 select name from person_tbl whree name REGEXP '^[aeiou] | ok$'; 二十一、mysql 事务 二十二、mysql alert 命令 MYSQL 需要修改数据表名,或者修改数据字段时,就需要用到mysql alter 命令 show columns from testalter_tbl; 如果只剩余一个字段,则无法使用drop 删除字段 mysql 中使用add 子句来向数据表中添加列,如下列在表testalter_tbl中添加i字段,并定义数据类型 ALTER TABLE testalter_tbl ADD i INT; 如果要指定新增字段的位置,可以使用mysql 提供的的关键字first,alter 字段名 ALTER TABLE testalter_tbl DROP i; 修改字段类型及名称 ALTER TBALE testalter_tbl MODIFY c CHAR(10); 使用CHANGE 子句,语法有很大的不同,在CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段及名称 ALTER TABLE testalter_tbl CHANGE j j INT; ALTER TABLE 对NULL值和默认值的影响 eg:指定字段j为not null 且默认值为100 如果不设置默认值,mysql 会自动设置改字段默认值为null, 修改字段默认值 你可以使用ALTER 命令及DROP 自己来删除字段的默认值 修改数据表类型,可以使用alter命令及type子句来完成,尝试以下实例,我们将表testalter_tbl的类型修改为MYISAM; ALTER TABLE testalter_tbl ENGINE = MYISM; 修改表名 alter 其他用途: 删除外键约束,keyName 是外键别名 alter table tableName drop foreign key keyName; 修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型 ,first和alter 二选一 alter table tableName modify name1 type1 first|after name2; mysql 索引 MYSQL 临时表 DROP TABLE saleSummary --MYSQL 复制表 可以将新建的表的字段改名 --MYSQL 序列使用 使用函数创建自增序列管理表 第一步,创建Sequence 管理表 sequence; 第三步:创建取下一个值的函数 nextval 第四步:创建更新当前值的函数 setval 测试函数功能 SELECT SETVAL('TestSeq', 10); SELECT CURRVAL('TestSeq'); SELECT NEXTVAL('TestSeq'); --mysql 处理重复数据 MYSQL 导出数据 --使用select ...into outfile 语句导出数据 select * from runoob_tbl 1.mysql 命令导入
CREATE TABLE table_name (column_name column_type);
mysql> CREATE TABLE runoob_tbl(
-> runoob_id INT NOT NULL AUTO_INCREMENT,
-> runoob_title VARCHAR(100) NOT NULL,
-> runoob_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( runoob_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysqli_query(connection,query,resultmode);
八、删除数据表
九、mysql插入数据
十、mysql 查询数据
十一、mysql where 子句
十二、mysql update查询
十三、mysql delete 语句
十四、mysql LIKE
十五、MYSQL UNION 操作符
十六、mysql 排序
十七、mysql GROUP BY
INNER JOIN(内连接,或等值连接) 获取两个表中字段匹配的记录
LEFT JOIN (左连接) 获取左表所有记录,及时右表没有对应匹配的记录
RIGHT JOIN(右连接) 与left join 想反,用于获取右表所有记录,即使左表没有对应匹配的记录
eg: select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a,tcount_tbl b where a.runoob_author = b.runoob_author
create table testalter_tbl
(
i INT,
c char(1)
)
删除、添加或者修改字段
alter table testalter_tbl drop i;
尝试以下alter table 语句,在执行成功后,使用show columns 查看表结构变化
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
如果需要修改字段类型及名称,你可以在ALTER命令中使用modify 或change 子句来向数据表中添加列,如下列在表testalter_tbl中添加i字段,并定义数据类
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
ALTER TABLE testalter_tbl
MODIFY j BIGINT NOT NULL DEFAULT 100;
--可以使用alter 来修改字段的默认值,
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
SHOW COLUMNS FROM testalter_tbl;
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
SHOW COLUMNS FROM testalter_tbl;
SHOW TABLE STATUS LIKE 'testalter_tbl';
如果需要修改数据表的名称,可以在ALTER TABLE 语句中使用rename子句来实现
eg:ALTER TABLE testalter_tbl RENAME TO alter_tbl;
修改存储引擎,修改为myisam;
alter table tableName engine = myisam;
这应该显而易见,first 放在第一位,after 放在name2 字段后面
索引可以大大提高mysql 的检索速度;
创建索引时你需要确保该索引时应用在sql 查询语句的条件
普通索引
创建索引
CREATE INDEX indexName ON mytable(username(length));
如果是char varchar 类型,length可以小于实际字段的长度;如果是BLOB和TEXT类型,必须指定length;
修改表结构(添加索引)
ALTER TABLE tableName ADD INDEX indexName(columnName)
创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
删除索引的语法
DROP INDEX [indexName] ON mytable;
唯一索引
创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length));
创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
)
使用ALTER 命令添加和删除索引
有四种方式来添加数据表的索引
ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)
该语句添加一个主键,这就意味着索引值必须是唯一的,且不能为null,
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list);这条语句创建的索引的值必须是唯一的,(除了null之外)
ALTER TABLE tbl_name ADD INDEX index_name(column_list)添加普通索引,索引值可出现多次
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list);该语句指定了索引为FULLTEXT ,用于全文索引
eg:
ALTER TABLE testalter_tbl ADD INDEX(c);
还可以在alter 命令中使用drop 子句来删除索引,
eg: ALTER TABLE testalter_tbl DROP INDEX c;
使用ALTER 命令添加和删除主键
--主键只能作用于一个列上,添加主键索引时,你要确保该主键默认不能为空(not null)
ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY(i);
也可以使用ALTER 命令删除主键
ALTER TABLE testalter_tbl DROP PRIMARY KEY;
删除主键时,只需指定PRIMARY KEY 但在删除索引时,你必须知道索引名
显示索引信息
--可以使用show index 命令来列出表中的相关的索引信息,可以通过添加G\来格式化输出信息
SHOW INDEX FROM table_name; \G
当php执行完成之后,该临时表也会自动销毁
--创建mysql 临时表 saleSummary
CREATE TEMPORARY TBALE SaleSumary (
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
INSERT INTO SaleSumary
(product_name,total_sales,avg_unit_price,total_units_sold)
VALUES
('cucumber',100.25,90,2)
当使用show tables 命令系那是数据表列表时,你将无法看懂SalesSummary 表
当你退出 当前mysql 会话,再使用select 来读取原来创建的临时表那你会发现没有该表的存在。
--删除mysql 临时表
CREATE TEMPORARY TABLE SaleSumary(
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
INSERT INTO saleSummary
(product_name,total_sales,avg_unit_price,total_units_sold)
VALUES
('cucumber',100.25,90,2);
SELECT * FROM SaleSumary;
使用SHOW CREATE TABLE 命令获取创建数据表(create table),该语句包含了数据表的结构,索引等
如果你想复制表的内容,你就可以使用INSERT INTO ...SELECT 语句来实现
复制完整表的的方法
CREATE TABLE targetTable LIKE sourceTable ;
INSERT INTO targetTable SELECT * FROM sourceTable;
其他:
可以拷贝一个表中的一些字段
CREATE TABLE newadmin AS
(
SELECT username,password FROM admin
)
CREATE TABLE newadmin AS
(
SELECT id,username AS uname,password AS pass FROM admin
)
可以拷贝一部分数据
CREATE TABLE newadmin AS
(
SELECT * FROM admin WHERE LEFT(username,1) = 's'
)
可以在创建表的同时定义表中的字段信息
CREATE TABLE newadmin
(
id INTEGERR NOT NULL AUTO_INCREMENT PRIMARY KEY
)
AS
(
SELECT * FROM admin
)
mysql 复制表结构到新表
create table 新表 select * from 旧表 where 1 =2
或者 create table 新表 like 旧表
create table 新表 select * from 旧表
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
第二步:创建取当前值的函数 currval
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$
DELIMITER ;
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER;
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;
INSERT INTO sequence VALUES ('TestSeq', 0, 1);
----添加一个sequence名称和初始值,以及自增幅度 添加一个名为TestSeq 的自增序列
---设置指定sequence的初始值 这里设置TestSeq 的初始值为10
--查询指定sequence的当前值 这里是获取TestSeq当前值
--查询指定sequence的下一个值 这里是获取TestSeq下一个值
你可以在mysql 数据表中设定的字段为PRIMARY key(主键) 或者unique(索引) 来保证数据的唯一性
eg:下面的表允许重复的值出现
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
如果你想这只表中的字段first_name ,last_name,数据不能重复,你可以设置双主键模式来设置数据的唯一性,如果你设置了双主键,那么那个建的默认值不能为null,可设置成not null,
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)
);
INSERT IGNORE INTO 与 INSERT INTO 的区别就是INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库中没有数据,就插入新的数据,
INSERT IGNORE INTO person_tbl(last_name,first_name)
values ('jay','Thomas');
INSERT IGNORE INTO person_tbl (last_name,first_name)
values ('jay','Thomas')
INSERT IGNORE INTO 当插入数据时,子设置记录的唯一性后,如果插入重复的值,将不会反悔错误,只以警告的的形式返回,而REPLACE INTO
如果存在primary 或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)
)
--统计重复数据
以下,我们将统计表中first_name ,和last_name,的重复记录数
Select COUNT(*) as repetitions ,last_name,first_name
from person_tbl
group by last_name,first_name
HAVING repetitions >1;
以上查询语句将返回person_tbl 表中重复的记录数,一般情况下,查询重复的值,请执行以下操作
确定哪一列包含的值可能会重复
在列选择列表使用COUNT(*) 列出的那些列
在GROUP BY 子句找那个列出的列
HAVING 子句设置重复复数大于1。
过滤重复数据
如果你需要读取不重复的数据,可以在select 语句中使用DISTINCT 关键字来过滤重复的数据
select distinct last_name,first_name
from person_tbl;
也可以使用GROUP BY 来读取数据表中不重复的数据;
select last_name,first_name
from person_tbl
GROUP BY(last_name,first_name);
删除重复数据
如果你想删除重复的数据,可以使用
create table tmp select last_name,first_name,sex,from person_tbl GROUP BY(last_name,first_name,sex);
drop table person_tbl;
alter table tmp rename tp person_tbl;
当然你也可以在数据中添加index(索引), 和primary key(主键),这种简单的方式来删除表中的重复记录,
alter ignore table person_tbl
add primary key (last_name,first_name);
into outfile '/tmp/runoob.txt';
mysql 导入数据
mysql -u 用户名 -p密码 <要导入的数据库数据(runoob.sql)
source 命令导入
create database abc 创建数据库
use abc 使用已创建的数据库
set names utf8 设置编码
source/home/abc/abc.sql 导入备份数据库