语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
实例操作:
创建一个database1
的数据库:
指令:create database database1;
此时我们查看我们的数据库,会发现多了一个叫database1
的数据库:
对应的在Linux文件中,在/var/lib/mysql
目录中,多了一个database1
的目录:
创建数据库的本质是在/var/lib/mysql
下创建一个目录
语法:
DROP DATABASE [IF EXISTS] db_ name;
实例操作:
指令:drop database database1;
查看一下数据库,发现对应的database1
被删除了:
本质是在/var/lib/mysql
下删除一个目录
创建数据库的时候,有两个编码集:
数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的。
show variables like 'character_set_database';
show variables like 'collation_database';
show charset
show collation
create database d2 charset=utf8;
reate database d3 character set utf8;
create database d4 charset=utf8 collate utf8_general_ci
分别创建两个数据库test1
和test2
,使得两个数据库的校验规则不一样:
create database test1 collate utf8_general_ci;
create database test2 collate utf8_bin;
校验规则使用utf8_ general_ ci[不区分大小写]: 表格中有如下数据:
当我们进程查找a
时,A
也会被查找出来:
校验规则使用utf8_ bin[区分大小写]: 表格中有如下数据:
当我们进程查找a
时,A
不会被查找出来:
因此,校验规则不同,结果会有所不同。
show databases;
语句:show create database 数据库名;
示例:
说明:
/*!40100 default.... */
这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
注意:不要随意删除数据库
有时候想知道自己当前在哪一个数据库中,使用语句:select datdbase()
语法:
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:对数据库的修改主要指的是修改数据库的字符集,校验规则
示例:
alter database test2 charset=gbk collate gbk_chinese_ci;
备份: 语法:
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
查看test1.sql
内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中:
此时我们删除数据库中test1
:
恢复:
source /home/MySQL/test1.sql
此时将历史对应的sql命令在新的数据库中执行一次。
数据就全部恢复:
注意事项:
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
show processlist;
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
不同的存储引擎,创建表的文件不一样。 users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
案例:
mysql> create table if not exists user1(
-> id int,
-> name varchar(20) comment '用户名',
-> password char(32) comment '用户密码',
-> birthday date comment '用户生日'
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> create table if not exists user2(
-> id int,
-> name varchar(20) comment '用户名',
-> password char(32) comment '用户密码',
-> birthday date comment '用户生日'
-> );
Query OK, 0 rows affected (0.02 sec)
在创建的时候,不带存储引擎时,默认的存储引擎是InnoDB
默认在配置的时候,默认存储的存储引擎是InnoDB
,可以在/etc/my.cnf
中查看:
语法:
desc 表名;
案例:
查看更详细的信息:show create table user1 \G
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
语法:
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);
案例一:修改表的名字
alter table user1 rename to user;
to:可以省掉
案例二:向表中插入数据
mysql> insert into user values (1,'张三','12345','2004-1-24');
Query OK, 1 row affected (0.01 sec)
mysql> insert into user values (1,'李四','5431','2005-2-25');
Query OK, 1 row affected (0.00 sec)
案例三:在user表添加一个字段,用于保存图片路径
mysql> alter table user add image_path varchar(128) comment '用户图像路径' after birthday;Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
插入新字段,对原来的表没有影响。
案例四:修改name,将其长度改成60
mysql> alter table user modify name varchar(60);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
把新的属性覆盖掉原来的。
案例四:删除password列
mysql> alter table user drop password;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
案例五:将name列修改为xingming 在MySQL中,对列名称进行修改时,不仅需要修改名称,还需要修改属性
mysql> alter table user change name xingming varchar(60) DEFAULT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
语法:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
示例:
mysql> drop table user;
Query OK, 0 rows affected (0.01 sec)
注意:删除表时一定要小心!!