[原创+转载]mysql的一些基本操作语法

命令的简单使用 : 以下是标准的SQL语句 

显示数据库:

show databases;

建数据库:   

create database 数据库名;

选定数据库:

 use 数据库名;

显示表的列表:

 show tables;

建立表:

use 数据库名;
create table 表名 (字段名1 类型,字段名2 类型,字段名3 类型,…);

删除库:

drop database 库名;

删除表:

drop table 表名;

显示表结构:

desc 表名;

修改表结构:

增长一个字段; alter table 表名 add 字段名  类型;
删除一个字段: alter table  表名 drop 字段名;
修改一个字段的属性:  alter table 表名modify 字段 新属性;
修改主键: 增加一个主键  alter table 表名 add primary key(字段名);
删除一个主键  alter table 表名  drop primary key(字段名);

增删查改的基本操作:

添加记录:

insert into 表名 values(字段1的值,字段2的值,字段3的值,…);

删除记录:

delete from 表名 where 条件;

更新记录:

update 表名 set 字段名=值 where 条件;

改表名:

RENAME TABLE 旧表中  TO  新表名;

查询:

select *[字段名, ....] from 表名 [where条件];

LIKE 运算符:

select *[字段名, ....] from 表名 [like "_字%"];

通配符 描述 示例:
% 通配零个或多个任意字符 
_(下划线) 通配任意一个字符 

limit 运算符:

select * from 表名 limit 2,5;

记录排序:

利用order by 对记录进行排序
格式:select 字段名列表 from 表名 [where 条件] order by 排序字段1 [asc ] [desc] [排序字段2……];
如:按年龄对yuangong表进行升序排列!
Select  * from yuangong order by 年龄  asc; (升序asc可以省略)
如:按年龄对yuangong表进行降序排列!
Select  * from yuangong order by 年龄  desc;

聚集函数:

最大值:max()       最小值 min()    平均值avg() 
求和:   sum()        汇总: count ()
如:求每个部门的基本工资平均值
select 部门,avg(基本工资)  as 部门基本工资 from 员工表 group by 部门
显示平均基本工资大于3000的部门
Select  部门,avg(基本工资) from 员工表 group 部门 where avg(基本工资)>3000
此句错误。SQL规定在分组中使用条件不能用 Where 而是用 having
Select  部门,avg(基本工资) from 员工表 group by  部门 having avg(基本工资)>3000
多表查询:
一个数据库中的多个表,存在一定的联系,怎么样正常的显示这么表的信息?
现在有三个表:
yg
Name  sex  age  
宋洋  男   20  
马冬旭 女   40  
 Gs
Name   title      date       单位
宋洋   AD详解 2006-11-10  清华大学
马冬旭 linux    2005-01-01   人民大学
 dz
单位     地址
清华大学  五道口
人民大学   黄庄

第一种方法称为:交叉连接,在SQL SERVER中又称为笛卡尔乘积
但是要注意的默认生成的记录总数是两表记录之积
select * from yg,gs;
select * from yg,gs where yg.name=gs.name;
这才是我们想要的记录
第二种方法是用join连接:
内连接
select * from yg join gs on yg.name=gs.name 
左外连接
右外连接
但没有全外连接
联合:
除了连接,mysql4。0以上的版本还支持UNION运算符,它用来把多个select查询号的输出连接成一个单独的结果集。大多数情况下,这个运算符用来把查询产生的结果集添加到不同的表,同时创建包括所有结果的一个单独表。比如面试的时候问你,有两个表,字段信息一样,让你用一条语句把两个表的信息组合为一个单独的表!
为了说明UNION运算符的使用方法,我们举一个例子:现在有两个表,分别存放的是男同学信息和女同学信息,如果用一个语句将所有同学的信息显示出来!
mysql> select * from nan;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聪留 |    80 |
| 费优优 |    81 |
| 曲权   |    82 |
+--------+-------+
3 rows in set (0.00 sec) mysql> select * from nv;
+------+-------+
| name | score |
+------+-------+
| 彭红 |    80 |
| 费红 |    81 |
| 曲红 |    82 |
+------+-------+
3 rows in set (0.00 sec)
mysql> select * from nan union select * from nv;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聪留 |    80 |
| 费优优 |    81 |
| 曲权   |    82 |
| 彭红   |    80 |
| 费红   |    81 |
| 曲红   |    82 |
+--------+-------+
6 rows in set (0.00 sec)
那如果有三个表怎么办?也是一样的操作!
但注意的是如果两个表的某条记录信息完全一致,则只显示为一条;如果想显示全部记录则在union后 加 all
mysql> select * from nan union all  select * from nv;
如果面试官又问你,如果想把显示的信息保存到一个表中怎么办?
mysql> create table 表名 select 语句;
数据库备份与恢复:
备份:
第一种方法:   mysqldump
备份一个表 mysqldump  -h主机名  –u用户名 –p口令 数据库  表名 >文本文件
                恢复: mysql   -h  主机名 –u用户名 –p口令 数据库 <文本文件
备份一个数据库中的两个表或是多个表怎么办?
  Mysqldump –h 主机名 –u用户名 –p口令 数据库 表名1 表名2  >文本文件
 恢复的时候: mysql –h 主机名 –u用户名 –p 口令 数据库<文本文件
备份整个数据库:
格式: mysqldump –u用户名  -p密码 数据库名>文本文件名
如:C:\test>mysqldump -uroot -p111111 net14  >net14.txt
删除数据库net14:         drop database net14
进行恢复:
C:\test>mysql -u root  -p111111 net14<net14.txt
ERROR 1049 (42000): Unknown database 'net14'
报错.说找不到数据库net14;
必须先手工建立一个空的net14数据库,然后才能把数据导进来!
C:\test>mysql -u root  -p111111 net14<net14.txt
那还有一个问题,如果想同时备份两个以上的数据库怎么办?
格式: mysqldump –u用户名  -p密码  -B 数据库1   数据库2 >文本文件名
如:    C:\test>mysqldump -uroot -p111111 -B net14 net28  >net1428.txt
然后删除net14和net28再进行恢复
但是要注意:必须一个一个的恢复,不能同时恢复两个:
如: C:\test>mysql -uroot -p111111 -B net14   <net1428.txt
C:\test>mysql -uroot -p111111 -B net28   <net1428.txt
第二种方法:  select into 作备份:这相对于第一种方法就简单多了!
格式:  select 语句 into outfile “路径及文件名”;
如: mysql> select * from student into outfile 'c:\\abc1.txt';
Query OK, 13 rows affected (0.00 sec)
注意:
1.路径中的盘符后是两个\\,其中第一个代表转义作用,第二个才是代表根目录.有时写成一个\时不会报错,因此要注意检查备份的正确性;
2.不允许重写文本文件;
恢复方法:
那么怎么恢复呢::
用LOAD DATA来恢复:
格式: load data infile ‘路径及文件名’ into table 表名
如: load data infile 'c:\\student.txt' into table student;
注意:表必须存在.可用delete,清空其中的所有记录 或者用: truncate 表名,只删除记录,不删除结构!
如果恢复出错怎么办?
1. 权限问题.
2. 分界符不匹配!
3. 路径和文件名不对!
数据的导入/导出:
如何与其他数据源之间进行数据的导入与导出!
例如:如何将  SQL server 的数据导到mysql中来
1. 先在MS SQL 2000的导入导出工具将数据导出成*.txt文件格式
注意打开backup.txt
观察其中的分隔字符 MS SQL 2000好像是用逗号分隔的
2. 在mysql中利用 load data infile 命令导入
mysql> load data infile 'c:\\sql.txt' into table abc fields terminated by ',';
Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0
注意  目标表必须已经存在,并结构要与源表的结构相同!
ACCESS 导到 MYSQL:
1. 先建立一个access文件,保存成文本文件
2. 打开文本文件,再转换一下编码成ansi
3. 建立数据库,导入到mysql中!
mysql> load data infile 'c:\\abc1.txt' into table abc fields terminated by ',';
Query OK, 3 rows affected (0.00 sec)
EXCEL 导到mysql
 步骤同上。只是要注意的是:excel默认是以 TAB 分隔的所以应用以下的语句:
mysql> load data infile 'c:\\book1.txt' into table abc fields terminated by '\t';

本文出自 “杜飞” 博客!
外加小小的修改


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值