sql 学习笔记-1
sql 学习笔记1
SQL语句种类
DDL
DDL(Data Definition Language,数据定义语言)用来创建或删除存储数据用的数据库以及数据库中的表等对象。
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象的结构
DML
DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录。
- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
DCL
DCL(Data Control Language,数据控制语言)用来确认或者取消对数据中的数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL包含以下几种指令。
- COMMIT:确认对数据库中的数据进行的变更
- ROLLBACK:取消对数据库中的数据进行的变更
- GRANT:赋予用户操作权限
- REVOKE:取消用户的操作权限
实际使用的SQL语句中有90%属于DML。
SQL 的基本书写规则
- SQL语句要以分号(;)结尾
- SQL语句不区分大小写(不成文的规矩如下:)
- 关键字大写
- 表名的首字母大写
- 其余(列名等)小写
- 插入到表中的数据是区分大小写的
- 常数的书写方式是固定的
- 字符串和日期常数需要使用单引号(')括起来
- 数字常数无需加注单引号(直接书写数字即可)
- 单词需要用半角空格或者换行来分隔
- 如: CREATE TABLE Product(正确的)
基于 postgresql 学习 sql
数据库的创建(CREATE DATABASE语句)
CREATE DATABASE <数据库名>;
- 如
CREATE DATABASE shop;
- 最后数据库的库名只能使用小写字母。
- 如
登录数据库
登录方式共三种:
- 打开cmd,执行
C:\postgresql\10\bin\psql.exe -U postgres -d shop
- 这里的 -U 指 user,因为默认设置的是 postgres
- 这里的 -d 指 database,所以后面跟库名shop。
- 直接打开postgresql的shell
- 直接使用pg4admin打开
表的创建(CREATE TABLE语句)
CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
<列名4> <数据类型> <该列所需约束>,
...
<该表的约束1> <该表的约束2>,...);
该语法清楚地描述了我们要创建一个包含<列名1>,<列名2>,...的名称为<表名>的表,很容易理解。
每一列的数据类型(后述)是必须要指定的,
还要为需要的列设置约束(后述)。
约束可以在定义列的之后进行设置,也可以在语句的末尾进行设置。
但是 NOT NULL 约束只能以列为单位进行设置。
CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARChAR(100) NOT NULL,
product_type VARChAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
命名规则
我们只能使用半角英文字母、数字、下划线(_)所谓数据库、表和列的名称。且只能以字母作为开头。名称还不能重复。
- 数据库名称、表明和列名等可以使用以下三种字符:
- 半角英文字母
- 半角数字
- 下换线(_)
- 名称必须以半角英文字母作为开头。
- 名称不能重复。
数据类型的指定
数据类型表示数据的种类,包括数字型、字符型和日期型等。每一列不能存储与该列数据类型不符的数据。
最基本的四种数据类型:
- INTEGER型
- 用来指定存储证书的列的数据类型(数字型),不能存储小数。
- CHAR型
- CHAR 是CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符型)。
- CHAR(10),在括号中指定该列可以存储的字符串的长度(最大长度),字符串超出最大长度部分是无法输入到该列中的。
- 不同RDBMS,长度单位可能不同,存在字符个数、字节长度的情况。
- 字符串以定常字符串的形式存储在被指定的CHAR型的列中。即:字符串长度达不到最大长度的时候,使用半角空格在后面进行补足。
- VARCHAR型
- 同CHAR类型一样,用来指定存储字符串的列的数据类型(字符串类型)。
- 也可以通过括号内的数字来指定字符串的长度(最大长度)。
- 该类型的列是可变长字符串的形式来保存字符串的。
- 可变长字符串类型,即使字符数未达到最大长度,也不会使用半角空格在后面补足。如:VARCHAR(8)类型存储'abc'的时候,保存的就是'abc',而不是'abc口口口口口'。
- Oracle中使用 VACHAR2 型(oracle也有varchar类型,但并不推荐使用)
- DATE型
- 用来指定存储日期(年月日)的列的数据类型(日期型)。
约束的设置
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。
- 数据类型的右侧设置了 NOT NULL 约束。
- NULL是代表空白(无记录)的关键字。在前面加 NOT 表示不能为空。
- 如 Product 表中的 product_id 和product_name 两列都不能为空。
- 主键约束
PRIMARY KEY (product_id)
是给 product_id 列设置 主键约束的。- 键:在指定特定数据时使用的列的组合。键的种类很多。
- 主键(primary key):就是可以特定一行数据的列,或者说是为一样确定数据的列。
如:把 product_id 列指定为主键,就可通过该列去除特定的商品数据了。如果向 product_id 列中输入了重复数据,就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)。这样就可以为某一列设置为主键约束了。
表的删除和更新
表的删除(DROP TABLE语句)
DROP TABLE <表名>
- 删除了的表是无法恢复的
- 在执行 FROP TABLE 语句之前请务必仔细确认。
表定义的更新(ALTER TABLE语句)
有时候好不容易吧表穿件出来之后才发现少了几列,其实这时无需把表删除在重新创建,只需使用变更表定义的 ALTER TABLE 语句就可以了。
- 添加列:
ALTER TABLE <表名> ADD COLUMN <列的定义>;
例如:向 product 表中添加 product_name_pinyin 列代码如下:
ALTER TABLE Product ADD COLUMN porduct_name_pinyin VARCHAR(100);
- 删除列:
ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复。
- 表定义变更后无法恢复。
- 在执行 ALTER TABLE 语句之前请务必仔细确认。
向表中插入数据
BEGIN TRANSACTION;
INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11');
COMMIT;
- 使用插入行的指令语句 INSERT 就可以插入数据
- 开头的 BEGIN TRANSACTION 语句是开始插入行的指令语句
- 结尾的 COMMIT 语句是确定插入行的指令语句。
hare
2021.1.21