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 的基本书写规则

  1. SQL语句要以分号(;)结尾
  2. SQL语句不区分大小写(不成文的规矩如下:)
    • 关键字大写
    • 表名的首字母大写
    • 其余(列名等)小写
    • 插入到表中的数据是区分大小写的
  3. 常数的书写方式是固定的
    • 字符串和日期常数需要使用单引号(')括起来
    • 数字常数无需加注单引号(直接书写数字即可)
  4. 单词需要用半角空格或者换行来分隔
    • 如: CREATE TABLE Product(正确的)

基于 postgresql 学习 sql

数据库的创建(CREATE DATABASE语句)

  • CREATE DATABASE <数据库名>;
    • CREATE DATABASE shop;
    • 最后数据库的库名只能使用小写字母。

登录数据库

登录方式共三种:

  1. 打开cmd,执行C:\postgresql\10\bin\psql.exe -U postgres -d shop
    • 这里的 -U 指 user,因为默认设置的是 postgres
    • 这里的 -d 指 database,所以后面跟库名shop。
  2. 直接打开postgresql的shell
  3. 直接使用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));

命名规则

我们只能使用半角英文字母、数字、下划线(_)所谓数据库、表和列的名称。且只能以字母作为开头。名称还不能重复。

  1. 数据库名称、表明和列名等可以使用以下三种字符:
    1. 半角英文字母
    2. 半角数字
    3. 下换线(_)
  2. 名称必须以半角英文字母作为开头。
  3. 名称不能重复。

数据类型的指定

数据类型表示数据的种类,包括数字型、字符型和日期型等。每一列不能存储与该列数据类型不符的数据。
最基本的四种数据类型:

  1. INTEGER型
    • 用来指定存储证书的列的数据类型(数字型),不能存储小数。
  2. CHAR型
    • CHAR 是CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符型)。
    • CHAR(10),在括号中指定该列可以存储的字符串的长度(最大长度),字符串超出最大长度部分是无法输入到该列中的。
    • 不同RDBMS,长度单位可能不同,存在字符个数、字节长度的情况。
    • 字符串以定常字符串的形式存储在被指定的CHAR型的列中。即:字符串长度达不到最大长度的时候,使用半角空格在后面进行补足。
  3. VARCHAR型
    • 同CHAR类型一样,用来指定存储字符串的列的数据类型(字符串类型)。
    • 也可以通过括号内的数字来指定字符串的长度(最大长度)。
    • 该类型的列是可变长字符串的形式来保存字符串的。
    • 可变长字符串类型,即使字符数未达到最大长度,也不会使用半角空格在后面补足。如:VARCHAR(8)类型存储'abc'的时候,保存的就是'abc',而不是'abc口口口口口'。
    • Oracle中使用 VACHAR2 型(oracle也有varchar类型,但并不推荐使用)
  4. DATE型
    • 用来指定存储日期(年月日)的列的数据类型(日期型)。

约束的设置

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。

  1. 数据类型的右侧设置了 NOT NULL 约束。
    • NULL是代表空白(无记录)的关键字。在前面加 NOT 表示不能为空。
    • 如 Product 表中的 product_id 和product_name 两列都不能为空。
  2. 主键约束
    • PRIMARY KEY (product_id) 是给 product_id 列设置 主键约束的。
    • :在指定特定数据时使用的列的组合。键的种类很多。
    • 主键(primary key):就是可以特定一行数据的列,或者说是为一样确定数据的列。
      如:把 product_id 列指定为主键,就可通过该列去除特定的商品数据了。如果向 product_id 列中输入了重复数据,就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)。这样就可以为某一列设置为主键约束了。

表的删除和更新

表的删除(DROP TABLE语句)

DROP TABLE <表名>

  1. 删除了的表是无法恢复的
  2. 在执行 FROP TABLE 语句之前请务必仔细确认。

表定义的更新(ALTER TABLE语句)

有时候好不容易吧表穿件出来之后才发现少了几列,其实这时无需把表删除在重新创建,只需使用变更表定义的 ALTER TABLE 语句就可以了。

  1. 添加列: ALTER TABLE <表名> ADD COLUMN <列的定义>;

例如:向 product 表中添加 product_name_pinyin 列代码如下:

ALTER TABLE Product ADD COLUMN porduct_name_pinyin VARCHAR(100);
  1. 删除列: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

posted @ 2021-01-21 13:31  hare1925  阅读(91)  评论(0编辑  收藏  举报