
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指定数据库字符集的校验规则IF NOT EXISTS的意思是如果数据库存在就不创建数据库不存在就创建。例如创建已经存在的test数据库create database if not exists _database1;create database _database1; //直接创建不存在则创建create database if not exists test;数据库被创建本质上就是在/var/lib/mysql下创建一个目录创建数据库的时候有两个编码集1.数据库编码集2.数据库校验集只要是数据无论是未来的存储还是读取数据一定是要有对应的编码格式的。数据库这种与数据打交道的软件更加注重编码集。编码集必须是统一的就是存数据之前采用什么编码取数据时必须以同样的编码去取。1.数据库编码集 — 数据库未来存储数据采用的编码集将来把数据存到数据库里未来要对数据做各种增、删、查、改。所有只要你这样你就是要做比较。要比较对应的某些字段一样前提是都要先被读出来那两个字段的被读出来的校验规则或者被读取时的编码规则必须也是一样的。要不然怎么保证是一样的呢。2.数据库校验集 — 支持数据库进行字段比较使用的编码。本质也是一种读取数据库中数据采用的编码格式。所以不管是保存时用的是什么编码还是对比读取采用的编码必须得是一样的。因此数据库不论对数据做任何操作都必须保证操作和编码必须是编码一致的。查看系统默认编码集及校验规则show variables like character_set_database; //编码集show variables like collation_database; //校验集查看支持编码集show charset;查看支持校验集show collation;当我们创建数据库或者表没有指定编码和校验规则时系统默认以配置文件为主除非用户在SQL语句中手动确认了自己要采用某种编码。没指定就是默认的指定就用指定的有两种写法create database test charsetgbk;create database test character set gbk;指定校验集create database test charsetgbk collate gbk_chinese_ci;数据库配置文件中配置这个编码有什么意义呢因为曾经在配置文件中设置过所以会影响创建数据库时默认编码和校验规则编码和校验规则是匹配的。那问题又来了今天为什么又要设置数据库编码呢因为数据库里是需要存表的在数据库里可能要建各种各样的表这些表采用编码和校验规则是继承至它所在的数据库。数据库默认依赖于mysqld表依赖于数据库。这样就可以理解为什么要做这样的配置。校验集对数据库的影响创建一个数据库校验规则使用utf8_ general_ ci[不区分大小写]创建一个数据库校验规则使用utf8_ bin[区分大小写]排序结果也会不同1.2删除数据库语法DROP DATABASE [IF EXISTS] db_name;db_name是创建数据库的名字[] 是可选项可以选择不写drop database d1;执行后的结果数据库内部看不到对应的数据库对应的数据库文件夹被删除级联删除里面的数据表全部被删注意不要随意删除数据库建议做个备份。然后再删除1.3查找数据库show databases;如果要使用某个数据库必须要先use选择数据库有时候忘记使用那个数据库了可以查看一下select database();显示创建数据库时的命令show create database 数据库名;MySQL 建议我们关键字使用大写但是不是必须的数据库名字的反引号是为了防止使用的数据库名刚好是关键字/*!40100 default… */ 这个不是注释表示当前使用mysql版本大于4.01版本就执行这句话1.4修改数据库语法ALTER DATABASE db_name[alter_spacificarion [,alter_spaciffcation] ...]alter_spacification[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name对数据库的修改主要指的是修改数据库的字符集校验规则如将下面数据库编码集修改成gbkalter database test1 charsetgbk collate gbk_chinese_ci;1.5数据库备份和恢复在Linux中如果要对一个文件或者目录做备份实际上就是拷贝一份。有一种相当简单粗暴的做法直接把数据库目录打个包备份一下但是实际在用的时候一定会存在问题比如你的数据库是5.7的但是曾经那个数据库和表是在5.4建立的可能出现不兼容的问题。还有我们不能对数据库rename做重命名万一别人正在用这个数据库呢什么情况下你才会对数据库进行重命名呢备份的时候因此我们推荐使用mysql自备的备份工具来进行备份。备份mysqldump -P 3306 -u root -p 密码 -B 数据库名 数据库备份存储文件路径把test1.sql打开后可以看到里面是大部分内容我们就见过的如craete database test1、use test1还有后面插入数据等等。其实它备份的时候是把在这个数据库里做的有效操作全备份起来了。所以说备份的不是只有数据还把历史上所有有效操作全部备份起来了。删除数据库test1drop database test1;还原source 备份存储路径此时它可以将备份文件test1.sql里面的sql语句全部在新的MySQL里在执行一遍如果备份的不是整个数据库而是其中一张表怎么做mysqldump -uroot -p 数据库名 表名1 表名2 数据库表备份存储的文件路径同时备份多个数据库mysqldump -uroot -p -B 数据库名1 数据库名2 ... 数据库备份存储文件路径如果备份一个数据库时没有带上-B参数 在恢复数据库时需要先创建空数据库然后ues数据库再使用source来还原。备份时带了 -B 这个备份文件其实是带了create databdase test1use test1如果没有带 -B 备份的时候只会把这个数据库里面所有表信息数据信息全部备份出来如果需要还原需要自己先把数据库建好。所以要对数据库重命名的话其实直接它库中表的内容备份一下也就是备份时不要带 -B 还原的时候创建好数据库然后source一下就好了。1.6查看数据库连接情况show processlist; //查看有多少人在使用数据库注意不轻易对数据库进行删除、改名因为上层在用。2.表的操作2.1创建表语法CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype,) character set 编码集 collate 检验集 engine 存储引擎;field 表示列名datatype 表示列类型character set 字符集如果没有指定字符集则以所在数据库的字符集为准collate 校验规则如果没有指定校验规则则以所在数据库的校验规则为准不同的存储引擎创建表的文件不一样图一user表存储引擎是 MyISAM 在数据目中有三个不同的文件分别是user.frm表结构user.MYD表数据user.MYI表索引图二只有两张表就是因为存储引擎的不同。2.2查看表结构show tables; //查看当前数据库中的表desc 表名; //查看对应表结构的详细结构信息当时在建表时还有表的编码、校验码、存储引擎还有描述字段这个表更为详细的详细我应该怎么查呢show create table user; //显示创建详细信息show create table user \G; //格式化显示上面和我们当时创建表写的不一样这是因为我们写的SQL语句这是经过mysqld内词法语法分析把我们写的不标准的改成标准的写法。2.3修改表在项目实际开发中经常修改某个表的结构比如字段名字字段大小字段类 型表的字符集类型表的存储引擎等等以及添加字段删除字段这时我们就需要修改表。语法ALTER TABLE tablename ADD (column datatype [DEFAULT expr] [,colmndatatype] ...);ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr] [,columndatatype] ...);ALTER TABLE tablename DROP (column);更改表名字alter table user rename to test_rename;建表插入两条信息对表进行修改新增一列由于保存图片路径add 后面跟的是你想新增那一列列的类型是什么描述是什么after表示你想指定新增到那一列的后面first表示插入到第一列alter table user add image_path varchar(128) comment 用户头像路径 after birthday;现在问题是name 类型大小是20现在想对指定列中的属性做修改name 列长度由20变成60修改某一字段modify后面跟你要改谁后面在跟新的属性alter table user modify name varchar(60);但是更为重要的是如果刚才改字段属性就是只改了字段大小你会发现以前name后面的comment没有了。说明并不是定向你要改那个字段就给你改那个字段它是把新的属性直接覆盖把原来创建name字段属性等全部覆盖掉。 换句话说如果未来你想改某一列你肯定要把这一列曾经的所有属性全部复制下来在代码中对要改的字段修改在重新提交一下。删除某列drop后面跟着要删除那一列alter table user drop image_path;注意删除字段一定要小心删除字段及其对应的列数据都没了所有一定要保证这个数据是真的不要了修改表名将name列修改为xingmingalter table user change name xingming varchar(60) DEFAULT NULL comment 用户名;change后面跟着旧列名 再跟新列名和属性。列名称要改不仅仅需要提供新列名称这个列的相关属性也需要都给相当于把这一列重新设置。2.4删除表语法DROP [TEMPORARY] TABLE [IF EXISTS] tbl-name [, tbl_name] ...drop table user;像createdrop都是在做表操作但是select并不是操作表结构操作的是表的内容。前面学过SQL分类有DDL、DML、DCL。像我们目前学到的库的操和表的操作属于那种类型的SQL呢DDL 数据定义语言。