学习来源 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 2
| USE db_name; SELECT DATABASE()|SCHEMA();
|
1
| mysql -u root -p -D 数据库名
|
数据表基础
1 2 3
| CREATE TABLE (IF NOT EXISTS) tbl_name ( 字段名称 字段类型 [完整性约束条件], )ENGINE=存储引擎 CHARSET=编码方式;
|
数据基础类型
![](image1.png)
![](image2.png)
decimal[(M,D)]默认保存精度是整数
![](image3.png)
char后面的空格不会留下来,不能有默认值
枚举
- 枚举类型可以插入null,从1开始,自动滤去空格
- 插入枚举使用默认值 INSERT … VALUES (DEFAULT)
日期时间
![](image4.png)
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;
|
看表的状态
删除表
不会重置AUTO_INCREMENT
1
| DELETE FROM tbl WHERE ...
|
测地清空数据表
1
| TRUNCATE [TABLE] tbl_name
|
InnoDB