SQL概述—JDBC学习笔记
- SQL语法
1、 SQL语句可以在单行或多行书写,以分号结尾
2、 可以使用空格和缩进来增强语句的可读性
3、 MySQL不区分大小写,建议使用大写 -
-
SQL语句分类
1、DDL(Data Definition Language)
- 数据库定义语言,用来定义数据库对象: 库、表、列等
- 创建、删除、修改:库、表结构 2、DML(Data Manipulation Language)
- 数据库操作语言,用来定义数据库记录(数据)
- 增、删、改 3、DCL(Data Control Language)
- 数据库控制语言,用来定义访问权限和安全级别 4、DQL(Data Query Language)
- 数据库查询语言,用来查询数据记录(数据)
DDL: 数据库或表的结构操作(**)
DML: 对表的记录进行更新(增、删、改)(**)
DQL: 对表的记录查询 (**)
DCL: 对用户的创建,及授权
MySQL
数据库操作
- 创建数据库:
CREATE DATABASE [IF EXISTS] <database> [CHARACTER SET utf8];
- 删除数据库:
DROP DATABASE [IF EXISTS] <database>;
- 修改数据库编码集:
ALERT DATABASE <database> CHARACTER SET utf8;
数据类型
- int 整形
- double 浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大999.99
- decimal 浮点型,在表单<金融>方面使用该类型,因为不会损失精度
- char 固定长度字符串类型,char(255),数据的长度不足指定长度时,补足到指定的长度!最大255
- varchar 可变长度字符串类型,varchar(65535),会留出来存放数据的长度,因此对空间造成损失,最大 65535
text(clob) 字长串类型:
很小:tinytext 可变长度字符串,最大2^8-1Byte
小: text 同上,最大2^16-1Byte
中: mediumtext 同上,最大2^24-1Byte
大: longtext 同上,最大2^32-1Byteblob 字节类型:
很小:binary 固定长宽二进制类型,最大255Byte
很小:varbinary 可变长度二进制类型,最大255Byte
很小:tinytext 可变长度二进制类型,最大2^8-1Byte
小: text 同上,最大2^16-1Byte (64KB)
中: mediumtext 同上,最大2^24-1Byte (16MB)
大: longtext 同上,最大2^32-1Byte (4GB)- date 日期类型,格式为:yyyy-MM-dd
- time 时间类型,格式为:hh:mm:ss
- timestamp 时间戳类型,即有日期也有时间
数据表操作
# 创建表:
CREATE TABLE [IF NOT EXISTS] <table>(
columeName1 columType,
columeName2 columType
...
columeNamen columType
);
# 查看当前数据库中所有表名称:
SHOW TABLES;
# 查看指定表的创建语句:
SHOW CREATE TABLE <table>
# 查看表结构:
DESC <table>
# 删除表:
DROP TABLE <table>
# 修改表:
ALTER TABLE <table> ...
# 添加列
ALTER TABLE <table> ADD(
columeName1 columType,
columeName2 columType
...
columeNamen columType
);
# 修改列类型:
ALTER TABLE <table> MODIFY <columeName columeType>;
# 修改列名:
ALTER TABLE <table> CHANGE <oldColumeName newColumeName newColumeType>;
# 删除列:
ALTER TABLE <table> DROP <columeName>;
# 表名称:
ALTER TABLE <table> RENAME TO <newTableName>;
DQL: (数据记录查询)
- SELECT * FROM <table>;
DML: (数据库操作,数据记录增删改查)
1. 插入数据
- INSERT INTO <table>(columeName1, columeName2,...) VALUES(columeValue1, columeValue2,...);
在表名后给出要插入的列名,其他没有指定的列等同于插入null值。所以插入记录总是插入一行,不可能是半行。
在VALUES后给出列值,值的顺序筱数必须与前面指定的列对应
INSERT INTO <table> VALUES(columeValue1,columeValue2...);
没有给出要插入的列,那么插入所有列,这时顺序很重要。
值的个数必须是该表列的个数
插入的顺序将与表创建的列顺序相同
修改数据库
UPDATE <talbe> SET columeName1=columeValue1, columeName2=columeValue2... [WHERE ...];
- 条件(条件为可选的):
条件必须是一个boolean类型的值或表达式, WHERE columeName=?
条件中的运算符:=、!=、<>、>、<、>=、<=、BETWEEN … AND … 、IN(…)、 IS NULL、NOT、OR、AND、columeName=null(always false)、1=1(always true)
删除数据:
DELETE FROM <table> [WHERE ... ]
TRUNCATE TABLE <table>;
TRUNCATE是DDL语句,它是先删除(DROP)该表,再CREATE该表。而且无法回滚
DCL(理解)
- 一个项目创建一个用户!一个项目对应的数据库只有一个!
这个用户只能对这个数据库有权限,其它数据库就不能操作了!
创建用户
CREATE USER username@ip IDENTIFIED BY 'password';
用户只能在指定的IP地址上登录CREATE USER username@'%' IDENTIFIED BY 'password';
用户可以在任意IP地址上登录
给用户授权
GRANT 权限1,权限2,...权限n ON <database.*> TO username@ip;
权限、用户、数据库
给用户分派在指定的数据库上的指定权限
例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO kangliqi@localhost;给用户kangliqi分配在本机IP上操作test数据库的CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT权限
GRANT ALL ON <database.*> TO username@ip
给用户分配指定数据库和IP上的所有权限
撤消权限
REVOKE 权限1,权限2,...权限n ON <database.*> TFROM username@ip;
撤消指定用户在指定数据库上的所有权限
例如:REVOKE CREATE,ALTER,DROP ON test.* FROM kangliqi@localhost;
查看权限
SHOW GRANTS FOR username@ip
查看指定用户的权限
删除用户
DROP USER username@ip