mysql基本操作-1
实验环境:使用64位的RHEL 6.4操作系统,MySQL数据库的版本是5.6.15。
一、构建mysql服务器:
1.准备工作
1)1)卸载系统自带的mysql-server、mysql软件包(如果有的话)
[root@dbsvr1 ~]# yum -y remove mysql-server mysql //移除
2)清理/etc/my.cnf配置文件
此配置文件由RHEL自带的mysql-libs库提供:
1.[root@dbsvr1 ~]# rpm -qf /etc/my.cnf
2.mysql-libs-5.1.66-2.el6_3.x86_64
大量的系统软件包都需要用到mysql-libs库,因此不建议直接卸载此软件包。最好是安装新的MySQL数据库软件时,采用 -U 升级的方式来进行替换。
配置文件/etc/my.cnf若不需要使用,可以直接删除。或者保险起见,也可以将其改名备份:
[root@dbsvr1 ~]# mv /etc/my.cnf /etc/my.cnf.old
2.安装MySQL-server、MySQL-client软件包
#rpm -Uvh MySQL-*.rpm//采用升级的方式安装,可替换冲突文件
MySQL-shared-5.6.15-1.el6.x86_64.rpm //共享库
MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm //兼容包
MySQL-server-5.6.15-1.el6.x86_64.rpm //服务端程序
MySQL-client-5.6.15-1.el6.x86_64.rpm //客户端程序
MySQL-devel-5.6.15-1.el6.x86_64.rpm //库和头文件
MySQL-embedded-5.6.15-1.el6.x86_64.rpm //嵌入式版本
MySQL-test-5.6.15-1.el6.x86_64.rpm //测试包
3.确认安装后的服务脚本、服务状态
查看服务脚本:
[root@dbsvr1 pub]# ls -lh /etc/init.d/mysql
-rwxr-xr-x. 1 root root 11K 11月 18 02:28 /etc/init.d/mysql
查看服务状态(默认未运行):
[root@dbsvr1 pub]# service mysql status
MySQL is not running [失败]
mysql服务的自启状态为on:
[root@dbsvr1 ~]# chkconfig --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
4启动MySQL服务器程序,确认状态
1)启动MySQL服务程序
启动服务并查看状态:
[root@dbsvr1 pub]# service mysql start
Starting MySQL... [确定]
[root@dbsvr1 pub]# service mysql status
MySQL running (31724) [确定]
服务器进程为mysqld,监听的默认端口为TCP 3306:
[root@dbsvr1 pub]# netstat -anpt | grep mysql
tcp 0 0 :::3306 :::* LISTEN 31724/mysqld
2)查看MySQL服务器进程、运行用户
1.提供连接服务的进程为mysqld,由其父进程mysqld_safe启动。
[root@dbsvr1 pub]# ps -elf | grep mysqld
4 S root 31619 1 0 80 0 - 2834 wait 15:14 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid- file=/var/lib/mysql/dbsvr1.tarena.com.pid
4 S mysql 31724 31619 0 80 0 - 252496 poll_s 15:14 pts/0 00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin -- user=mysql --log-error=/var/lib/mysql/dbsvr1.tarena.com.err --pid- file=/var/lib/mysql/dbsvr1.tarena.com.pid
2.mysqld的运行用户为mysql:
[root@dbsvr1 pub]# id mysql
uid=496(mysql) gid=493(mysql) 组=493(mysql)
3.数据库的默认存放位置为 /var/lib/mysql:
[root@dbsvr1 pub]# ls /var/lib/mysql/
auto.cnf ibdata1 mysql RPM_UPGRADE_HISTORY
dbsvr1.tarena.com.err ib_logfile0 mysql.sock RPM_UPGRADE_MARKER-LAST
dbsvr1.tarena.com.pid ib_logfile1 performance_schema test
4.拷贝样本配置文件,并配置选项已排除TIMESTAMP警告
复制MySQL-server软件包提供的配置样例,建立/etc/my.cnf:
[root@dbsvr1 ~]# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
//默认有/etc/my.cf这个文件不需要复制
3)重新启动mysql服务,使设置生效
#service mysql restart
#service mysql status
#netstat -anplut |grep mysql
#ps aux |grep mysql
二、mysql基本管理
1.修改数据库用户root的密码
1)查看随机生成的root管理密码
[root@dbsvr1 ~]# cat /root/.mysql_secret
# The random password set for the root user at Tue Jan 7 14:52:44 2014 (local time): 6ptWNWwx //密码为6ptWNWwx
2)使用客户端命令mysql连接到MySQL服务器
提示验证时,填入前一步获得的随机密码,验证成功后即可进入“mysql> ”环境:
[root@dbsvr1 ~]# mysql -u root -p
.Enter password: //首次连接时,输入安装时生成的随机密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.15
mysql> //登录成功后,进入SQL操作环境
3)执行SET PASSWORD命令修改密码
可参考下列指令:
mysql>set password for root@localhost=password("123456");
Query OK, 0 rows affected (0.13 sec)
//上述操作的结果是――更改数据库用户root从本机访问时的密码,设为123456
退出“mysql> ”环境,重新登录验证,必须采用新的密码才能登入:
mysql> exit //退出 mysql> 环境
.Bye
[root@dbsvr1 ~]# mysql -u root -p //重新登录
Enter password: //输入新设置的密码
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>
默认情况下,msyql命令会连接本机的MySQL服务。但在需要的时候,可以通过 -h 选项指定远程主机;如果 端口不是3306,还可以通过大写的 -P 选项指定:
[root@dbsvr1 ~]# mysql -u root -p -h 127.0.0.1 -P 3306
2、数据库操作
mysql> select user(); // 查看使用者
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> select database(); // 查看数据库
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
mysql> show databases;
// 显示已有的库
+--------------------+
| Database |
+--------------------+
| information_schema | 虚拟库:此库不占用系统物理磁盘空间,
| mysql | → 授权库
| test | → 公共库
+--------------------+ 以上3个是启动服务时系统自动生成的;数据库会议文件夹的形似存放在数据库目录下.一个库可以有多个表,表以文件的形似存放在对应的数据库目录下
mysql> create database opp;
//创建库opp
Query OK, 1 row affected (0.02 sec)
mysql> show databases; //查看创建库结果
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opp |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> drop database opp;// 删除库
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql //切换切换库
Database changed
3.表的相关操作
mysql> show tables; //查看表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| func |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| proc |
| procs_priv |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
17 rows in set (0.00 sec)
mysql> create table opp(//建立表:
-> sex char(4) not null,
-> name char(4) not null 最后一行没有符号
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;//查看刚刚建立的表
+---------------+
| Tables_in_opp |
+---------------+
| opp |
+---------------+
1 row in set (0.00 sec)
mysql> desc opp; //查看指定表的字段结构(默认表格形式显示)
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key (索引)| Default(默认值) | Extra(额外条件) |
+-------+---------+------+-----+---------+-------+
| sex | char(4) | NO | | NULL | |
| name | char(4) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
*当前库为mysql,查看columns_priv表的结构,以列表形式展现:
1.mysql> DESCRIBE columns_priv\G //末尾不用分号
2.*************************** 1. row ***************************
3.Field: Host
4.Type: char(60)
5.Null: NO
6.Key: PRI
7.Default:
8.Extra:
9.*************************** 2. row ***************************
10.Field: Db
11.Type: char(64)
12.Null: NO
13.Key: PRI
14.Default:
15.Extra:
删除当前库中的pwlist表:
mysql> DROP TABLE pwlist; // 删除指定的表
Query OK, 0 rows affected (0.01 sec)
确认删除结果:
mysql> SHOW TABLES;
Empty set (0.00 sec)
mysql> desc yu\c //终止语句加 \c ;
mysql> select * from yu; //查看表记录,*表示所有;
Empty set (0.00 sec)
mysql> select name from yu;//查看单个字段name
Empty set (0.00 sec)
mysql> select name,sex from stu_info; //指定查看字段;
+------+------+
| name | sex |
+------+------+
| tom | boy |
| tom1 | boy |
+------+------+
mysql> insert into game(name,num) values('w1',100 );//表中插入数据
Query OK, 1 row affected (0.00 sec)
mysql> insert into game( name,num) values('w3',100 ),('w4',-10); //一次插入多个数据,一个括号代表一组数据;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into game values('w6',100 ),('w7',-10);//没写列表序时,按表的默认顺序写数据;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
4.MySql基本信息类型
数值型、字符型、枚举型、日期时间型、
数值型:→整型:tinyint、smallint、mediumint、int、bigint、
→浮点型:float、double、decimal、
***一个字节8位,7个1为255,2的16次方为65535
***Tinyinit默认有符号
***建表指定无符号:unsigned
***Creat tab tabname(name char(9),age tinyint unsigned)
***工作中用的最多的数值类型是int
*** Float (M,N)
*** M 表示数字的总位数 符号位不占用M的位数
*** N:小数位的总位数
字符型:→char:定长
→varchar :边长
****字符类型宽度的限制和数值类型的宽度限制不一样;
****数值类型的宽度是显示宽度,当输入的位数小于宽度时空格补足;
****字符类型的宽度是限制宽度;
枚举类型:
*****enum:给定集合中选择单个值 , enum的赋值可以用编号 ,比如sex enum("boy","girl");赋值时可以用1 代替boy,用2代替girl,但是set的赋值不可以这么操作
***** set:从给定集合中选择一个或者多个值
约束条件:
******not null
******key 索引类型
****** default 默认值,缺省为null
mysql> insert into stu_info (name,loves)values('io','book,music'),('io2','1,music');
set 的类型不可用数字指代项值,会出警告!
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1
mysql> select *from stu_info;
+------+------+------------+
| name | sex | loves |
+------+------+------------+
| tom | boy | NULL |
| tom1 | boy | NULL |
| io | NULL | book,music |
| io2 | NULL | music |
+------+------+------------+
5.各种时间函数的使用
1)使用now()查看当前的日期和时间
1.mysql> SELECT now();
2.+---------------------+
3.| now() |
4.+---------------------+
5.| 2014-01-07 18:33:31 |
6.+---------------------+
7.1 row in set (0.05 sec)
2)使用sysdate()查看系统日期和时间
1.mysql> SELECT sysdate();
2.+---------------------+
3.| sysdate() |
4.+---------------------+
5.| 2014-01-07 18:34:12 |
6.+---------------------+
7.1 row in set (0.00 sec)
3)使用curdate()获得当前的日期,不含时间
1.mysql> SELECT curdate();
2.+------------+
3.| curdate() |
4.+------------+
5.| 2014-01-07 |
6.+------------+
7.1 row in set (0.00 sec)
4)使用curtime()获得当前的时间,不含日期
1.mysql> SELECT curtime();
2.+-----------+
3.| curtime() |
4.+-----------+
5.| 18:35:26 |
6.+-----------+
7.1 row in set (0.00 sec)
5)分别获取当前日期时间中的年份、月份、日
1.mysql> SELECT year(now()),month(now()),day(now());
2.+-------------+--------------+------------+
3.| year(now()) | month(now()) | day(now()) |
4.+-------------+--------------+------------+
5.| 2014 | 1 | 7 |
6.+-------------+--------------+------------+
7.1 row in set (0.00 sec)
6)获取系统日期时间中的月份、日
1.mysql> SELECT month(sysdate()),day(sysdate());
2.+------------------+----------------+
3.| month(sysdate()) | day(sysdate()) |
4.+------------------+----------------+
5.| 1 | 7 |
6.+------------------+----------------+
7.1 row in set (0.00 sec)
7)获取系统日期时间中的时刻
1.mysql> SELECT time(sysdate());
2.+-----------------+
3.| time(sysdate()) |
4.+-----------------+
5.| 18:44:01 |
6.+-----------------+
7.1 row in set (0.00 sec)
实验总结
1、刚安装完mysql后,关于MySQL数据库的管理员账号root,其密码也不再是空,而是安装时随机生成一个,这 种处理方式一定程度上增强了MySQl服务器的安全性。随机生成的密码字串可以从保存到/root/目录下 的.mysql_secret文件中找到:
2、DESCRIBE可缩写为DESC;另外,当引用非当前库中的表时,可以用“库名.表名”的形式。比如,切换为mysql库再执行“DESCRIBE columns_priv;”,与以下操作的效果是相同的:
mysql> DESC mysql.columns_priv;
3、主流数据库服务软件有哪些?开源且跨平台的数据库软件有哪些?
主流数据库服务软件有:
甲骨文公司 Oracle
IBM DB2
微软 SQL Server
美国Sybase公司 Sybase
加州大学伯克利分校计算机系开发的 PostgreSQL
开源且跨平台的数据库软件有:
MySQL、PostgreSQL:开源且跨平台
Oracle、DB2: 跨平台不开源
SQL Server: 不跨平台不开源
Sybase:跨平台不开源
4、建库的规则:
1)数据库名具有唯一性
2)数据库名区分大小写 (大小写可以同时存在)
3)可以使用 数字字母 下划线
4)数据库名称不能纯数字,可以用数字开头
5)不能使用特殊符号(*,!...)
6)不能使用关键字,例如create
5、