SQL学习笔记
⼀、什么是SQL
- SQL 指结构化查询语⾔
- SQL 使我们有能⼒访问数据库
- SQL 是⼀种 ANSI 的标准计算机语⾔
⼆、SQL能做什么?
- SQL ⾯向数据库执⾏查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插⼊新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
三、常⽤SQL语句整理
1、DML与DDL
可以把SQL分为两类:DML(数据操作语⾔)和DDL(数据定义语⾔)
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT – 从数据库表中获取数据
- UPDATE – 更新数据库表中的数据
- DELETE – 从数据库表中删除数据
- INSERT INTO – 向数据库表中插⼊数据
SQL 的数据定义语⾔ (DDL) 部分使我们有能⼒创建或删除表格。我们也可以定义索引(键), 规定表之间的链接,以及施加表间的约束。
SQL中常⻅的DDL语句:
- CREATE DATABASE – 创建新数据库
- ALTER DATABASE – 修改数据库
- CREATE TABLE – 创建新表
- ALTER TABLE – 变更(改变)数据库表
- DROP TABLE – 删除表
- CREATE INDEX – 创建索引(搜索键)
- DROP INDEX – 删除索引
2、常⽤DML整理
select语句
select⽤于从表中选取数据,执⾏后会返回⼀个包含所有结果的结果集。
语法:
select 列名称 from 表名称 — 从表中获取制定列的所有数据
select * from 表名称 — 从表中获取所有记录
实例:
select name from users
select * from users
select后⾯还可以跟where⼦句,⽤于规定选择标准,语法:
select 列名称 from 表名称 where 列 运算符 值
例如: select name from users where age = 15
where可以使⽤下列运算符:
操作符 | 描述 |
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
有时候表中会有重复值,这时候可以使⽤select distinct只返回唯⼀不同的值,⽤法和select⼀ 样。
select还可以使⽤order by 对查询到的结果进⾏排序 语法:
select 列名称 from 表名称 order by 列名称
insert语句
insert⽤于向表中插⼊⼀条数据
语法:
insert into 表名称 values (值1, 值2…)
insert into 表名称 (列1, 列2…) values (值1, 值2…)
实例:
insert into users values (1, ‘mary’, ‘female’)
insert into users (name, age) values (‘tom’, 16)
update语句
update⽤于更新表中记录
语法:
update 表名称 set 列名称 = 新值 where 列名称 = 某值
实例:
update users set age = 20 where name = ‘Mary’ update users set sex = ‘male’, age = ’14’ where id = 4
delete语句
delete可⽤于删除表中的⾏
语法:
delete from 表名称 where 列名称 = 值
实例:
delete form users where name = ‘Mary’
delete还可以在不删除表的情况下删除所有⾏
语法:
delete from 表名称 delete * from 表名称
3、常⽤DDL
create database
create database⽤于创建数据库。
语法:
create database 数据库名
create table
create table ⽤于创建表。
CREATE TABLE 表名称 (
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
….
)
实例:
create table users ( id int(11) not null, name varchar(255), age int(3) )
create index
create index⽤户给表建⽴索引,再不读取整个表数据情况下,索引可以提⾼查询效率,语法:
CREATE INDEX 索引名 ON 表名 (列名)
PS:对于含有索引的表,在插⼊数据和更新数据时都会更新索引,所以索引并不是建⽴的越多 越好,⼀般只在常⽤的列上建⽴索引。
drop
drop语句可以⽤来删除索引、表和数据库。
语法:
alter table 表名 drop index 索引名 − 删除索引
drop table 表名 − 删除表(表数据和表结构都会被删除)
drop database 数据库名 − 删除数据库
PS:如果只想删除表数据但保留表结构,可以使⽤truncate table 表名
alter
alter语句可以⽤来修改数据库结构,修改表结构。
alter table可以⽤来修改表的列,还可以修改索引(MySQL)
表中添加列:
ALTER TABLE 表名 ADD 列名 数据类型
表中删除列:
ALTER TABLE 表名 DROP COLUMN 列名
修改列的数据类型:
ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型
四、SQL约束
约束⽤于限制加⼊表的数据的类型,常⽤约束条件如下:
- NOT NULL:强制列不接受NULL值
- UNIQUE:约束唯⼀标识表中每⼀条记录,⼀个表可以有多个UNIQUE约束
- PRIMARY KEY:主键也是唯⼀标识表中每⼀条记录,且设置为主键的列不能为空,⼀个 表只能有⼀个主键
- FOREIGN KEY:⼀个表的外键指向另⼀个表的主键,FOREIGN KEY 约束⽤于预防破坏表 之间连接的动作,也能防⽌⾮法数据插⼊外键列,因为它必须是它指向的那个表中的值 之⼀
- CHECK:⽤于限制列中的值的范围
- DEFAULT:⽤于向列中插⼊默认值
五、SQL数据类型(MySQL)
MySQL中主要有三种类型:⽂本、数字、⽇期∕时间
1、⽂本类型:
数据类型 | 描述 |
CHAR(size) | 保存固定⻓度的字符串(可包含字⺟、数字以及特殊字符)。在括 号中指定字符串的⻓度。最多 255 个字符。 |
VARCHAR(size) | 保存可变⻓度的字符串(可包含字⺟、数字以及特殊字符)。在括 号中指定字符串的最⼤⻓度。最多 255 个字符。 注释:如果值的⻓度⼤于 255,则被转换为 TEXT 类型。 |
TINYTEXT | 存放最⼤⻓度为 255 个字符的字符串。 |
TEXT | 存放最⼤⻓度为 65,535 个字符的字符串。 |
BLOB | ⽤于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数 据。 |
MEDIUMTEXT | 存放最⼤⻓度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | ⽤于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节 的数据。 |
LONGTEXT | 存放最⼤⻓度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | ⽤于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字 节的数据。 |
ENUM(x,y,z,etc.) | 允许你输⼊可能值的列表。可以在 ENUM 列表中列出最⼤ 65535 个值。如果列表中不存在插⼊的值,则插⼊空值。 注释:这些值是按照你输⼊的顺序存储的。 可以按照此格式输⼊可能的值:ENUM(‘X’,’Y’,’Z’) |
SET | 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储 ⼀个以上的值。 |
2、数字类型:
数据类型 | 描述 |
TINYINT(size) | -128 到 127 常规。0 到 255 ⽆符号。在括号中规定最⼤位数。 |
SMALLINT(size) | -32768 到 32767 常规。0 到 65535 ⽆符号。在括号中规定最⼤ 位数。 |
MEDIUMINT(size) | -8388608 到 8388607 常规。0 to 16777215 ⽆符号。在括号中 规定最⼤位数。 |
INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 ⽆符号 。在括号中规定最⼤位数。 |
BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 ⽆符号。在括号中规定最⼤位数。 |
FLOAT(size,d) | 带有浮动⼩数点的⼩数字。在括号中规定最⼤位数。在 d 参数中 规定⼩数点右侧的最⼤位数。 |
DOUBLE(size,d) | 带有浮动⼩数点的⼤数字。在括号中规定最⼤位数。在 d 参数中 规定⼩数点右侧的最⼤位数。 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的⼩数点。 |
3、⽇期∕时间类型:
数据类型 | 描述 |
DATE | 日期。格式:YYYY-MM-DD 注释:⽀持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’。 |
DATETIME | ⽇期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:⽀持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ 。 |
TIMESTAMP | 时间戳。TIMESTAMP 值使⽤ Unix 纪元(‘1970-01-01 00:00:00’ UTC) ⾄今的描述来存储。格式:YYYY-MM-DD HH:MM:SS 注释:⽀持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC。 |
TIME | 时间。格式:HH:MM:SS 注释:⽀持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’。 |
YEAR | 2 位或 4 位格式的年。 注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值: 70 到 69,表⽰从 1970 到 2069。 |