[转]Mysql数据库操作新手入门

上一篇 / 下一篇  2011-03-15 17:45:29 / 个人分类:mysql

由于新手入门PHP+Mysql技术,必定对Mysql操作存有疑问。

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

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


======================================================

一、Mysql数据服务器登录

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

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

------------------------------------------------------------

例1:连接到本机上的MYSQL。

首先在打开DOS窗口,然后进入目录mysql的bin目录下,再键入命令mysql-uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql-h110.110.110.110 -uroot -pabcd123

(注:u与root可以不用加空格,其它也一样)

------------------------------------------------------------

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

  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 ormysql> quit 退出mysql数据库服务器
mysql> h ormysql> 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>mysqlasb -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的技术手册。
======================================================

三、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码

例1:给root加个密码ab12。首先在DOS下进入目录mysql的bin,然后键入以下命令

mysqladmin -uroot -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

例2:再将root的密码改为djg345。

mysqladmin -uroot -pab12 password djg345

======================================================

四、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on数据库.* to 用户名@登录主机 identified by \"密码\"

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作 (localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据 库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";

在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 21860
  • 日志数: 36
  • 建立时间: 2011-03-15
  • 更新时间: 2011-04-01

RSS订阅

Open Toolbar