1、连接 Mysql
格式: mysql -h 主机地址 -u 用户名 -p 用户密码
1、连接到本机上的 MYSQL。
首先打开 DOS 窗口,然后进入目录 mysql\bin,再键入命令 mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。
如果刚安装好 MYSQL,超级用户 root 是没有密码的,故直接回车即可进入到 MYSQL 中了,MYSQL 的提示符是: mysql>
2、连接到远程主机上的 MYSQL。假设远程主机的 IP 为:110.110.110.110,用户名为 root,密码为 abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p 123;(注:u 与 root 之间可以不用加空格,其它也一样)
3、退出 MYSQL 命令: exit (回车)
2、修改密码
格式:mysqladmin -u 用户名 -p 旧密码 password 新密码
1、给 root 加个密码 ab12。
首先在 DOS 下进入目录 mysql\bin,然后键入以下命令
mysqladmin -u root -password ab12
注:因为开始时 root 没有密码,所以-p 旧密码一项就可以省略了。
2、再将 root 的密码改为 djg345。
mysqladmin -u root -p ab12 password djg345
3、增加新用户
注意:和上面不同,下面的因为是 MYSQL 环境中的命令,所以后面都带一个分号作为命令结束符
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
1、增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用 root 用户连入 MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;
但增加的用户是十分危险的,你想如某个人知道 test1 的密码,那么他就可以在 internet 上的任何一台电脑上登录你的 mysql 数据库并对你的数据可以为所欲为了,解决办法见 2。
2、增加一个用户 test2 密码为 abc,让他只可以在 localhost 上登录,并可以对数据库 mydb 进行查询、插入、修改、删除的操作(localhost 指本地主机,即 MYSQL 数据库所在的那台主机),这样用户即使用知道 test2 的密码,他也无法从 internet 上直接访问数据库,只能通过 MYSQL 主机上的 web 页来访问了。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;
如果你不想 test2 有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;
4. 数据库操作
4.1 创建数据库
注意:创建数据库之前要先连接 Mysql 服务器
命令:create database <数据库名>
例 1:建立一个名为 xhkdb 的数据库
mysql> create database xhkdb;
例 2:创建数据库并分配用户
①CREATE DATABASE 数据库名;
②GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY ‘密码’;
③SET PASSWORD FOR ‘数据库名‘@’localhost’ = OLD_PASSWORD(‘密码’);
依次执行 3 个命令完成数据库创建。注意:中文 “密码”和“数据库”是户自己需要设置的。
4.2 显示数据库
命令:show databases (注意:最后有个 s)
mysql> show databases;
注意:为了不再显示的时候乱码,要修改数据库默认编码。以下以 GBK 编码页面为例进行说明:
1、修改 MYSQL 的配置文件:my.ini 里面修改 default-character-set=gbk
2、代码运行时修改:
1 | ①Java代码:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk |
该函数用于为当前连接设置默认的字符集。字符串 csname 指定了 1 个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与 SET NAMES 语句类似,但它还能设置
mysql- > charset 的值,从而影响了由 mysql_real_escape_string() 设置的字符集。
4.3 删除数据库
命令:drop database <数据库名>
例如:删除名为 xhkdb 的数据库
mysql> drop database xhkdb;
例子 1:删除一个已经确定存在的数据库
mysql> drop database drop_database;
Query OK, 0 rows affected (0.00 sec)
例子 2:删除一个不确定存在的数据库
mysql> drop database drop_database;
ERROR 1008 (HY000): Can’t drop database ‘drop_database’; database doesn’t exist
//发生错误,不能删除’drop_database’数据库,该数据库不存在。
mysql> drop database if exists drop_database;
Query OK, 0 rows affected, 1 warning (0.00 sec)//产生一个警告说明此数据库不存在
mysql> create database drop_database;
Query OK, 1 row affected (0.00 sec)
mysql> drop database if exists drop_database;//if exists
判断数据库是否存在,不存在也不产生错误 Query OK, 0 rows affected (0.00 sec)
4.4 连接数据库
命令: use <数据库名>
例如:如果 xhkdb 数据库存在,尝试存取它:
mysql> use xhkdb;
屏幕提示:Database changed
use 语句可以通告 MySQL 把 db_name 数据库作为默认(当前)数据库使用,用于后续语句。
该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的 USE 语句:
1 | mysql> USE db1; |
使用 USE 语句为一个特定的当前的数据库做标记,不会阻碍您访问其它数据库中的表。下面的例子可以从 db1 数据库访问作者表,并从 db2 数据库访问编辑表:
1 | mysql> USE db1; |
USE 语句被设立出来,用于与 Sybase 相兼容。
有些网友问到,连接以后怎么退出。其实,不用退出来,use 数据库后,使用 show databases 就能查询所有数据库,如果想跳到其他数据库,用
use 其他数据库名字
就可以了。
4.5 当前选择的数据库
1 | 命令:mysql> select database(); |
5. 数据表操作
5.1 创建数据表
命令:create table <表名> ( <字段名 1> <类型 1> [,..<字段名 n> <类型 n>]);
例如,建立一个名为 MyClass 的表,
字段名 | 数据类型 | 数据宽度 | 是否为空 | 是否主键 | 自动增加 | 默认值 |
---|---|---|---|---|---|---|
id | int | 4 | 否 | primary key | auto_increment | |
name | char | 20 | 否 | |||
sex | int | 4 | 否 | 0 | ||
degree | double | 16 | 是 |
1 | mysql> create table MyClass( |
5.2 删除数据表
命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;
DROP TABLE 用于取消一个或多个表。您必须有每个表的 DROP 权限。所有的表数据和表定义会被取消,所以使用本语句要小心!
注意:对于一个带分区的表,DROP TABLE 会永久性地取消表定义,取消各分区,并取消储存在这些分区中的所有数据。DROP TABLE 还会取消与被取消的表有关联的分区定义(.par)文件。
对于不存在的表,使用 IF EXISTS 用于防止错误发生。当使用 IF EXISTS 时,对于每个不存在的表,会生成一个 NOTE。
RESTRICT 和 CASCADE 可以使分区更容易。目前,RESTRICT 和 CASCADE 不起作用。
5.3 表插入数据
命令:insert into <表名> [( <字段名 1>[,..<字段名 n > ])] values ( 值 1 )[, ( 值 n )]
例如:往表 MyClass 中插入二条记录, 这二条记录表示:编号为 1 的名为 Tom 的成绩为 96.45, 编号为 2 的名为 Joan 的成绩为 82.99, 编号为 3 的名为 Wang 的成绩为 96.5。
mysql> insert into MyClass values(1,’Tom’,96.45),(2,’Joan’,82.99), (2,’Wang’, 96.59);
注意:insert into 每次只能向表中插入一条记录
5.4 查询表中的数据
1)、查询所有行
命令: select <字段 1,字段 2,…> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据
mysql> select * from MyClass;
2)、查询前几行数据
例如:查看表 MyClass 中前 2 行数据
mysql> select * from MyClass order by id limit 0,2;
select 一般配合 where 使用,以查询更精确更复杂的数据。
5.5 删除表中数据
命令:delete from 表名 where 表达式
例如:删除表 MyClass 中编号为 1 的记录
mysql> delete from MyClass where id=1;
下面是一个删除数据前后表的对比。
FirstName | LastName | Age |
---|---|---|
Peter | Griffin | 35 |
Glenn | Quagmire | 33 |
下面以 PHP 代码为例删除 “Persons” 表中所有 LastName=’Griffin’ 的记录:
1 | <?php |
在这次删除之后,表是这样的:
FirstName | LastName | Age |
---|---|---|
Glenn | Quagmire | 33 |
5.6 修改表中数据
语法:update 表名 set 字段=新值,… where 条件
mysql> update MyClass set name=’Mary’ where id=1;
例子 1:单表的 MySQL UPDATE 语句:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 …] [WHERE where_definition] [ORDER BY …] [LIMIT row_count]
例子 2:多表的 UPDATE 语句:
UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 …] [WHERE where_definition]
UPDATE 语法可以用新值更新原有表行中的各列。SET 子句指示要修改哪些列和要给予哪些值。WHERE 子句指定应更新哪些行。如果没有 WHERE 子句,则更新所有的行。如果指定了 ORDER BY 子句,则按照被指定的顺序对行进行更新。LIMIT 子句用于给定一个限值,限制可以被更新的行的数目。
5.7 增加字段
1 | 命令:alter table 表名 add字段 类型 其他; |
5.8 修改表名
命令:rename table 原表名 to 新表名;
例如:在表 MyClass 名字更改为 YouClass
mysql> rename table MyClass to YouClass;
当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。
如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。
RENAME TABLE 在 MySQL 3.23.23 中被加入。
6、备份数据库
命令在 DOS 的[url=file://\mysql\bin]\mysql\bin[/url]目录下执行
1.导出整个数据库
导出文件默认是存在 mysql\bin 目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
3.导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个 create 语句之前增加一个 drop table
4.带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
例如,将 aaa 库备份到文件 back_aaa 中:
[root@test1 root]# cd /home/data/mysql
[root@test1 mysql]# mysqldump -u root -p –opt aaa > back_aaa
7. 实例
7.1 一个建库和建表的实例 1
1 | drop database if exists school; //如果存在SCHOOL则删除 |
7.2 一个建库和建表的实例 2
1 | drop database if exists school; //如果存在SCHOOL则删除 |
注:在建表中
1、将 ID 设为长度为 3 的数字字段:int(3);并让它每个记录自动加一:auto_increment;并不能为空:not null;而且让他成为主字段 primary key。
2、将 NAME 设为长度为 10 的字符字段
3、将 ADDRESS 设为长度 50 的字符字段,而且缺省值为深圳。
4、将 YEAR 设为日期字段。
8、Mysql 语句记录
1 | use mysql; |