7. 数据库
7.1 创建数据库
- 用SQLyog创建在3.1演示过,就不演示了,下面演示代码创建
#演示数据库的操作
#创建一个名称为hsp_db01的数据库。
#使用指令创建数据库
CREATE DATABASE hsp_db01;#不指定字符集和校对规则 则为默认
#删除数据库指令
DROP DATABASE hsp_db01
#创建一个使用utf8字符集的hsp_db02数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8
#创建一个使用utf8字符集,并带校对规则的hsp_db03数据库
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin 区分大小写,默认 utf8_general_ci 不区分大小写
#下面是一条查询的sql,
#SELECT:查询;*:所有字段;FROM:从哪个表查
#WHERE:从哪个字段查;NAME='tom':查询名字是tom的
SELECT * FROM t1 WHERE NAME = 'tom'
- 上述代码要执行哪一条语句就要选中那一条语句,然后点击执行查询才会执行。执行完创建数据库后,要点击刷新对象浏览器才会看到
-
如果要在数据库 hsp_db02 和 hsp_db03 中创建一个表,如果没有指定表的字符集和字符集校对规则,那么表的字符集和校对规则与对应的数据库保持一致,而不是按照默认规则指定。比如 hsp_db03 中创建一个没有指定字符集和校对规则的表,则表的字符集为uft8,校对规则为 utf8_bin,hsp_db02 则分别为 utf8 和 utf8_general_ci
-
对上面最后一条语句的解释:hsp_db02 数据库的字符集校对规则为默认的 utf8_general_ci,它是不区分大小写的。而 hsp_db03 数据库的校对规则是设置了的 utf8_bin,区分大小写。所以如果在 02 和 03 数据库下面分别创建两个表,然后添加相同的内容如下:
在两个数据库下分别执行一次最后一条语句,结果如下:
7.2 查看、删除数据库
#演示删除和查询数据库
#先创建一个数据库hsp_db01
CREATE DATABASE `hsp_db01`
#查看当前数据库服务器中的所有数据库。注意下面的DATABASES,末尾有S。
SHOW DATABASES
#查看前面的hsp_db01数据库的定义信息
SHOW CREATE DATABASE `hsp_db01`
#注意:在创建数据库(表)时,为了规避关键字,可以使用反引号解决。反引号在Esc键下面
# 如果创建的数据库的名称不是一个关键字,那么就可以不用` `包围。
#创建一个以关键字create为名的数据库
CREATE DATABASE `create`
#删除前面创建的hsp_db01数据库
DROP DATABASE hsp_db01
7.3 备份、恢复数据库
- 备份数据库指令一定要在DOS界面下执行;备份数据库里面的数据库1、数据库2… 表示可以同时备份多个数据库;> 后的文件名表示要备份到哪个文件下,可以是路径。
-
恢复数据库,一定要在MySQL命令行再执行,切换到MySQL命令行指令(DOS下):
mysql -u root -p
- 恢复数据库还有一个方法,直接将备份文件bak.sql的内容放到查询编辑器中,然后全选并执行
7.4 备份、恢复数据库的表
- 注意:上面的 -p 后面的密码可以不写,不写的话回车后就要输入一次就行,写了就不用输入了;这里没有备份库时候的 -B ,如果不小心写了-B,那么系统就会把后面的表1、表2也当做数据库。
#SQLyog中的删除表
DROP TABLE t1;
8. 表
8.1 创建表
public class homework01 {
public static void main(String[] args) throws Exception {
//1.得到File类的Class对象
Class<?> fileClass = Class.forName("java.io.File");
//2.得到File类的所有构造器
Constructor<?>[] declaredConstructors = fileClass.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println("File的构造器:" + declaredConstructor);
}
//3.创建File对象
//3.1 先得到一个构造器
Constructor<?> constructor = fileClass.getConstructor(String.class);
//3.2 实例化一个File对象
Object o = constructor.newInstance("d:\\mynew.txt");//
//我自己的方法:o的编译类型是 Object,运行类型是File,所以向下转型后才能调用.createNewFile()
// File file = (File)o;
// file.createNewFile();
//创建成功
//3.3 得到createNewFile()的方法对象
Method createNewFile = fileClass.getMethod("createNewFile");
//3.4 调用方法并创建文件
createNewFile.invoke(o);
}
}
- 图形化不再多说,因为操作太简单了,下面只讲指令创建
- 注意:创建表的时候一定要指明在哪个数据库下创建。上图在hsp_db03数据库下创建的
8.2 MySQL常用数据类型(列类型)
- MySQL数据类型就是MySQL列类型,指的就是下面的红框。
-
数值类型:
- 整型:
- tinyint(1个字节)
- smallint(2个字节)
- mediumint(3个字节)
- int(4个字节)
- bigint(8个字节)
- 小数类型:
- float(单精度,4个字节)
- double(双精度,8个字节)
- decimal (M,D)(大小由M和D确定)
- 整型:
-
文本类型:
-
字符串:
- char(0-255)
- varchar(0-65535(0-2^16-1))
-
文本:
- text(0-2^16-1)
-
二进制数据:
- longtext(0-2^32-1)
-
-
二进制数据类型:
- blob(0-2^16-1)
- longblob(0-2^32-1)
-
日期类型:
- date(日期:年月日)
- time(时间:时分秒)
- datetime(年月日 时分秒:YYYY-MM-DD HH:mm:ss)
- timestamp(时间戳),可以自动更新
- year(年)
8.2.1 数值类型
- 整型
- bit类型(位类型)
- 小数类型
8.2.2 字符串类型
- 注意:char 是实实在在可以表示最大长度为255个字符的字符串;而varchar,它有最大65535个字节,但是有1-3个字节用来记录varchar的大小,因此实际用于存放字符串的长度为65535-3个字节,uft8 编码中,3个字节表示一个字符,因此可以表示长度为 65532/3=21844 的字符串,GBK 编码中,2个字节表示一个字符,因此可以表示长度为 65532/2=32766 的字符串。
- 下面的演示中 255、21844 和 32766 均指的是字符串长度(也即字符容量),不是字节:
- 字符串类型使用细节:
- 注意:上面的红框是因为text中,utf8编码下,一个中文字符用3个字节表示,数字和符号(~)用一个字节表示。
8.2.3 日期类型
- 上面的程序在DOS下执行流程:
8.2.4 创建表练习
- SQLyog中:
- DOS下:
8.3 表的修改
- 案例(重点):
#修改表的课堂练习(8.2.4已经创建好了emp表)
SELECT * FROM employee; #显示表(修改表名4后用employee)
DESC employee #显示表结构,可以查看表的所有列
-- 1.增加一个image列
ALTER TABLE emp
ADD image VARCHAR(32) NOT NULL DEFAULT '' #不允许为null值,默认是一个空字符''
AFTER `resume`
-- 2.修改job列,使其长度为60
ALTER TABLE emp
MODIFY job VARCHAR(60) NOT NULL DEFAULT '' #不允许为null这个也可以不写
-- 3.删除sex列
ALTER TABLE emp DROP sex
-- 4.表名改为employee
RENAME TABLE emp TO employee
-- 5.修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
-- 6.列名name修改为user_name
ALTER TABLE employee CHANGE `name` `user_name` VARCHAR(32) NOT NULL DEFAULT ''
- 注意:NOT NULL DEFAULT ‘’ 的意思是不允许为空值,默认为一个空字符串(都在 VARCHAR 后面加的);上面只有修改表名没有用到 ALTER
- DOS下如下: