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数据库会自动为表的主键列添加一个索引。索引占用数据库的内存空间。

posted @ 2017-08-31 21:04  韩杜娟90  阅读(225)  评论(0编辑  收藏  举报