MYSQL的操作

1.库的操作

1.1创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:

#  大写的表示关键字
#  [] 是可选项
#  CHARACTER SET: 指定数据库采用的字符集
#  COLLATE: 指定数据库字符集的校验规则

 

1.2创建数据库案例

创建名为 db1 的数据库
create database db1;

说明:

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集: utf8 ,校验规则是:utf8_ general_ ci  

创建一个使用utf8字符集的 db2 数据库

create database db2 charset=utf8;  

创建一个使用utf字符集,并带校对规则的 db3 数据库

create database db3 charset=utf8 collate utf8_general_ci;  

1.3字符集和校验规则

1.3.1查看系统默认字符集及校验规则

show variables like 'character_set_database' ;
show variables like 'collation_database' ;

1.3.2查看数据库支持的字符集

show charset;

字符集主要是控制用什么语言。比如utf8就可以使用中文。

1.3.3查看数据库支持的字符集校验规则

show collation;  

1.3.4校验规则对数据库的影响

不区分大小写

创建一个数据库,校验规则使用 utf8_ general_ ci[ 不区分大小写 ]
create database test1 collate utf8_general_ci;

use test1;  

create table person(name varchar(20));  

insert into person values ( 'a' );
insert into person values ( 'A' );
insert into person values ( 'b' );
insert into person values ( 'B' );

区分大小写

创建一个数据库,校验规则使用utf8_ bin[区分大小写]

create database test2 collate utf8_bin; 

use test2; 

create table person(name varchar(20)); 

insert into person values ( 'a' );
insert into person values ( 'A' );
insert into person values ( 'b' );
insert into person values ( 'B' );

进行查询

不区分大小写的查询以及结果

mysql> use test1;
mysql> select * from person where name= 'a' ;
+------+
| name |
+------+
| a         |
| A         |
+------+
2 rows in set ( 0.01 sec)

区分大小写的查询以及结果

mysql> use test2;
mysql> select * from person where name= 'a' ;
+------+
| name |
+------+
| a         |
+------+
2 rows in set ( 0.01 sec)
结果排序
不区分大小写排序以及结果:
mysql> use test1;
mysql> select * from person order by name;
+------+
| name |
+------+
| a         |
| A         |
| b         |
| B         |
+------+

区分大小写排序以及结果:

mysql> use test2;
mysql> select * from person order by name;
+------+
| name |
+------+
| A         |
| B         |
| a         |
| b         |
+------+

1.4操纵数据库

1.4.1查看数据库

show databases;  

1.4.2显示创建语句

show create database 数据库名;  

示例:

mysql> show create database mytest;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+----------------------------------------------------------------+
| mysql | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+

说明:

1.MySQL 建议我们关键字使用大写,但是不是必须的。
2.数据库名字的反引号``, 是为了防止使用的数据库名刚好是关键字
3./*!40100 default.... */ 这个不是注释,表示当前 mysql 版本大于 4.01 版本,就执行这句话

 1.4.3修改数据库

语法:

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:对数据库的修改主要指的是修改数据库的字符集,校验规则

实例: 将 mytest 数据库字符集改成 gbk
mysql> alter database mytest charset=gbk;
Query OK, 1 row affected ( 0.00 sec)
mysql> show create database mytest;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+----------------------------------------------------------------+
| mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------------------------------------+

1.4.4数据库删除

DROP DATABASE [IF EXISTS] db_ name;  

执行删除之后的结果 :
        数据库内部看不到对应的数据库
        对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库  

 1.4.5备份和恢复

1.4.5.1备份

语法:

# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

示例:将mytest库备份到文件(退出连接)

# mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql  

这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
 1.4.5.2恢复
mysql> source D:/mysql- 5.7 . 22 /mytest .sql ;
1.4.5.3注意事项

如果备份的不是整个数据库,而是其中的一张表,怎么做?

# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql  

同时备份多个数据库

# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径  

如果备份一个数据库时,没有带上 -B 参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source 来还原。

 1.4.6查看连接情况

语法:

show processlist;

示例:

mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 2 | root | localhost | test | Sleep | 1386 |         | NULL |
| 3 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
可以告诉我们当前有哪些用户连接到我们的 MySQL ,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

2.表的操作

2.1创建表

语法:

CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎 ;

说明:

field 表示列名
datatype 表示列的类型
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

2.2创建表的案例

create table users (
id int ,
name varchar ( 20 ) comment ' 用户名 ' ,
password char ( 32 ) comment ' 密码是 32 位的 md5 ' ,
birthday date comment ' 生日 '
) character set utf8 engine MyISAM;

说明:

不同的存储引擎,创建表的文件不一样。
users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
users.frm :表结构
users.MYD :表数据
users.MYI :表索引

MYSQL的操作_第1张图片 

备注:创建一个engineinnodb的数据库,观察存储目录

2.3查看表结构

desc 表名;  

MYSQL的操作_第2张图片 

2.4修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename DROP (column);

案例:

users表添加二条记录

mysql> insert into users values ( 1 , 'a' , 'b' , '1982-01-04' ),( 2 , 'b' , 'c' , '1984-01-
04' );

users表添加一个字段,用于保存图片路径

l> alter table users add assets varchar ( 100 ) comment ' 图片路径 ' after
birthday;

 MYSQL的操作_第3张图片

 插入新字段后,对原来表中的数据没有影响:

mysql> select * from users;
+------+------+----------+------------+-------+
| id | name | password | birthday | assets |
+------+------+----------+------------+-------+
| 1    | a |   b     | 1982-01-04    | NULL |<= 原来的数据仍然存在
| 2    | b |   c     | 1984-01-04    | NULL |
+------+------+----------+------------+-------+

 修改name,将其长度改成60

mysql> alter table users modify name varchar ( 60 );
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field         | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id         | int ( 11 )         | YES |         | NULL | |
| name | varchar ( 60 ) | YES |          | NULL | |<= 长度变成 60
| password | char ( 32 ) | YES |         | NULL | |
| birthday | date         | YES |         | NULL | |
| assets | varchar ( 100 ) | YES |       | NULL | |
+----------+--------------+------+-----+---------+-------+

 

 

删除 password
注意:删除字段一定要小心,删除字段及其对应的列数据都没了
mysql> alter table users drop password;
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id         | int ( 11 )         | YES |         | NULL |      |
| name   | varchar ( 60 ) | YES |         | NULL |     |
| birthday | date          | YES |         | NULL |       |
| assets | varchar ( 100 ) | YES |         | NULL |    |
+----------+--------------+------+-----+---------+-------+

修改表名为employee

mysql> alter table users rename to employee;  

MYSQL的操作_第4张图片 

to :可以省掉  
name 列修改为 xingming

 

mysql> alter table employee change name xingming varchar ( 60 ); -- 新字段需要完整
定义
mysql> desc employee;
+----------+--------------+------+-----+---------+-------+
| Field         | Type    | Null    | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id         | int ( 11 )            | YES |          | NULL | |
| xingming | varchar ( 60 ) | YES |         | NULL | |
| birthday | date               | YES |         | NULL | |
| assets | varchar ( 100 )   | YES |         | NULL | |
+----------+--------------+------+-----+---------+-------+

2.5删除表

 语法格式

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:

drop table t1; 

你可能感兴趣的:(mysql,数据库)