SQL
1. 什么是SQL?
Structured Query language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。
每一种数据库操作的方式存在不一样的地方,成为“方言”。
2. SQL通用语法
1. SQL语句可以单行活多行书写,以分号结尾。
2. 可使用空格和缩进来增强语句的可读性。
3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4. 3种注释
- 单行注释: -- 注释内容/# 注释内容(mysql特有)
- 多行注释: /* 注释 */
3. SQL分类
1)DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,字段等。
关键字:create, drop, alter等
2)DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。
关键字:inset, delete, update等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。
关键字:select, where等
4)DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。
关键字:grant, revoke等
DDL:操作数据库、表
1. 操作数据库
- 数据库中常用的几个关键字:
- Row:行
- Column:列(field/字段)
- 创建数据库:
- 基本语法:create database 数据库名字 [库选项];
- 库选项:数据库的相关属性
- 字符集:charset 字符集;
- 代表着当前数据库下的所有表储存的数据默认指定的字符集
如果当前不指定,那么采用DBMS默认的
- 校对集:collate 校对集;
- 例:create database mydatabase2 charset gbk;
- 显示全部数据库:
show databases;
- 显示部分数据库:
- show databases like '匹配模式';
- -:匹配当前位置单个字符
- %:匹配指定位置多个字符
- 例:
- 获取以my开头的全部数据库:'my%';
- 获取m开头,后面第一个字母不确定,最后为database的数据库:'m_database';
- 获取以database结尾的数据库:'%database';
- 显示数据库创建语句
- 基本语法:show create database 数据库名称;
2. 操作表
- 创建数据表:
- 基本语法:
create [temporary] table 表名 (
字段名1 数据类型 [列级完整性约束条件] [默认值]
[,字段名2 数据类型 [列级完整性约束条件][默认值]]
[,······]
[,表级完整性约束条件]
)[engine=引擎类型]
- 列级完整性约束条件:
1. 主键约束:PRIMARY KEY(primary key)
单字段主键约束、多字段主键约束
2. 外键约束:
- 格式:
CONSTRAINT(constraint) 外键名称 FOREIGN KEY(foreign key)(被外键约束的字段名称
- 特点:
(1). 外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。
(2). 这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。
(3). 子表被外键约束修饰的字段必须和父表的主键字段的类型一样。
- 注意:
一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。而不是“是外键”),
并会给该表中的外键约束取一个名称,所以我们常说的这个表有没有外键,
指的不是被外键约束修饰的字段名,而是指这个表是否有存在外键约束。
也就是说,不能说这个表的外键是xxx(该表中被外键约束修饰的字段名),这种说法是错误的。
3. 非空约束:NOT NULL(not null)
被该约束修饰了的字段不能为空。
4. 唯一约束:UNIQUE(unique)
被该约束修饰了的字段中的值唯一,不能有相同的值。
5. 默认约束:DEFAULT(default)
指定这一列的默认值是多少。
6. 自动增加:AUTO_INCREMENT(auto_increment)
该约束一个表中只能有一个字段使用;
并且使用这个约束的字段只能是整数类型(TINYINT,SMALLIN,INT,BIGINT);
默认值是1,也就是说从1开始增加的。
一般就是给主键使用的。
- 查询表结构:
- 查看所有表:
show tables;