首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL操作二

文章目录

  1. 1. Day02
    1. 1.1. 乱码问题
    2. 1.2. eclipse 下写sql
      1. 1.2.1. 配置
      2. 1.2.2. 自定义代码块
    3. 1.3. 约束
      1. 1.3.1. 主键(primary key)
      2. 1.3.2. 自增(auto_increment)
      3. 1.3.3. 非空(not null)
      4. 1.3.4. 注释
    4. 1.4. 事务
      1. 1.4.1. 关闭自动提交
      2. 1.4.2. 验证
      3. 1.4.3. 回滚(rollback)
      4. 1.4.4. 回滚点(savepoint)
      5. 1.4.5. 总结
    5. 1.5. SQL分类
      1. 1.5.1. 数据库定义语言 DDL
      2. 1.5.2. 数据操纵语言 DML
      3. 1.5.3. 数据查询语言 DQL
      4. 1.5.4. TCL
      5. 1.5.5. DCL
    6. 1.6. 数据类型

Day02

乱码问题

1.数据库字符集 要设置成utf8

  1. 表的字符集 设置为utf8
  2. windows系统的命令行里,有些版本是gbk的编码格式,可以通过set names gbk;的方式把mysql接收到数据是的解码格式设置为gbk,这个位置的gbk和数据库还有表的utf8没有关系
  3. 在windows系统中修改mysql默认的数据库编码,找到安装文件中的my.ini的配置文件 在里面添加时如下代码:character-set-server=utf8

eclipse 下写sql

配置

  1. 下载mysql驱动jar包
  2. window -> show view -> other -> Data Management -> Data source(open) / SQL Results(open)
  3. 找到控制台的Data source explor中,然后点击DataBaseConnetctions -> new
  4. 选择Mysql
  5. 点击下拉箭头右面的加号
  6. 选择5.1 点击jarList clearAll
  7. 点击add jar 在弹出窗口中找到下载的jar文件 然后ok 8.修改URL 只需要修改最后面的database即可,这个是选择需要操作的数据库
  8. 输入密码,save password
  9. 点击test connection 如果显示ping Successd则点击finish
  10. 在 Database Connections下的New MySQL 右键 选择
  11. 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

验证

  1. 创建表,插入数据
代码语言:javascript
复制
CREATE TABLE USR(id int primary key auto_increment,name varchar(10),money int);

INSERT INTO user values(NULL,'超人',200),(NULL,'蝙蝠侠',205);
  1. 关闭自动提交
  2. 让超人的钱+100 update user set money=300 where id=1
  3. 打开另外一个窗口登录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语言

数据类型

  • 整数
    • int 4字节
    • bigint 8字节
  • 浮点数
    • 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);
下一篇
举报
领券