bitscn.com一、启动与关闭
1.1 linux下启动mysql 的命令:
a. rpm包安装:service mysqld startb. 源码包安装:/usr/local/mysql/bin/mysqld_safe --user=mysql &
1.2 linux下重启mysql 的命令:
a. rpm包安装:service mysqld restartb. 源码包安装:先关闭mysql/usr/local/mysql/bin/mysqladmin -uroot -p shutdown
再启动mysql/usr/local/mysql/bin/mysqld_safe --user=mysql &1.3 linux下关闭mysql 的命令:
a. rpm包安装:service mysqld stopb. 源码包安装:方法1、/usr/local/mysql/bin/mysqladmin -uroot -p shutdown方法2、killall mysqld //强行终止mysql数据库服务,有可能导致表损坏,不建议使用
二、数据库连接
2.1 连接mysql
格式:$mysql_dir/bin/mysql [-h主机地址] -u用户名 -p用户密码,回车后提示输入密码。
2.2 退出mysql
格式:exit/quit
三、修改密码
3.1 mysqladmin 命令
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例1:给root加个密码123456。首先在终端下进入目录$mysql_dir/bin,然后键入以下命令
./mysqladmin -uroot password ’123456′
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
例2:再将root的密码改为abc123。
./mysqladmin -uroot -p123456 password abc123
3.2 update user 语句
首先使用root 帐户登入mysql,然后执行:
update mysql.user set password=password('123456') where user='root';flush privileges;
3.3 set password 语句
同样,首先使用root 帐户登入mysql,然后执行:
set password for 'root'@'localhost' = password('abc123');
四、创建用户与授权
4.1 create user
create user user [identified by [password] 'password'] [, user [identified by [password] 'password']] ...
create user用于创建新的mysql账户。要使用create user,您必须拥有mysql 数据库的全局create user权限,或拥有insert权限。对于每个账户,create user会在没有权限的mysql.user表中创建一个新记录。如果账户已经存在,则出现错误。
使用自选的identified by子句,可以为账户指定一个密码。user值和密码的给定方法和grant语句一样。特别要注意的是,要在纯文本中指定密码,需忽略password关键词。要把密码指定为由password()函数返回的混编值,需包含关键字password。
例1:创建新用户david & sandy
mysql> create user 'david'@'localhost' identified by 'password';query ok, 0 rows affected (0.00 sec)mysql>
mysql> create user 'sandy'@'localhost' identified by password '*2470c0c06dee42fd1618bb99005adca2ec9d1e19';query ok, 0 rows affected (0.00 sec)mysql>
4.2 使用grant语句
最好的方法是使用grant语句,因为这样更精确,错误少。从mysql 3.22.11起提供了grant;它的主要用途是来给帐户授权的,但也可用来建立新帐户并同时授权。
注意:当mysql 运行于no_auto_create_user 时要提供新建用户的密码,否则不能创建新用户。
格式:
grant privileges on databasename.tablename to 'username'@'host' identified by 'password';
例1、增加一个用户test1,密码为abc,让他可以在任何主机上登录,并对所有数据库拥有所有权限。
首先用以root用户连入mysql,然后键入以下命令:
grant all privileges on *.* to 'test1'@'%' identified by 'abc';flush privileges;
例2、增加一个用户test2,密码为abc,让他只可以在localhost上登录,并可以对数据库david进行查询、插入、修改、删除的操作。
grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by 'abc';flush privileges;
如果不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by '';
grant 更多用法,请自行google+baidu。
4.3 直接操作mysql授权表
除了grant,你可以直接用insert语句创建相同的账户,然后使用flush privileges告诉服务器重载授权表。
例1:创建用户test3,让其具有同4.2 例2中test2用户同样的权限。
mysql> insert into mysql.user (host, user, password, select_priv, insert_priv, update_priv, delete_priv) values('localhost', 'test3', password('password'),'y','y','y','y');query ok, 1 row affected, 3 warnings (0.00 sec)mysql> flush privileges;query ok, 0 rows affected (0.00 sec)mysql>
mysql> select host, user, password, select_priv, insert_priv, update_priv, delete_priv from mysql.user where user='test3';+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+| host | user | password | select_priv | insert_priv | update_priv | delete_priv |+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+| localhost | test3 | *2470c0c06dee42fd1618bb99005adca2ec9d1e19 | y | y | y | y | +-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+1 row in set (0.00 sec)mysql>
当用insert创建账户时,使用flush privileges 的原因是告诉服务器重读授权表。否则,只有重启服务器后更改才会生效。使用 grant,则不需要使用flush privileges。
用insert语句时,使用password()函数是为了加密密码。grant语句自动加密密码,因此不需要password()。
'y' 值启用账户权限。
五、库操作
必须首先登录到mysql 中,有关操作都是在mysql 的提示符下进行,而且每个命令以分号结束。
5.1 创建数据库
命令:create database ;
例1:创建一个名为test 的数据库
mysql> create database test;query ok, 1 row affected (0.00 sec)mysql>
5.2 显示所有的数据库
命令:show databases;(注意:最后有个s)
mysql> show databases;+--------------------+| database |+--------------------+| information_schema | | david | | mysql | | test | +--------------------+4 rows in set (0.00 sec)mysql>
5.3 删除数据库
命令:drop database ;
例2:删除名为test 的数据库
mysql> drop database test;query ok, 0 rows affected (0.00 sec)mysql>
5.4 连接数据库
命令: use ;
例3:连接david 数据库
mysql> use david;database changedmysql>
5.5 查看当前使用的数据库
命令:select database();
mysql> select database();+------------+| database() |+------------+| david | +------------+1 row in set (0.00 sec)mysql>
5.6 当前数据库包含的表信息
命令:show tables;(注意:最后有个s)
mysql> show tables;+-----------------+| tables_in_david |+-----------------+| emp | +-----------------+1 row in set (0.00 sec)mysql>
六、表操作
操作之前应连接某个数据库。
6.1 建立表
create table ( [,.. ]);create table tablename (col1 type1 [not null] [primary key],col2 type2 [not null],..);
mysql> create table myclass ( -> id int(4) not null primary key auto_increment, -> name char(20) not null, -> sex int(4) not null default '0', -> degree double(16,2));query ok, 0 rows affected (0.04 sec)mysql>
补充:根据已有的表创建新表。
create table tab_new like tab_old; (只有表结构)
create table tab_new as select * from tab_old; (既包含表结构,又包含表数据)
只包含表结构:
mysql> create table myclass2 like myclass;query ok, 0 rows affected (0.00 sec)mysql>
既包含表结构,又包含表数据:
mysql> insert into myclass values(1, 'david', 1, 20130417.16);query ok, 1 row affected (0.02 sec)mysql> mysql> mysql> create table myclass3 as select * from myclass;query ok, 1 row affected (0.07 sec)records: 1 duplicates: 0 warnings: 0mysql> select * from myclass3;+----+-------+-----+-------------+| id | name | sex | degree |+----+-------+-----+-------------+| 1 | david | 1 | 20130417.16 | +----+-------+-----+-------------+1 row in set (0.02 sec)mysql>
6.2 获取表结构
命令:
desc 表名;orshow columns from 表名;
获取myclass & myclass2 表结构
mysql> desc myclass;+--------+--------------+------+-----+---------+----------------+| field | type | null | key | default | extra |+--------+--------------+------+-----+---------+----------------+| id | int(4) | no | pri | null | auto_increment | | name | char(20) | no | | | | | sex | int(4) | no | | 0 | | | degree | double(16,2) | yes | | null | | +--------+--------------+------+-----+---------+----------------+4 rows in set (0.00 sec)mysql> show columns from myclass2;+--------+--------------+------+-----+---------+----------------+| field | type | null | key | default | extra |+--------+--------------+------+-----+---------+----------------+| id | int(4) | no | pri | null | auto_increment | | name | char(20) | no | | | | | sex | int(4) | no | | 0 | | | degree | double(16,2) | yes | | null | | +--------+--------------+------+-----+---------+----------------+4 rows in set (0.00 sec)mysql>
6.3 删除表
命令:drop table ;
例:删除表名为 myclass3 的表
mysql> drop table myclass3;query ok, 0 rows affected (0.00 sec)mysql> show tables;+-----------------+| tables_in_david |+-----------------+| emp | | myclass | | myclass2 | +-----------------+3 rows in set (0.00 sec)mysql>
6.4 更改表名
命令:rename table 原表名 to 新表名;
例:将表 myclass2 名字更改为 myclass4
mysql> rename table myclass2 to myclass4;query ok, 0 rows affected (0.02 sec)mysql> show tables;+-----------------+| tables_in_david |+-----------------+| emp | | myclass | | myclass4 | +-----------------+3 rows in set (0.00 sec)mysql>
6.5 在表中增加字段
命令:alter table 表名 add 字段 类型 其他;
例:在表 myclass 中添加了一个字段passtest,类型为int(4),默认值为0。
mysql> alter table myclass add passtest int(4) default '0';query ok, 1 row affected (0.04 sec)records: 1 duplicates: 0 warnings: 0mysql> desc myclass;+----------+--------------+------+-----+---------+----------------+| field | type | null | key | default | extra |+----------+--------------+------+-----+---------+----------------+| id | int(4) | no | pri | null | auto_increment | | name | char(20) | no | | | | | sex | int(4) | no | | 0 | | | degree | double(16,2) | yes | | null | | | passtest | int(4) | yes | | 0 | | +----------+--------------+------+-----+---------+----------------+5 rows in set (0.00 sec)mysql>
七、数据操作
7.1 插入数据
命令:insert into [( [,.. ])] values ( 值1 )[, ( 值n )];
例:向 myclass 表中插入以下记录,留空的表示使用默认值。
mysql> insert into myclass (id, name, sex, degree, passtest) values(1, 'david', 1, 80.56, 78); query ok, 1 row affected (0.00 sec)mysql> insert into myclass values(2, 'sandy', 0, 100, 90);query ok, 1 row affected (0.00 sec)mysql> insert into myclass (id, name, sex, degree) values(3, 'renee', 0, 90.34);query ok, 1 row affected (0.00 sec)mysql> insert into myclass (id, name) values(4, 'china');query ok, 1 row affected (0.00 sec)mysql>
7.2 查询表中的数据
a. 查询所有行
命令:select from where ;
例1:查看表 myclass 中所有数据
mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 80.56 | 78 | | 2 | sandy | 0 | 100.00 | 90 | | 3 | renee | 0 | 90.34 | 0 | | 4 | china | 0 | null | 0 | +----+-------+-----+--------+----------+4 rows in set (0.00 sec)mysql>
例2:查询表 david 相关信息
mysql> select * from myclass where name='david';+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 80.56 | 78 | +----+-------+-----+--------+----------+1 row in set (0.00 sec)mysql>
b. 查询前几行数据
例如:查看表 myclass 中前2行数据
mysql> select * from myclass limit 2;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 80.56 | 78 | | 2 | sandy | 0 | 100.00 | 90 | +----+-------+-----+--------+----------+2 rows in set (0.00 sec)mysql>
或者:
mysql> select * from myclass order by id limit 2;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 80.56 | 78 | | 2 | sandy | 0 | 100.00 | 90 | +----+-------+-----+--------+----------+2 rows in set (0.01 sec)mysql>
7.3 删除表中的数据
命令:delete from 表名 where 表达式;
例如:删除表 myclass 中编号为4的记录
mysql> delete from myclass where id=4;query ok, 1 row affected (0.00 sec)mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 80.56 | 78 | | 2 | sandy | 0 | 100.00 | 90 | | 3 | renee | 0 | 90.34 | 0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)mysql>
7.4 修改表中的数据
update 表名 set 字段 = 新值,… where 条件;
例:修改 myclass 表中编号为1的记录,将degree 值改成89.99
mysql> update myclass set degree=89.99 where id=1;query ok, 1 row affected (0.00 sec)rows matched: 1 changed: 1 warnings: 0mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 89.99 | 78 | | 2 | sandy | 0 | 100.00 | 90 | | 3 | renee | 0 | 90.34 | 0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)mysql>
八、数据的导入导出
8.1 导出整个数据库
命令:mysqldump -u 用户名 -p 数据库名 > 导出的文件名
[root@ts-dev bin]# ./mysqldump -uroot -p david > /tmp/david/david.sqlenter password: [root@ts-dev bin]# ll /tmp/david/total 4-rw-r--r-- 1 root root 2764 apr 17 17:13 david.sql[root@ts-dev bin]#
8.2 导出一个表
命令:mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
[root@ts-dev bin]# ./mysqldump -uroot -p david myclass > /tmp/david/david_myclass.sqlenter password: [root@ts-dev bin]# ll /tmp/david/total 8-rw-r--r-- 1 root root 1854 apr 17 17:16 david_myclass.sql-rw-r--r-- 1 root root 2764 apr 17 17:13 david.sql[root@ts-dev bin]#
8.3 导出一个数据库结构
命令:mysqldump -u root -p -d --add-drop-table test > test_db.sql
-d 没有数据 --add-drop-table 在每个create 语句之前增加一个drop table
[root@ts-dev bin]# ./mysqldump -uroot -p -d --add-drop-table david > /tmp/david/david_db.sqlenter password: [root@ts-dev bin]#
8.4 导入数据库
a. 常用source 命令
进入mysql 数据库控制台
# ./mysql -uroot -p
mysql> show databases;+--------------------+| database |+--------------------+| information_schema | | mysql | +--------------------+2 rows in set (0.00 sec)mysql> create database sandy;query ok, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| database |+--------------------+| information_schema | | mysql | | sandy | +--------------------+3 rows in set (0.00 sec)mysql> use sandydatabase changedmysql> source /tmp/david/david.sqlquery ok, 0 rows affected (0.00 sec)...query ok, 2 rows affected (0.00 sec)records: 2 duplicates: 0 warnings: 0...query ok, 3 rows affected (0.00 sec)records: 3 duplicates: 0 warnings: 0...query ok, 0 rows affected (0.00 sec)mysql> show tables;+-----------------+| tables_in_sandy |+-----------------+| emp | | myclass | | myclass4 | +-----------------+3 rows in set (0.00 sec)mysql> select * from emp;+------+-------+| id | name |+------+-------+| 1 | david | | 2 | sandy | +------+-------+2 rows in set (0.00 sec)mysql>
b. 使用mysql 命令
先创建要导入的数据库 renee。
mysql> create database renee;query ok, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| database |+--------------------+| information_schema | | mysql | | renee | | sandy | +--------------------+4 rows in set (0.00 sec)mysql>
导入数据
[root@ts-dev bin]# ./mysql -uroot -p -d renee 查看数据
mysql> use renee;database changedmysql> show tables;+-----------------+| tables_in_renee |+-----------------+| myclass | +-----------------+1 row in set (0.00 sec)mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name | sex | degree | passtest |+----+-------+-----+--------+----------+| 1 | david | 1 | 89.99 | 78 | | 2 | sandy | 0 | 100.00 | 90 | | 3 | nancy | 0 | 90.34 | 0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)mysql>
更多导入导出命令,请自行google+baidu。
bitscn.com