本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql
数据库(DBMS)类型共分5种:
- 层次数据库(Hierarchical Database,HDB)
- 关系数据库(Relational Database,RDB)
- 面向对象数据库(Object Oriented Database,OODB)
- XML数据库(XML Database,XMLDB)
- 键值存储系统(Key-Value Store,KVS),举例:MongoDB
本次学习以关系数据库RDBMS为主
* Oracle Database:甲骨文公司的RDBMS
* SQL Server:微软公司的RDBMS
* DB2:IBM公司的RDBMS
* PostgreSQL:开源的RDBMS
* MySQL:开源的RDBMS
RDBMS结构如图所示
一个在本地环境安装的RDBMS可以访问许多数据库
一个数据库里可以有许多张表
一个表里面可以设置许多字段
数据库中存储的表结构类似于excel中的行和列,在数据库中,行称为记录,它相当于一条记录,列称为字段,它代表了表中存储的数据项目。
行和列交汇的地方称为单元格,一个单元格中只能输入一条记录。
SQL语句分为三类,DDL数据库定义语言,DML数据库操纵语言,DCL数据库控制语言。
DDL用来创建删除数据库和表,还能修改数据库和表等对象的结构
DML用来增删改查表记录
DCL用来确认或者取消对数据库中的数据进行的变更,还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定
基本规则:
- SQL语句要以分号( ; )结尾
- SQL 不区分关键字的大小写,但是插入到表中的数据是区分大小写的
- win 系统默认不区分表名及字段名的大小写
- linux / mac 默认严格区分表名及字段名的大小写
- 本教程已统一调整表名及字段名的为小写,以方便初学者学习使用。
- 常数的书写方式是固定的
- 单词需要用半角空格或者换行来分隔
基本语法:
创建数据库
CREATE DATABASE < 数据库名称 > ;
创建表
CREATE TABLE < 表名 >
( < 列名 1> < 数据类型 > < 该列所需约束 > ,
< 列名 2> < 数据类型 > < 该列所需约束 > ,
< 列名 3> < 数据类型 > < 该列所需约束 > ,
< 列名 4> < 数据类型 > < 该列所需约束 > ,
.
.
.
< 该表的约束 1> , < 该表的约束 2> ,……);
注:数据库、表和列的名称只能使用半角英文字母、数字、下划线(_),并且必须以半角英文字母开头
删除表
DROP TABLE < 表名 > ;
添加列
ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;
删除列
ALTER TABLE < 表名 > DROP COLUMN < 列名 >;
清空表 推荐使用,速度快
TRUNCATE TABLE TABLE_NAME;
更改表数据 UPDATE
UPDATE <表名>
-- 更新一个字段
SET <列名> = <表达式>
-- 更新多个字段
SET <列名> = <表达式> , <列名2>=<表达式2>...
WHERE <条件> -- 可选,非常重要。
ORDER BY 子句 --可选
LIMIT 子句; --可选
注:在update的时候一定要注意添加where 不然所有行都会被修改
update允许将被set的列设置为NULL,但是被设置了NOT NULL约束和主键约束的列不允许
插入表数据 INSERT
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
对全表进行插入时可省略列名
INSERT INTO <表名> VALUES (值1, 值2, 值3, ……);
多行插入
INSERT INTO productins VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
task01作业答案:
CREATE TABLE `Addressbook` (
`regist_no` int(11) NOT NULL,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`tel_no` char(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`mail_address` char(20) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`regist_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
引擎:InnoDB
字符集:uft8
核对:utf8_unicode_ci
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
DROP TABLE Addressbook;
删除后无法用SQL语句恢复,只能再次使用CREATE TABLE创建表