职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1478|回复: 4

Mysql数据库操作新手入门,手把手的教会你

[复制链接]
cayean 发表于 2007-4-23 13:11 | 显示全部楼层 |阅读模式
由于新手入门PHP+Mysql技术,必定对Mysql操作存有疑问。

  尽管PHPMyadmin管理数据库对新手来说也不妨为一种很好的方式。但更多的实际使用还要靠大家对Myql语句格式
的精通和熟练的操作。

  为了方便新手尽快入门,掌握Mysql的奥妙。在下费了一个礼拜时间的调试和整理,终于完稿了这份比较完善的入
门级操作实例的指南。希望能给新入门的朋友扬帆指路,送一满帆的顺风。



Mysql4.1.10初级解读

※※※※※※※※※※※※※※Mysql 初级解读 (所用版本:4.1.10)※※※※※※※※※※※※※※

安装注意事项
在安装的过程中,请记好您的密码,这是将来登录mysql的钥匙。


=======================无==敌==分==割==线=======================

一、Mysql数据库服务器登录

登录mysql需要切换到dos下的mysql的bin目录,进行如下操作:

语法格式:mysql -h host_name -u user_name -p password  (本机的话-h 和host_name可省)

----------------------我------------割--------------------------

My Experience:

C:program filesmysqlmysql server 4.1bin>mysql -u root -p
Enter password:******
先输入用户名和密码登陆要求(加上-p),回车后等出现\"Enter password:\",再输入密码回车,这样就可以
成功登陆mysql,否则将会登陆失败。

----------------------我------------割--------------------------

登陆成功后会显示如下信息:

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 4.1.10-nt

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>


标识\"mysql>\",当你看到这个出现在窗口的最左边的顶格时,这就是告诉你,你可以输入命令进行操作了。

    mysql> s 查看版本信息
mysql> q or mysql> quit 退出mysql数据库服务器
mysql> h or mysql> help 查看帮助(其他的数据库服务器相关命令)



=======================无==敌==分==割==线=======================


二、数据库操作

所要注意的是,所有举例的显示结果,均为下面操作步骤按顺序进行的结果。


----------------------我------------割--------------------------

2.1 查询语句

2.1.1 查看Mysql数据库的版本号和服务器的当前日期
  mysql> select version(),current_date;  (操作方式一)

  mysql> select version()
   -> ,current_date;       (操作方式二)

  ※:操作语句间用\",\"隔开,用\";\"来表示操作结束,操作语句输入过程中,换行不影响操作过程。

2.1.2 查看服务器中的所有数据库
  mysql> show databases;

----------------------我------------割--------------------------

2.2 创建数据库

2.2.1 创建数据库(当然,数据库名\"asb\"不能是已经存在的)
  mysql> create database asb;

2.2.2 选用数据库,使其成为当前操作的数据库
  mysql> use asb;

  成功选中后会有如下显示:
  Database changed

  甚至可以在窗口命令登陆mysql数据库的时候直接选中要操作的数据库(当然前提是asb数据库存在)
  bin>mysql asb -u uesername -p
  Enter password:******

2.2.3 查看当前所操作的数据库名称
  mysql> select database();

  运行后结果如下:
  +------------+
  | database() |
  +------------+
  | asb   |
  +------------+
  1 row in set (0.00 sec)

----------------------我------------割--------------------------

2.3 创建表

2.3.1 用\"create table\"创建表(确认是要在当前数据库中创建,不是的话就先用'use'选中要创建表的那个数据库)

  mysql> create table emp(emp_id varchar(6)
   -> ,emp_name varchar(10)
   -> ,emp_age int
   -> ,emp-sal int
   -> ,emp_bir date
   -> ,emp_sex varchar(5)
   -> );

2.3.2 查看当前数据库中的表(可以检验上例的\"emp\"表是否成功建立)
  mysql> show tables;

  如果是成功将是如下显示:

  +---------------+
  | Tables_in_asb |
  +---------------+
  | emp    |
  +---------------+
  1 row in set (0.00 sec)

2.3.3 查看数据表的结构
  mysql> describe emp;

  运行后结果会如如下显示:

  +----------+-------------+------+-----+---------+-------+
  | Field  | Type   | Null | Key | Default | Extra |
  +----------+-------------+------+-----+---------+-------+
  | emp_id  | varchar(6) | YES |  | NULL  |   |
  | emp_name | varchar(10) | YES |  | NULL  |   |
  | emp_age | int(11)  | YES |  | NULL  |   |
  | emp_sal | int(11)  | YES |  | NULL  |   |
  | emp_bir | date   | YES |  | NULL  |   |
  | emp_sex | varchar(5) | YES |  | NULL  |   |
  +----------+-------------+------+-----+---------+-------+

----------------------我------------割--------------------------

2.4 插入数据

2.4.1 使用INSERT语句进行插入记录操作(数据库表中每一行就是一个记录,插入记录实际上就是向表中插入一行)

  格式:INSERT INTO table_name(数据表名) VALUES(值1,值2,值3...);

  在VALUES关键字后括号中的数值和字符段,必须和你所建的表所定义的字段数据类型必须一致!

  mysql> insert into emp values
   -> ('100005','啸天',27,3000,'1979-07-10','male');

  插入成功后会有如下信息显示:
  Query OK, 1 row affected (0.03 sec)


2.4.2 查看表中的数据(可以确定数据是否已经成功插入)
  mysql> select * from emp;

  成功插入后的数据显示如下:

  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  3000 | 1979-07-10 | male  |
  +--------+----------+---------+---------+------------+---------+
  1 row in set (0.00 sec)

  一次性插入多行的格式:INSERT INTO table_name(数据表名) VALUES(值1,值2,值3...),(值1,值2,值3...);

  mysql> insert into emp values
   -> ('100001','红枫',29,8000,'1977-01-01','male'),
   -> ('100002','丽鹃',27,7000,'1979-12-31','fmale');

  可以查看插入后的数据结果:

  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  3000 | 1979-07-10 | male  |
  | 100004 | 红枫  |   29 |  8000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  7000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  3 rows in set (0.00 sec)


----------------------我------------割--------------------------

2.5 修改数据

2.5.1 使用UPDATE语句来更新表中的数据
  mysql> update emp set emp_id=100001 where emp_name='红枫';

  修改结果显示如下:

  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  3000 | 1979-07-10 | male  |
  | 100001 | 红枫  |   29 |  8000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  7000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  3 rows in set (0.00 sec)

  如果该语句没有后面的where限制,将会对表中所有的记录都进行修改。
  如,给全部人加薪1000,可以如下修改:
  mysql> update emp set emp_sal=emp_sal+1000;

  修改结果显示如下:

  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  3 rows in set (0.00 sec)

----------------------我------------割--------------------------

2.6 高级查询方法

2.6.1 记录查询

  查询emp表中,emp_name为啸天的全部信息
  mysql> select * from emp where emp_name='啸天';

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  +--------+----------+---------+---------+------------+---------+
  1 row in set (0.00 sec)

  查询emp表中,emp_sal,工资在5000以上的全部信息
  mysql> select * from emp where emp_sal>5000;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  2 rows in set (0.00 sec)

  查询emp表中在1978年1月1日之后出生的
  mysql> select * from emp where emp_bir>'1978-01-01';

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  2 rows in set (0.00 sec)

  查询emp表中在1979年12月1日之前出生,工资在5000以上的
  mysql> select * from emp where emp_bir<&#39;1979-12-01&#39; and emp_sal>5000;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  +--------+----------+---------+---------+------------+---------+
  1 row in set (0.00 sec)

2.6.2 字段查询

  CEO查看员工工资情况
  mysql> select emp_name,emp_sal from emp;

  查询结果显示如下:
  +----------+---------+
  | emp_name | emp_sal |
  +----------+---------+
  | 啸天  |  4000 |
  | 红枫  |  9000 |
  | 丽鹃  |  8000 |
  +----------+---------+
  3 rows in set (0.00 sec)

  查看1978年后出生的人的姓名、工资和性别
  mysql> select emp_name,emp_sal,emp_sex from emp where emp_bir>\"1977-12-31\";

  查询结果显示如下:
  +----------+---------+---------+
  | emp_name | emp_sal | emp_sex |
  +----------+---------+---------+
  | 啸天  |  4000 | male  |
  | 丽鹃  |  8000 | fmale  |
  +----------+---------+---------+
  2 rows in set (0.00 sec)

2.6.3 查询结果排序

  用ORDER BY语句对emp表中所有员工工资高低顺序查询结果(默认是从低到高——升序)
  mysql> select * from emp order by emp_sal;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  +--------+----------+---------+---------+------------+---------+
  3 rows in set (0.00 sec)

  用DESC关键字来进行从高到低排序——降序
  mysql> select * from emp order by emp_sal desc;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  +--------+----------+---------+---------+------------+---------+
  3 rows in set (0.00 sec)

2.6.4 查询结果数量的限制

  用LIMIT查看emp表中工资收入排名前两个员工的资料:
  mysql> select * from emp order by emp_sal desc limit 2;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
  | 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
  +--------+----------+---------+---------+------------+---------+
  2 rows in set (0.00 sec)

查看工资排名第2到第3的员工资料:
mysql> select * from emp order by emp_sal desc limit 1,2;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100002 | 丽鹃  |   27 |  8000 | 1979-12-31 | fmale  |
| 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

使用rand()抽样调查,随机抽取2个员工,查看其资料
mysql> select * from emp order by rand() limit 2;

如如下结果:(随机的)

+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
| 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

2.6.5 查询结果的字段联合和重新命名

  mysql> select concat(emp_id,\" \",emp_name) from emp;

  查询结果:
  +------------------------------+
  | concat(emp_id,\" \",emp_name) |
  +------------------------------+
  | 100005 啸天      |
  | 100001 红枫      |
  | 100002 丽鹃      |
  +------------------------------+
  3 rows in set (0.00 sec)

  用AS关键字重新给输出结果命名标题
  mysql> select concat(emp_id,\" \",emp_name) as info from emp;

  查询结果如下显示:
  +----------------+
  | info    |
  +----------------+
  | 100005 啸天 |
  | 100001 红枫  |
  | 100002 丽鹃 |
  +----------------+
  3 rows in set (0.00 sec)

2.6.6 日期查询的相关运算

  可以通过YEAR()、MONTH()、DAYOFMONTH()函数来提取日期的组成元素

  查询7月份出生的员工资料:
  mysql> select * from emp where month(emp_bir)=7;

  查询结果显示如下:
  +--------+----------+---------+---------+------------+---------+
  | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
  +--------+----------+---------+---------+------------+---------+
  | 100005 | 啸天  |   27 |  4000 | 1979-07-10 | male  |
  +--------+----------+---------+---------+------------+---------+
  1 row in set (0.00 sec)

可以利用英文月份来查询:
mysql> select * from emp where monthname(emp_bir)=\"January\";

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫  |   29 |  9000 | 1977-01-01 | male  |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

利用TO_DAYS()函数可以查询出职工们从出生到现在所经理的时间,单位是天数
mysql> select to_days(current_date) - to_days(emp_bir) as livingdays from emp;

查询后结果如下:
+------------+
| livingdays |
+------------+
|   9425 |
|   10345 |
|   9251 |
+------------+
3 rows in set (0.00 sec)

计算从现在开始经历100天后的日期
mysql> select date_add(now(),interval 100 day);

查询结果如下:
+----------------------------------+
| date_add(now(),interval 100 day) |
+----------------------------------+
| 2005-08-07 13:56:58     |
+----------------------------------+
1 row in set (0.00 sec)

计算从现在开始经历100天后的日期
mysql> select date_sub(now(),interval 100 day);

查询结果如下:
+----------------------------------+
| date_sub(now(),interval 100 day) |
+----------------------------------+
| 2005-01-19 14:00:20     |
+----------------------------------+
1 row in set (0.00 sec)

2.6.7 数据统计

  使用COUNT()函数计算表中的数据数目(比如emp表中的员工数目)
  mysql> select count(*) from emp;

  查询结果如下:
  +----------+
  | count(*) |
  +----------+
  |   3 |
  +----------+
  1 row in set (0.01 sec)

  统计工资上5000的数目
  mysql> select count(*) from emp where emp_sal>5000;

  查询结果如下:
  +----------+
  | count(*) |
  +----------+
  |   2 |
  +----------+
  1 row in set (0.00 sec)

  统计男女职工数目:(GROUP BY语句分类)
  mysql> select emp_sex,count(*) from emp group by emp_sex;

  查询结果如下:
  +---------+----------+
  | emp_sex | count(*) |
  +---------+----------+
  | fmale  |   1 |
  | male  |   2 |
  +---------+----------+
  2 rows in set (0.01 sec)

  使用数据统计函数(MIN(),MAX(),SUM(),AVG())
  mysql> select
   -> min(emp_sal) as min_salary,
   -> max(emp_sal) as max_salary,
   -> sum(emp_sal) as sum_salary,
   -> avg(emp_sal) as avg_salary,
   -> count(*) as employee_num
   -> from emp;

  查询结果如下:
  +------------+------------+------------+------------+--------------+
  | min_salary | max_salary | sum_salary | avg_salary | employee_num |
  +------------+------------+------------+------------+--------------+
  |   4000 |   9000 |   21000 | 7000.0000 |     3 |
  +------------+------------+------------+------------+--------------+
  1 row in set (0.00 sec)

2.6.8 从多个数据表中检索信息

  根据前面的方法,分别进行如下操作:
  1). 在数据库asb中建立一个新表dept,表中有两项元素:
   dept_id  --> varchar(6)
   dept_name --> varchar(10)
  2). 在表emp中插入如下一行新记录:
   +--------+----------+---------+---------+------------+---------+
   | emp_id | emp_name | emp_age | emp_sal | emp_bir  | emp_sex |
   +--------+----------+---------+---------+------------+---------+
   | 100003 | 小红  |   30 |  8000 | 1976-11-11 | fmale  |
   +--------+----------+---------+---------+------------+---------+
  3). 在新表dept中,输入如下记录
   +---------+-----------+
   | dept_id | dept_name |
   +---------+-----------+
   | 100005 | MTD   |
   | 100001 | MTD   |
   | 100002 | MTD   |
   | 100003 | HR   |
   +---------+-----------+

  查询emp和dept这两个表中,员工的姓名和部门信息
  mysql> select emp.emp_name,dept.dept_name from emp,dept
   -> where emp.emp_id=dept.dept_id;

  查询结果如下:
  +----------+-----------+
  | emp_name | dept_name |
  +----------+-----------+
  | 啸天  | MTD   |
  | 红枫  | MTD   |
  | 丽鹃  | MTD   |
  | 小红  | HR   |
  +----------+-----------+
  4 rows in set (0.00 sec)

  多表查询时注意:
  1). FROM子句必须给出所查询的表的全部名称
  2). 选择字段时候注明其所属表的名称(如emp表中的emp_id要表示为emp.emp_id)
  3). 在Where子句中必须指明查询的条件(如,emp.emp_id和dept.dept_id是相同意义的元素)

----------------------我------------割--------------------------

2.7 删除表单数据

2.7.1 使用DELETE语句删除表单中的数据记录
  小红不在了哦,得删了吧
  mysql>delete from emp where emp_name=&#39;小红&#39;;

  执行成功后会如下显示:
  Query OK, 1 row affected (0.06 sec)

  省略where是删除全部表中的记录

2.7.2 使用DRO删除表
  (先随便建立一个数据库dt,并建张临时表fuck)

  mysql>drop table fuck;

2.7.3 使用DRO删除数据库
  mysql>drop database dt;

----------------------我------------割--------------------------

2.8 改变数据表的结构
先建立一个新表id (内带一个属性id_name varchar(6)),输入一行数据(xgw)

2.8.1 对表重新命名
  alter table 数据表名 rename as 数据表的新名字;

  把表id改名成name
  mysql> alter table id rename as name;

2.8.2 给数据表增加一个字段
  alter table 数据表名 add 字段名称 字段类型;

  在改过名的新表name中增加一个字段(id int(6))
  mysql>alter table name add id int(6);

  增加成功后有如下显示:
  Query OK, 1 row affected (0.26 sec)
  Records: 1 Duplicates: 0 Warnings: 0

2.8.3 更改已经建立的字段类型
  alter table 数据表名 modify 字段名称 字段类型;

  把name表中id属性的类型改成10个长度的字符类型
  mysql> alter table name modify id varchar(10);


  alter talbe语句还有很多功能,具体可查阅MySQL的技术手册。
懒散的猫 发表于 2007-7-11 15:43 | 显示全部楼层
顶......叹为观止.....
愚人 发表于 2007-7-11 15:43 | 显示全部楼层
不错啊! 一个字牛啊!
blsz 发表于 2007-7-12 00:48 | 显示全部楼层
.  .  .  .
德保利 发表于 2007-7-13 00:50 | 显示全部楼层
謝謝,希望以後多些
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-15 02:33 , Processed in 0.151370 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表