跟着狂神学MySQL

可以跟着sqlyog学sql

 连接数据库 mysql -u username -p password,也可以mysql -uusername -ppassword

修改密码

注释 --

多行注释 /**/

show databases; 显示所有数据库

use 数据库名

show tables; --查看数据库中所有的表

describe 表名; --显示表的字段等所有信息

 create database westos; --创建一个数据库

exit; 退出连接

DDL DML DQL DCL

Database Definition/Management/Query/Control Languague

操作数据库

1.创建数据库

create database [if not exists] westos

2.使用数据库

use `westos`

如果你的表名或者字段名是一个特殊字符,就需要带``,比如你的字段名是user, 那么因为mysql内置有个user表,所以查询的时候要

select `user` from westos

因为user会高亮

3.删除数据库

drop database [if not exist] westos

数据库的列类型

数值类型

tinyint 1字节

smallint 2字节

mediumint 3字节

int 4字节

bigint 8字节

float 4字节

double 8字节

decimal 字符串形式的浮点数,金融计算一般decimal

字符串类型

char  字符串固定大小的 1~255字节, char(5) 必定占5个字节

varchar  可变字符串 0~65535字节 varchar(5)就不一定5个字节

tinytext 1~255 

text  1~65535 

时间日期

date yyyy-mm-dd 日期

time hh:mm:ss 时间

datetime yyyy=mm-dd hh:mm:ss 日期时间,最常用

timestamp 时间戳

字段属性

Unsigned 无符号

zerofill 0填充 

自增 auto_increment

非空 not null

默认 default

标准 数据库应该具备 id, gmt_created, gmt_updated, is_deleted, 'version'

创建数据库

/*

*

所有字段用飘号圈起来

字符串用英文单引号括起来

所有语句后面加 ,

*/

create table if not exists `student` {

`id` int(4) not null auto_increment comment '学号',

`name` varchar(30) not null default '匿名' comment '姓名',

primary_key(`id`)

} Engine = INNODB  default charset=utf8 --默认不支持中文,所以必须指定charset

创建数据库表的模板

/*

*

所有字段用飘号圈起来

字符串用英文单引号括起来

所有语句后面加 ,
*/

create table [if not exists] `表名` {

`字段名` 列类型 [属性] [索引] [注释],

`字段名` 列类型 [属性] [索引] [注释],
....

`字段名` 列类型 [属性] [索引] [注释],


primary_key(`字段名`)

} Engine = INNODB  default charset = utf8

myisam和innodb 区别

innodb 事务支持,行级锁,支持外键约束,这些myisam都不支持

myisam 支持全文索引,类似于百度搜索java

myisam 节约空间,速度快

innodb 安全性高,事务处理,多表多用户操作

所有的数据库文件都在data目录下,本质还是文件存储,

mysql引擎在物理文件的区别:

innodb 在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件

myisam 对应文件

*.frm 表结构的定义文件

*.myd 数据文件

*.myi 索引文件

show create database 数据库名 --显示数据库创建语句
show create table 表名 --显示数据库表的定义语句
desc 表名 --显示表结构

事务

就是一组SQL放到一个批次中去执行,要么都成功,要么都失败

事务原则 ACID 原子性(Atomic 要么都成功,要么都失败) 一致性(Consistency) 隔离性(隔离性) 持久性(Durability 事务没有提交,恢复到原状;事务已经提交,则持久化到数据库。 事务一旦提交就不可逆)

隔离性() 是指,比如A和C都对B进行转账,那么这两个事务直接不会相互影响,导致金额混乱,所以这个时候也就涉及到了 数据库的隔离级别 : 读未提交 读已提交 可重复读 串行化

参考: https://blog.csdn.net/dengjili/article/details/82468576

1 脏读 一个事务读取了另外一个事务未提交的数据

2 幻读 第一次读有3行记录,第二次却有4行记录

3 不可重复读 一个事务内,读取某一行数据,多次读取结果不同

MySQL注入

sql里面会拼接 or 关键字,比如 select * from world where 'name' = tang or 1=1, 这样就一直是true,就会盗取非法数据,

所以一般不用statement,而用prepareStatement

PrepareStatement

可以防止SQL注入,使用占位符 ? 代替变量,通过setInt(下标, 值) 来给value里面的?赋值

先prepareStatement 预编译

然后通过setInt setString给参数赋值

再通过statement.executeUpdate() executeQuery()执行

prepareStatement的预防SQL注入的本质,就是把传递进来的参数当做字符,假设其中存在转义字符,比如单引号',那么就直接忽略这个字符 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值