Oct 8

Mysql 4.1.10 数据库数据操作详解 不指定

bkkkd , 00:14 , 开发应用 , 评论(0) , 引用(0) , 阅读(3440) , Via 本站原创 | |
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 files\mysql\mysql server 4.1\bin>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<'1979-12-01' 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='小红';

     执行成功后会如下显示:
     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的技术手册。

    
(the questions,call me anytime! E-mail:tt981@netease.com)

   ※※※※※※※※※※※※※※Mysql 初级解读 (所用版本:4.1.10)※※※※※※※※※※※※※※
CopyRight By FengLin , 2005-4-29
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]