当前位置:   article > 正文

postgreSQL基本教程_pgsql 教程

pgsql 教程

postgreSQL创建关系数据库

  1. 注释:--

  2. 数据类型:官网链接,如果碰到不熟悉的数据类型可以进入链接查看https://www.postgresql.org/docs/current/datatype.html

    1. PostgreSQL: Documentation: 16: 8.3. Character Types

    2. real 单精度浮点数

    3. text 变长字符串

    4. serial 自动递增四字节整数常常使用

    5. numeric [ (ps) ] 可选精度的精确数字

    6. date 日历日期(年、月、日)

    7. integer 有符号四字节整数

  3. 基础操作

    1. 约束检查:

      1. CREATE TABLE tablename (
      2. field1fieldtype,
      3. field2 fieldtype,
      4. field3 fieldtype CHECK (condition)
      5. );
      6. 比如:限制价格是正值
      7. CREATE TABLE products (
      8. product_no integer,
      9. name text,
      10. price numeric CHECK (price > 0)
      11. );
      12. 或者可以单独命名约束:
      13. CREATE TABLE products (
      14. product_no integer,
      15. name text,
      16. price numeric constraint positive_price CHECK (price > 0)
      17. );
      18. 可以引用多个列:
      19. CREATE TABLE products (
      20. product_no integer,
      21. name text,
      22. price numeric CHECK (price > 0),
      23. discounted_price numeric CHECK (discounted_price > 0),
      24. CHECK (price > discounted_price)
      25. );
      26. 可以多个条件对表约束:
      27. CREATE TABLE Salespeople (
      28. snum integer NOT NULL UNIQUE,
      29. sname char (10) NOT NULL UNIQUE,
      30. city char(10),
      31. comm decimal,
      32. CHECK (comm < .15 OR city = 'Barcelona')
      33. );
    2. 更改表的结构:

      1. 添加列:
      2. alter table t1 add pole1 char(10);
      3. 更改表格列的类型:
      4. alter table t1 alter column name type integer;
      5. 删除表格列:
      6. alter table t1 drop column pole1;
      7. 更改表名字:
      8. alter table t1 rename to t2;
    3. 删除表格:

      drop table table_name;
      
    4. 创建表格:

      1. CREATE TABLE table_name (
      2. column1 datatype ограничение(если есть),
      3. column2 datatype ограничение(если есть),
      4. column3 datatype ограничение(если есть),
      5. ....
      6. );
  4. 一些约束:

    1. 自增:SERIAL

      1. CREATE TABLE example_table (
      2. id SERIAL PRIMARY KEY,
      3. column1 INTEGER,
      4. column2 VARCHAR(50)
      5. );
    2. 不空:NOT NULL

      1. CREATE TABLE example_table (
      2. id SERIAL PRIMARY KEY,
      3. column1 INTEGER NOT NULL,
      4. column2 VARCHAR(50) NOT NULL
      5. );
    3. 唯一性:unique

      如果要给一组列定义唯一性约束,写成表约束:

      1. CREATE TABLE example_table (
      2. id SERIAL PRIMARY KEY,
      3. column1 INTEGER UNIQUE,
      4. column2 VARCHAR(50) UNIQUE
      5. );
      6. CREATE TABLE example (
      7. a integer,
      8. b integer,
      9. c integer,
      10. UNIQUE (a, c)
      11. );
    4. 默认值:default

      1. CREATE TABLE example_table (
      2. id SERIAL PRIMARY KEY,
      3. column1 INTEGER DEFAULT 0,
      4. column2 VARCHAR(50) DEFAULT 'default_value'
      5. );
  5. 主键:primary key

    主键也可以包含多个列,语法与唯一性约束类似:

    1. CREATE TABLE example (
    2. a integer,
    3. b integer,
    4. c integer,
    5. PRIMARY KEY (a, c)
    6. );
  6. 外键:

    foreign key (此表里的列名称) references main_table(main_table里面的关联列)
    

有关外键的删除和更新链接行时候的操作:

  • Set Null(设置为 NULL):当主表中的链接记录被删除或更新时,Set Null选项将外键列设置为 NULL 值。在这种情况下,外键列必须允许存储 NULL 值,否则会出现错误。
  • Restrict(限制):如果从属表中存在与主表相关联的行,则Restrict选项会阻止删除或修改主表中的行。这意味着只有在从属表中没有相关数据时,才能删除或修改主表中的行。
  • No Action(无操作):No Action与Restrict类似,都是在从属表中存在相关行时阻止删除或修改主表中的行。其本质区别在于No Action允许您延迟检查到事务的稍后阶段,而Restrict则立即执行检查。
  • Set Default(设置为默认值):当从主表中删除链接行时,Set Default选项将外键列设置为默认值。默认值是根据适当的约束设置的,这样可以确保数据完整性。
  • 例如:这个file1的表中user_id外键连接到users表中,使用Cascade 如下,放在外键后面,删除或更新主表中的行,相关的从属表中的行也会被相应地删除或更新

删除前:

删除后:

对于表的增删查改

  • 添加数据:

  1. insert into table1(p1,p2) values("**",**);
  2. 一次添加多行:
  3. INSERT INTO Products
  4. VALUES('iPhone 6', 'Apple', 3, 36000),('Galaxy S8', 'Samsung', 2, 46000),
  5. ('Galaxy S8 Plus', 'Samsung', 1, 56000);
  6. 将另个表中的内容插入到这个表中:
  7. INSERT INTO Product_2
  8. SELECT ProductName, Price, Manufacturer
  9. FROM Product
  10. WHERE price > 36000;
  • 数据更新:

  1. UPDATE <table_name>
  2. SET <col_name1> = <value1>, <col_name2> = <value2>, ...
  3. WHERE <condition>;
  4. 例如:
  5. Update Product SET Manufacturer = ‘Samsung’ where ProductName =
  6. ‘Galaxy’;
  • 数据删除:

  1. delete from table1;
  2. delete from table1 where id=1;
  3. 删除表格:drop table table1;
  • 查询数据:

  1. SELECT <col_name1>, <col_name2>, …
  2. FROM <table_name>;
  3. 去重复查询:
  4. select distinct <col_name1>, <col_name2>, …
  5. FROM <table_name>;
  6. 有条件的查询:
  7. select<col_name1>, <col_name2>, …
  8. FROM <table_name>
  9. from <condition>;

复杂数据类型:

  • 数组:

    1. CREATE TABLE sal_emp (
    2. name text,
    3. pay_by_quarter integer[],
    4. schedule text[][]
    5. );
    6. 插入数据:
    7. INSERT INTO sal_emp
    8. VALUES ('Bill',
    9. '{10000, 10000, 10000, 10000}',
    10. '{{"meeting", "lunch"}, {"training", "presentation"}}');
    11. 也可以用array进行插入:
    12. INSERT INTO sal_emp
    13. VALUES ('Bill',ARRAY[10000, 10000, 10000, 10000],
    14. ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);
    15. 查询:
    16. SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR
    17. pay_by_quarter[2] = 10000 OR
    18. pay_by_quarter[3] = 10000 OR
    19. pay_by_quarter[4] = 10000;
    20. 或者上面的这个查询可以直接更改为:
    21. SELECT * FROM sal_emp WHERE 10000 = any(pay_by_quarter);
    22. unnest 函数将数组展开为一组字符串比如:unnest(ARRAY[1,2])
    23. array_append 和 array_remove 函数用于添加和删除数组元素:
    24. update sal_emp set pay_by_quarter=array_append(pay_by_quarter,10000)where id=3;
    25. UPDATE sal_emp SET pay_by_quarter =array_append(pay_by_quarter、
    26. 10000) WHERE id=3
    27. array_remove 从数组中移除所有等于指定值的元素(数组必须是一维的):
    28. UPDATE sal_emp SET pay_by_quarter =array_remove(pay_by_quarter、
    29. 10000) WHERE id=3
    30. 使用 array_length 函数可以找出数组的长度:
    31. SELECT array_length(pay_by_quarter, 1) AS pay_by_quarter_elements
    32. FROM sal_emp;
  • 结构体

    1. CREATE TYPE inventory_item AS (
    2. name text,
    3. supplier_id integer,
    4. price numeric
    5. );
    6. 例如:CREATE TABLE on_hand (
    7. item inventory_item,
    8. count integer
    9. );
    10. SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
    11. 如何添加或修改整个列:
    12. INSERT INTO mytab (complex_col) VALUES((1.1,2.2));
    13. UPDATE mytab SET complex_col = ROW(1.1,2.2) WHERE ...;
    14. 结构类型全输出:
    15. SELECT item FROM on_hand;
  • . 枚举

    1. CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
    2. 参数赋值为上面列举出来的,如果里面没有相关值就会报错:
    3. UPDATE Student"
    4. SET mood='very happy'
    5. WHERE id=2;

  • 几何

         我的例子是‘点’,‘圆形’,‘线’,‘正方形’,注意他们每一个在赋值的时候都要用单引号引住

 

  • Range:

 

  • JSON类型:

   补充一下关于json的相关知识:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,jSON的基本结构包括两种数据结构:

  • 对象(Object):对象是一个无序的键值对集合,每个键值对之间用逗号分隔,整个对象包含在花括号 {} 中。键必须是字符串,值可以是字符串、数字、对象、数组、布尔值、null等;
  • 数组(Array):数组是一个有序的值集合,值之间用逗号分隔,整个数组包含在方括号 [] 中。数组中的值可以是字符串、数字、对象、数组、布尔值、null等。

补充一下关于json的相关知识:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,jSON的基本结构包括两种数据结构:

对象(Object):对象是一个无序的键值对集合,每个键值对之间用逗号分隔,整个对象包含在花括号 {} 中。键必须是字符串,值可以是字符串、数字、对象、数组、布尔值、null等; 数组(Array):数组是一个有序的值集合,值之间用逗号分隔,整个数组包含在方括号 [] 中。数组中的值可以是字符串、数字、对象、数组、布尔值、null等。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/514766
推荐阅读
相关标签
  

闽ICP备14008679号