科普数据库(一)

简介: d格式:alter table 表名 modify 列名 列的类演示:alter table users modify mobile char(11)

d


格式:alter table 表名 modify 列名 列的类

演示:alter table users modify mobile char(11)


4、删除一


格式:alter table 表名 drop column 列

演示:alter table users drop column mobile


5、修改表


格式:rename 旧表名 to 新表

演示:rename users to myusers


6.6、表约


一、语


CREATE TABLE 表

列名 列的类型 primary key,--主键约

列名 列的类型 not null,--非空约

列名 列的类型 unique,--唯一约

列名 列的类型 check(列名 in (检查列表)),--检查约

constraint 约束名 foreign key(字段名) references 主表(被引用列)--外键约

)


二、演


--商品分

create table category
cid number primary key
 cname varchar2(20)
)


--商品详

create table product
pid number primary key,--主键约
pname varchar2(50) not null,--非空约
pimg varchar2(50) unique,--唯一约
pflag varchar2(10) check(pflag in ('上架','下架')),--检查约
cid number
constraint FK_CATEGORY_ID foreign key(cid) references category(cid)--外键约
)


三、修


1、主键

alter table product add constraint PK_PRODUCT_PID primary key(pid)
alter table product drop constraint PK_PRODUCT_PID
alter table product drop primary key


2、非空约

alter table product modify pname not null
alter table product modify pname null

3、唯一约

alter table product add constraint UK_PRODUCT_PIMG unique(pimg)
alter table product drop constraint UK_PRODUCT_PIMG
alter table product drop unique(pimg)


4、检查约

alter table product add constraint CK_PRODUCT_PFLAG check(pflag in ('上架','下架'))
alter table product drop constraint CK_PRODUCT_PFLAG


5、外键约

alter table product add constraint FK_PRODUCT_ID foreign key(cid) references category(cid)
alter table product drop constraint FK_PRODUCT_ID


第七章 DML语


7.1、插入语

格式:insert into 表名(列名1,列名2,...) values(值1,值2,...)

演示:insert into category(cid,cname) values(1,'电视')

注意:commit


7.2、修改语

格式:update 表名 set 列名1=值1,列名2=值2,... where 查询条件

演示:update category set cname='汽车' where cid = 1

注意:commit


7.3、删除语


格式:delete from 表名 where 查询条件

演示:delete from category where cid = 1

注意:commit


第八章 TCL语


8.1、事


一、含

一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不


二、特点(ACI

原子性:一个事务是不可再分割的整体,要么都执行要么都不

一致性:一个事务的执行不能破坏数据库数据的完整性和一致

隔离性:一个事务不受其它事务的干扰,多个事务是互相隔离

持久性:一个事务一旦提交了,则永久的持久化到本


三、分


1、开启

Oracle 11g中事务是隐式自动开始的,它不需要用户显示的执行开始事务语

2、编写一组逻辑sql

注意:sql语句支持的是insert、update、delet

【设置回滚

savepoint 回滚点名

3、结束

提交:commit

回滚:rollback

回滚到指定的地方: rollback to 回滚点名


8.2、事务并发(读问题)


一、事物的并发问题如何发生

多个事务同时操作同一个数据库的相同数

二、事务的并发问题都有哪

脏读:一个事务读到了另一个事务还未提交的update数据,导致多次查询的结果不一样(Oracle中不会产

不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一

幻读:一个事务读到了另一个事务已经提交的insert数据,导致多次查询的结果不一

三、事物的并发问题如何解决

通过设置隔离级别来解决并发


四、隔离


Oracle中只支持READ COMMITTED、SERIALIZABLE、READ ONLY、READ WRITE,这些语句是互斥的,不能同时设置两个或两个以上的选项,一般默认即


8.3、丢失更新(写问


一、定

在事务的隔离级别内容中,能够了解到两个不同的事务在并发的时候可能会发生数据的影响。细心的话可以发现事务隔离级别章节中,脏读、不可重复读、幻读三个问题都是由事务A对数据进行修改、增加,事务B总是在做读操作。如果两事务都在对数据进行修改则会导致另外的问题:丢失更


二、


悲观锁:认为两个事务更新操作一定会发生丢失

解决:通过在语句后边添加for update来实现行级上锁,所以又称为“行级锁”,例如:select * from t_account t wheret.id=‘1’ for update

乐观锁:认为事务不一定会产生丢失更新,让事务进行并发修改,不对事务进行锁

解决:由程序员自己解决,可以通过给数据表添加自增的version字段或时间戳timestamp,进行数据修改时,数据库会检测version字段或者时间戳是否与原来的一致,若不一致,抛出异常或者重新查


三、注


对于账户交易建议直接使用悲观锁,数据库的性能很高,并发度不是很高的场景两者性能没有太大差别。如果是交易减库存的操作可以考虑乐观锁,保证并发

第九章 高级


9.1、序


一、含


序列是Oracle数据库中特有的,使用序列可以生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5… 的

二、

create sequence 序列
start with 从几开
increment by 每次增长多
[maxvalue 最大值] | nomaxvalu
[minvalue 最小值] | nominvalu
cycle | nocycle --是否自动循
[cache 缓存数量] | nocache


三、演

1--创建

create sequence auto_increment_se
start with  
increment by  
nomaxvalu
minvalue  
nocycl
cache 10000
--调用
select auto_increment_seq.nextval from dual
select auto_increment_seq.currval from dual

9.2、PLSQL编

9.2.1、格

declar
  --声明变     
begi
  --业务逻
en

9.2.2、变

declar

 --声明变

 -- 格式一:变量名 变量类型

 -- 格式二:变量名 变量类型 := 初始值

 -- 格式三:变量名 变量类型 := &文本框名

 -- 格式四:变量名 表名.字段名%type

 -- 格式五:变量名 表名%rowtype

vnum number
  vage number := 28
  vabc number := &abc;--输入一个数值,从一个文本框输
  vsal emp.sal%type;  --引用型的变量,代表emp.sal的类
  vrow emp%rowtype;   --记录型的变量,代表emp一行的类型          
begi
  --业务逻
  dbms_output.put_line(vnum);                       --输出一个未赋值的变
  dbms_output.put_line(vage);                       --输出一个已赋值的变
  dbms_output.put_line(vabc);                       --输出一个文本框输入的变
  select sal into vsal from emp where empno = 7654; --将查询到的sal内容存入vsal并输
  dbms_output.put_line(vsal)
  select * into vrow from emp where empno = 7654;   --将查询到的一行内容存入vrow并输出  
  dbms_output.put_line(vrow.sal)
  dbms_output.put_line(123);                        --输出一个整
  dbms_output.put_line(123.456);                    --输出一个小数  
  dbms_output.put_line('Hello,World');              --输出一个字符
  dbms_output.put_line('Hello'||',World');          --输出一个拼接的字符串,||拼接符Oracle特
  dbms_output.put_line(concat('Hello',',World'));   --输出一个拼接的字符串,concat函数比较通
end

9.2.3、if判

一、语

if 条件1 th  
elsif 条件2 the     
else  
end if

二、演

decla
  age number := &age
begi
  if age < 18 the
    dbms_output.put_line('小屁孩')
  elsif age >= 18 and age <= 24 the
    dbms_output.put_line('年轻人')
  elsif age > 24 and age < 40 the
    dbms_output.put_line('老司机')
  els
    dbms_output.put_line('老年人')
  end if
end

9.2.4、while循


一、语


while 条件 lo

end loop


二、演


--输出1~
declar
  i number := 1
begi
  while i <= 10 loo
    dbms_output.put_line(i)
    i := i + 1
  end loop
end

9.2.5、for循


一、语

for 变量  in [reverse] 起始值..结束值 lo

end loop


二、演

--输出1~
declar
beg
  for i in reverse 1 .. 10 loo
    dbms_output.put_line(i)
  end loop
end

9.2.6、loop循


一、语


lo
  exit when 条
end loop


二、演


--输出1~
declar
  i number := 1
begi
  loo
    exit when i > 10
    dbms_output.put_line(i)
    i := i + 1
  end loop
end

9.2.7、意


一、含

意外是程序运行的过程发生的异常,相当于是Java中的


二、

decla
   --声明变
begi
   --业务逻
exceptio
   --处理异
   when 异常1 the
     ..
   when 异常2 the
     ..
   when others the
     ...处理其它异
end

三、分


系统

zero_divide :除数为零
value_error :类型转换异
no_data_found : 没有找到数
too_many_rows : 查询出多行记录,但是赋值给了%rowtype一行数据变
自定义异
decla
   --声明变
   异常名称 exception
begi
   --业务逻
   if 触发条件 the
      raise 异常名称; --抛出自定义的异
exceptio
   --处理异
   when 异常名称 the
     dbms_output.put_line('输出了自定义异常'); 
   when others the
     dbms_output.put_line('输出了其它的异常'); 
end


相关文章
|
Oracle 关系型数据库 Linux
科普数据库(三)
d 格式:alter table 表名 modify 列名 列的类 演示:alter table users modify mobile char(11)
258 0
|
存储 Java 数据库连接
科普数据库(二)
d 格式:alter table 表名 modify 列名 列的类 演示:alter table users modify mobile char(11)
199 0
|
算法 数据库 数据安全/隐私保护
md5加密科普,关于平时数据库密码的保存
md5加密科普,关于平时数据库密码的保存
md5加密科普,关于平时数据库密码的保存
|
11天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
11天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
41 3
|
11天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
53 2
|
24天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
173 15
|
18天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
25天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
29天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。