zoukankan      html  css  js  c++  java
  • sql语句体系

    一.SQL语句体系

    a) DQLData Query Language):数据库查询语言(select

    b) DDLData Define Language):数据库定义语言(createdropalter

    c) DMLData Modify Language):数据库修改语言(insertdeleterupdate

    d) TCLTransaction Control Language):事物控制语言(commitrollback

    二.DDL

    a) create:创建表。

    b) 语法格式:create table 表名(列名1 数据类型 [约束],列名2 数据类型 [约束]......);

    c) 数据类型:

    1. Integer:整型
    2. Char:字符串类型。最多可存储2000个字符或者字节。该数据类型规定的长度是固定。
    3. Varcharvarchar2:字符串类型。最多可以存储4000字节数据。该类型是不固定长度的。
    4. Number:正数,负数,小数。Number(p,s):p指定的是数据的精度。S表示的是小数的位数。
    5. Date:日期类型。
    6. Clob:大文本类型。常用于存储基于字符的大数据。最多可存储4GB的数据。
    7. Blob:二进制的数据。最多可存储4GB。音频,视频......

    d) 约束:一列可以有多个约束。主要是用来确保数据满足特定的规则。

    1. Not null(非空):该列数据值不能为空。
    2. Unique(唯一):数据不可以重复
    3. Primary key(主键):主键列中的数据不可重复,一个表中可以有0-1个主键约束。
    4. Foreign key(外键):用于定义两表之间的关联。
    5. Check(检查):用于强制数据必须满足一定的条件。

    User()user_id,username,password,status,role

    Book()book_id,bookname,price,publish,user_id

    主键,外键约束,密码不能为空,用户名不能重复,图书价格必须是10-100之间

    create table t_user(

           user_id integer primary key,--添加主键约束

           username varchar2(50) unique,--添加唯一约束

           password varchar2(50) not null,--添加非空约束

           status integer,

           role number(3)

    );

    create table book(

           book_id integer primary key,

           bookname varchar2(50),

           price number(3,2) check(price>=10 and price<=100),

           publish varchar2(50),

           user_id integer references t_user(user_id)

    );

    --商品表:商品号,商品名称,单价,商品类别,供应商

    --客户表:客户号,姓名,住址,邮箱,性别

    --销售表:客户号,商品号,购买数量

     create table products(

            pro_id integer primary key,

            pro_name varchar2(50),

            pro_price number(5,3) check(pro_price>0),

            pro_ca varchar2(50),

            pro_privader varchar2(50)

     ) ;   

     create table customers(

            cus_id integer primary key,

            cus_name varchar2(30) not null,

            cus_address varchar2(50),

            cus_mail varchar2(50) unique,

            cus_sex varchar2(10) check(cus_sex in('',''))

     );

     create table sells(

            cus_id integer references customers(cus_id),

            pro_id integer references products(pro_id),

            p_count integer check(p_count between 1 and 50)

     );

        

    e) 删除表(drop

    1. 语法结构:
      1. Drop table 表名;

    a) 注意:如果删除的表中有主键被另外的表的外键所引用,则该表示不可以直接被删除的。如果强行删除应该先删除辅表,在删除当前的主表。

    2.级联删除:drop table 表名 cascade constraints;

    f) 修改表(alter):

    1. 语法格式
      1. 修改列的类型:alter table 表名 modify 列名 类型; 注意:只有空列才可以修改其数据类型。
      2. 修改列的名字:alter table 表名 rename column 原列名 to 新列名;
      3. 追加列(添加列):alter table 表名 add 列名 数据类型;
      4. 删除列:alter table 表名 drop  column 列名;

     --customers表中的cus_address的类型修改成 char

     alter table customers modify cus_address char;

     --customers表中的cus_address列的名字修改成cus_addr

     alter table customers rename column cus_address to cus_addr;

     --customers表中追加一列(phonenum

     alter table customers add phonenum varchar2(11);

     --删除customers中的phonenum

     alter table customers drop column phonenum;

    三.DML(数据库修改语言:insert  delete  update

    a) 增加一行数据insert

    1. 语法格式1insert into 表名(列1,列2......values(值1,值2......);
    2. 语法格式2insert into 表名 values(值1,值2......);

    --添加一个注册用户

    insert into t_user(user_id,username,password,status,role)

    values(1,'bobo','boboadmin',0,1);

    insert into t_user values(2,'bobo1','boboadmin',0,1);

    b) 删除一行数据delete

    1. 语法格式:delete from 表名 where  XXX;  XXX表示的删除条件

    --删除t_user表中用户名为bobo的用户信息

    delete from t_user where username='bobo';

    --删除t_user表中role值为1的用户信息

    delete from t_user where role=1;

    C)修改数据update

    I.语法格式:update 表名 set 列名=数据值 where XXXXXX表示修改条件

      --t_user表中usernamebobostatus的值修改成1

      update t_user set status=1 where username='bobo';

      --t_user表中所有用户的role值修改为2

      update t_user set role=2 where username like 'b%';

    四.TCL(事物控制语言)

    需求:客户端A通过insert sql语句向数据库中插入一条数据。客户端B去查看A插入的数据。

    问题:客户端B查看不到A插入的数据

    原因:A插入数据后没有提交事物。

    事物:相当于一个业务功能。比如注册功能。一个事物中可以有多条sql语句,比如转账事物中就需要有至少两条的sql语句。

    Commit提交事物:

    显示提交:commit;

    隐式提交:创建或者是删除表、正常退出客户端

    Rollback撤销事物:

    显示撤销:rollback;

    隐式撤销:非正常退出客户端(断电,死机......

    事物的边界:

    1.事物的开始:上一个事物的提交或者是撤销(回滚)。

    2.事物的结束:当前事物的提交或者当前事物的撤销,表示当前事物的结束。

    事物的特性(ACID)(了解):

    1.原子性A:事物中的sql语句一起执行成功或失败

    2.一致性C:实务操作前和事物操作后数据保持一致。

    3.隔离性I:多个事物之间是相互独立的,互不干扰。

    4.持久性D:提交的事物会被持久性的存储到数据库磁盘中。

    五.序列(sequence)主要应用于实现主键值自动增长。

    a) 创建序列:create sequence 序列名 start with 数值1 increment by 数值2

    数值1:表示该序列值的初始值。

    数值2:序列值每次递增的值。

    创建一个序列seq_index,让该序列值从1开始每次递增1

    create sequence seq_index start with 1 increment by 1;

    实现主键自动增长:序列名.nextval表示的是序列增长一次后的结果值。

    insert into test_seq values(seq_index.nextval,'hello world');

    注意:序列名.nextval第一次被执行时返回的是序列初始值。

    六.试图

    a) 创建一个试图:create view 试图名 as (select语句);

    b) 试图的作用:把一个查询的sql语句返回的结果当做一张表,给该表(查询的sql语句)起一个名字。以后就可以通过该名字来表示查询的sql语句。

    c) 查询的多种情况:

    1. Select * from 表名;
    2. Select * from (select查询语句)
    3. Select * from 试图;

    七.索引(index):提高查询效率

    a) 索引就相当于是一本字典的目录。

    b) 创建索引:create index 索引名 on 表名(列名);

    --t_user表中的password列添加索引:提升查询password列的效率

    create index pwd_index on t_user(password);

    --基于索引的查询:效率高

    select password from t_user;

    c) 删除索引:drop  index 索引名;

    d) 注意:Oracle数据库会自动为表的主键列添加一个索引。索引占用数据库的内存空间。

  • 相关阅读:
    java内置数据类型
    docker安装及配置
    redis持久化
    golang linux安装
    TCP/IP协议
    php高并发,大流量
    C语言阐述进程和线程的区别
    python 消息队列-rabbitMQ 和 redis介绍使用
    python 新手题目-文件读写-关键字判断
    python IO模式(多路复用和异步IO深入理解)
  • 原文地址:https://www.cnblogs.com/hdj1073678089/p/7460505.html
Copyright © 2011-2022 走看看