一、SQL概述
1.sql语言规范
- 关键字尽量大写,不要缩写和分行
- 字符串型和日期时间类型使用单引号
- 别名使用双引号,不建议省略as
- 所有标点符号都是英文输入
- 所有引号,括号都是成对结束的
- 单行注释# 或者 – 多行注释/* …*/
2.命名规则
- 数据库、表名不得超过30个字符,变量名限制为29个字符
- 只能包含A-Z,a-z,0-9,_共63个
- 不能在对象名的字符间留空格
- 避免重名,和方法冲突
- 关联表的数据类型和字段名要一直
3.SQL分类
- DDL:数据定义语言,包括CREATE,DROP,ALTER等
- DML: 数据操作语言, 包括INSERT, DELETE, UPDATE, SELECT等
- DCL: 数据控制语言,包括GRANT, REVOKE, COMMIT, ROLLBACK,
定义数据库, 表,字段, 用户的访问权限和安全级别
二、数据库查询
// 基本查询
SELECT ... FROM
// 去除重复行
SELECT DISTINCT...FROM
// 空值参与运算 ,所有运算符或列值遇到null值,运算的结果都为null
// 显示表结构
DESC TABLENAME
DESCRIBE TABLENAME
// 过滤数据, WHERE紧跟FROM
SELECT ...
FROM ...
WHERE
比较运算符
- BETWEEN … AND包含边界
- IN(列表)
- LIKE ‘%’表示零个或多个字符,‘_'一个字符
转义符\, 也可以用escape, 如下表示$是一个转义符
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT$_%‘ escape ‘$‘;
内查询和外查询
左连接和又连接
自连接和非自连接
约束
什么是约束?
-
为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
-
可以在创建表时规定约束,或者在表创建后通过Alter table语句规定约束
-
根据约束数据列的限制,约束可分为单列约束和多列约束
-
根据约束范围可分为列级约束和表级约束
-
根据作用可分为
NOT NULL 非空约束
UNIQUE唯一约束(默认创建一个唯一索引)
PRIMARY KEY 主键(非空且唯一)约束
FOREIGN KEY 外键约束
CHECK 检查约束(MYSQL不支持)
DEFAULT默认值约束
查看某个表已有的约束
SELECT * FROM information_schema.`TABLE_CONSTRAINTS` WHERE table_name = 'books'
UNIQUE约束
- 同一个表可以有多个唯一约束
- 唯一约束可以是某一列或者多列组合
- 如果不指定名称,默认是列名
- MYSQL会给唯一约束的列上默认创建一个唯一索引
两种方式
①
CREATE TABLE t_course(
cid int PRIMARY KEY,
cname VARCHAR(100) UNIQUE,
description VARCHAR(200)
);
②
CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
-- 使用表级约束语法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
创建表后再增加约束有3种方式
ALTER TABLE USER
ADD UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
ADD CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
MODIFY NAME VARCHAR(20) UNIQUE;
删除约束
- 删除唯一约束只能通过删除唯一索引的方式删除
ALTER TABLE USER
DROP INDEX uk_name_pwd;
- 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样
- 如果创建唯一约束时未指定名称,如果是单列,默认和列名相同,如果是多列组合,默认和第一个列名相同。可以自定义