学习笔记:javaEE基础7 SQL

学习来源 Java数据库开发与实战应用

主要就是一些sql语法,以前知道一些,这里权当是复习和补充,本文内容主要是

SQL分为四大类

  • DDL 定义
  • DML 操作
  • DQL 查询
  • DCL 控制

课程主要涉及前三个部分,第四个几乎没讲(就是关于sql用户,权限的创建和管理)

对数据库

  • 创建
1
CREATE DATABASE|SCHEMA [F NOT EXISTS] 数据库名 DEFAULT CHARACTER SET [=] charset;

数据库默认使用InnoDB引擎,支持外键,回滚等特性

  • 查看信息
1
SHOW CREATE DATABASE db_name;
  • 修改数据库配置信息
1
ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;
  • 删除数据库
1
DROP DATABASE db_name;
  • 选择数据库,并查看当前选择数据库
1
2
USE db_name;
SELECT DATABASE()|SCHEMA();
  • 在登录mysql的同时就选择数据库
1
mysql -u root -p -D 数据库名

数据表基础

1
2
3
CREATE TABLE (IF NOT EXISTS) tbl_name (
字段名称 字段类型 [完整性约束条件],
)ENGINE=存储引擎 CHARSET=编码方式;

数据基础类型

  • 整形

  • 浮点


decimal[(M,D)]默认保存精度是整数

  • 字符串类型


char后面的空格不会留下来,不能有默认值

  • 枚举

    • 枚举类型可以插入null,从1开始,自动滤去空格
    • 插入枚举使用默认值 INSERT … VALUES (DEFAULT)
  • 日期时间

  • Time类型

    • ‘2 12:23:45’ -> ‘60:23:45’

基础操作数据表

  • 查看数据表的具体信息
1
2
3
4
5
6
SHOW TABLE tbl_name
SHOW CREATE TABLE tbl_name

DESC tbl_name;
DESCRIBE tbl_name;
SHOW COLUMNS FROM tbl_name;
  • 删除表
1
DROP TABLE IF EXISTS tbl_name;

约束

  • UNSIGNED 无符号,从0开始
  • ZEROFILL 零填充 长度不够前补0
  • NOT NULL 非空
  • DEFAULT 默认值
  • PRIMARY KEY 唯一标示,不能重复,一表一个
  • UNIQUE KEY 唯一性,但一个表可以有多个,值不能重复,NULL除外
  • AUTO INCREMENT 自动增长,配合索引使用 插入为DEFAULT或NULL是启动默认自动增长 | ALTER TABLE tbl_name AUTO_INCREMENT=1;
  • FOREIGN KEY 外键约束
  • PRIMARY KEY(..., ...)联合主键

一个完整的表结构

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `immoc_user` (
`id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT `用户名`
`username` VARCHAR(20) NOT NULL UNIQUE COMMENT `用户编号`,
`password` CHAR(32) NOT NULL COMMENT `密码`,
`email` VARCHAR(50) NOT NULL UNIQUE COMMENT `邮箱`
`age` TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT `性别`,
`sex` ENUM('男','女','保密') NOT NULL DEFAULT `保密` COMMENT `性别`,
`married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT `0代表未婚,1已婚`,
`salary` FLOAT(8, 2) NOT NULL DEFAULT 0 COMMENT `薪水`
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

对数据表结构的修改

修改字段

1
ALTER TABLE tbl_name ADD 字段名称 字段属性 [约束条件] [FIRST|AFTER 字段名称]

删除字段

1
ALTER TABLE tbl_name DROP 字段名称

添加默认属性

1
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值

删除默认值

1
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT

添加列

1
ALTER TABLE tbl_name ADD [COLUMN] (col_name col_definition,…)

修改字段属性

1
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [字段属性] [FIRST|AFTER 字段名称]

修改字段名称

1
ALTER TABLE tbl_name CHANGE 字段名称 新字段名称 字段类型 [字段属性] [FIRST|AFTER 字段名称]

添加主键

1
ALTER TABLE tbl_name ADD PRIMARY KEY(字段名称)

删除主键

有AUTO_INCREMENT的话需要事先删去

1
ALTER TABLE tbl_name DROP PRIMARY KEY

添加唯一索引 不写默认为字段名

1
ALTER TABLE tbl_name ADD UNIQUE [INDEX]KEY(index_name)

删除唯一索引

1
ALTER TABLE tbl_name DROP INDEX index_name

修改数据表名称

1
2
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
RENAME TABLE tbl_name TO new_tbl_name;

看表的状态

1
show table status

删除表

不会重置AUTO_INCREMENT

1
DELETE FROM tbl WHERE ...

测地清空数据表

1
TRUNCATE [TABLE] tbl_name

InnoDB

  • 遵循ACID模型,支持事务,具有从服务崩溃中恢复的能力

    • 原子性 Atomiocity
    • 一致性 Consistency
    • 隔离性 Isolation
    • 持久性 Durability
  • 支持行级锁,提升用户并发读写的性能

  • 支持外键,保证数据一致性和完整性
  • 自带缓冲池
  • INSERT,UPDAYE,DELETE时,会使用一种change buffering的机制自动优化,提供一致性的读,缓存变更数据,减少磁盘IO,提高性能
  • 产生两个文件 .frm表结构文件 .ibd 数据和索引存储表空间