文章目录
- 1. Day02
- 1.1. 乱码问题
- 1.2. eclipse 下写sql
- 1.2.1. 配置
- 1.2.2. 自定义代码块
- 1.3. 约束
- 1.3.1. 主键(primary key)
- 1.3.2. 自增(auto_increment)
- 1.3.3. 非空(not null)
- 1.3.4. 注释
- 1.4. 事务
- 1.4.1. 关闭自动提交
- 1.4.2. 验证
- 1.4.3. 回滚(rollback)
- 1.4.4. 回滚点(savepoint)
- 1.4.5. 总结
- 1.5. SQL分类
- 1.5.1. 数据库定义语言 DDL
- 1.5.2. 数据操纵语言 DML
- 1.5.3. 数据查询语言 DQL
- 1.5.4. TCL
- 1.5.5. DCL
- 1.6. 数据类型
Day02
乱码问题
1.数据库字符集 要设置成utf8
- 表的字符集 设置为utf8
- windows系统的命令行里,有些版本是gbk的编码格式,可以通过
set names gbk;
的方式把mysql接收到数据是的解码格式设置为gbk,这个位置的gbk和数据库还有表的utf8没有关系 - 在windows系统中修改mysql默认的数据库编码,找到安装文件中的my.ini的配置文件 在里面添加时如下代码:
character-set-server=utf8
eclipse 下写sql
配置
- 下载mysql驱动jar包
- window -> show view -> other -> Data Management -> Data source(open) / SQL Results(open)
- 找到控制台的Data source explor中,然后点击DataBaseConnetctions -> new
- 选择Mysql
- 点击下拉箭头右面的加号
- 选择5.1 点击jarList clearAll
- 点击add jar 在弹出窗口中找到下载的jar文件 然后ok
8.修改URL 只需要修改最后面的database即可,这个是选择需要操作的数据库
- 输入密码,save password
- 点击test connection 如果显示ping Successd则点击finish
- 在 Database Connections下的New MySQL 右键 选择
- type中选择mysql5.1 Name中选Neq Mysql Database中选择database 在最右侧如果显示connected,那么可以开始写sql语句
自定义代码块
点击windows -> 搜索 templates -> 选择SQL下editor下的templates -> New(新建)
约束
主键(primary key)
主键特点 : 非空 唯一
CREATE TABLE user(id int PRIMARY KEY,age int);
自增(auto_increment)
一般和主键一起使用
create table t5(id int primary key auto_increment,name varchar(10));
如果设置了自增长,那么在插入数据的时候主键可以不设置值。也可以赋值为null,数据库会自动为这个主键赋值(在原来的基础上自增+1)
非空(not null)
create table user(id int primary key,age int not null);
注释
直接使用comment
来添加字段注释即可
create table t6(id int comment '用户的id',age int comment '用户的年龄');
事务
- 数据库中sql语句执行的最小单元
- 不能分割执行事务内的sql语句,只能是同时执行成功,或者同时执行失败,否则可能出现安全性问题
- 一个事务中的代码块包含多条sql语句,只有一起执行成功才能成功,只要有一条出现错误都会失败,因为开启事务的话,每操作的一条语句产生的结果都是存储在内存中的,没有及时更新到数据库中,只有提交之后才能更新到数据库中
关闭自动提交
mysql的自动提交属性自动是开启的,就是每执行一次sql语句就会自动提交,如果需要使用事务功能,那么需要将其关闭,因为一旦提交了,数据就会发生改变,但是事务的功能就是当所有的sql语句都执行完才提交,因此要将其关闭。
- 显示自动提交的状态
show variables like '%autocommit%';
显示为on表示开启的
- 关闭自动提交
set autocommit=0;
此时再次查询状态就会显示OFF
- 再次开启自动提交
set autocommit=1
开启自动提交,此时查看就实现为on
验证
- 创建表,插入数据
CREATE TABLE USR(id int primary key auto_increment,name varchar(10),money int);
INSERT INTO user values(NULL,'超人',200),(NULL,'蝙蝠侠',205);
- 关闭自动提交
- 让超人的钱+100
update user set money=300 where id=1
- 打开另外一个窗口登录mysql,可以查看此时的超人看看钱是不是300,我们可以看到此时的数据并没有改变,因为我们关闭了自动提交,如果我们此时在原来窗口输入
commit;
,那么在看看另外的登录窗口就会发现数据改变了。
回滚(rollback)
当你之前的操作没有提交的话,那么你使用rollback这个命令,那么就会回滚到初始状态
回滚点(savepoint)
前提是没有设置了自动提交,才能回滚到保存点
savepint s1(标识);
: 设置保存点
回滚到保存点,那么保存点之前的操作都是存在的,一旦提交之后就会执行保存点之前的操作。 rollback to s1;
总结
当将自动提交设置为关闭状态,当改变数据库的内容时,只要手动提交输入 commit;
,才能更新到数据库中,否则就只是在内存中改变了。
- begin 起始点
- savepoint s(标识) 设置回滚点
- commit 提交
- rollback 回滚
- rollback to … 回滚到指定的回滚点
SQL分类
数据库定义语言 DDL
- Data Definition Language 数据库定义语言
- 常见命令: create drop alter truncate
- 这些命令不支持事务,就是没有提交也会生效
数据操纵语言 DML
- Data Manipulation Language :数据操作语言
- 常见命令: insert update delete select
- 支持事务,可以回滚,不提交将不会生效
数据查询语言 DQL
- Data Query Language : 数据查询语言
- 常见命令: select(也属于DML)
TCL
- Transaction Control Language : 事务控制语言
- 常见命令: begin commit rollback savepoint
DCL
- Data Control Language : 数据控制语言
- 给用户分配权限相关的sql语言
数据类型
- 整数
- 浮点数
- double(m,d): m代表数据的总长度,d表示小数点后面的位数
- decimal(m,d): m代表数据的总长度,d表示小数点后面的位数
- double精度比float高,decimal精度比double高
- 字符串类型
- char(n) : 固定长度,即是存了abc也是占满了n长度 执行效率高 总长255
- varchar(n) : 可变长度 存abc 占3个长度 节省空间 最大长度65535,但是超过255建议使用text
- text(n) : 可变长度 最大65535
- 日期类型
- date : 只能存储年月日
- time : 只能存储时分秒
- datetime : 年月日时分秒 默认值为null 最大值9999-12-31
- timestamp : 年月日时分秒 默认值是当前时间 最大值2038-01-19
- 创建表插入数据:create table p(d1 date, d2 time,d3 datetime,d4 timestamp); insert into p values('2018-03-08',null,null.null); insert into p values('2018-03-08','12:06:03',null,null);