sqlplus
sqlplus sqlplus / as sysdba
修改用户密码永不过期
sqlplus / as sysdba select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME'; alter profile default limit password_life_time unlimited; select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME'; alter user case identified by rootroot;
方式一
SQL> desc student;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
SID NOT NULL NUMBER
SNAME VARCHAR2(30)
SAGE NUMBER
方式二
select column_name,data_type,DATA_LENGTH
From all_tab_columns
where table_name=upper('student')
CREATE TABLE students (student_id VARCHAR2(10) NOT NULL ENABLE, student_name VARCHAR2(30) NOT NULL, college_major VARCHAR2(15) NOT NULL, status CHAR(1), sumbit_data DATE, score NUMBER NOT NULL ENABLE, CONSTRAINT "pk_student_id" PRIMARY KEY (student_id), CONSTRAINT uk_students_name UNIQUE (student_name, status) );
insert into students(student_id,student_name,college_major,status,sumbit_data,score)
values('100001','耀然天成','海洋学','1',to_date('2023-02-06 14:15:00','yyyy-mm-dd hh24:mi:ss'),88.5);
insert into students(student_id,student_name,college_major,status,sumbit_data,score)
values
('100002','柯尔莫哥洛夫','数学,大气力学','1',to_date('2023-02-01 09:15:00','yyyy-mm-dd hh24:mi:ss'),100.0);
多行插入
insert all
into students(student_id,student_name,college_major,status,sumbit_data,score)
values('100003','牛顿','物理学','1',to_date('2023-02-06 14:15:00','yyyy-mm-dd hh24:mi:ss'),100.0)
into students(student_id,student_name,college_major,status,sumbit_data,score)
values('100004','高斯','数学,天文学','1',to_date('2023-02-03 11:15:00','yyyy-mm-dd hh24:mi:ss'),100.0)
select * from dual;
SQL> select student_name,to_char(sumbit_data,'yyyy-mm-dd hh24:mi:ss') sd
from students
where sumbit_data>=to_date('2023-02-01 00:15:00','yyyy-mm-dd hh24:mi:ss');
STUDENT_NAME SD
------------------------------ -------------------
耀然天成 2023-02-06 14:15:00
柯尔莫哥洛夫 2023-02-01 09:15:00
牛顿 2023-02-06 14:15:00
高斯 2023-02-03 11:15:00
--查看索引
set linesize 210
col index_name for a27
col index_type for a12
col column_name for a27
col table_name for a21
select ic.INDEX_OWNER,
ic.INDEX_NAME,
di.index_type,
di.uniqueness,
di.status,
ic.TABLE_NAME,
ic.COLUMN_NAME
from dba_ind_columns ic, dba_indexes di
where ic.INDEX_OWNER = di.owner
and ic.INDEX_NAME = di.index_name
and ic.table_owner='CASE' and ic.table_name='STUDENTS';
INDEX_OWNER INDEX_NAME INDEX_TYPE UNIQUENES STATUS TABLE_NAME COLUMN_NAME
------------------------------ --------------------------- ------------ --------- -------- --------------------- ---------------------------
CASE pk_student_id NORMAL UNIQUE VALID STUDENTS STUDENT_ID
CASE UK_STUDENTS_NAME NORMAL UNIQUE VALID STUDENTS STUDENT_NAME
CASE UK_STUDENTS_NAME NORMAL UNIQUE VALID STUDENTS STATUS
普通用户查询
select ic.INDEX_NAME,
di.index_type,
di.uniqueness,
di.status,
ic.TABLE_NAME,
ic.COLUMN_NAME
from user_ind_columns ic, user_indexes di
where ic.TABLE_NAME = di.TABLE_NAME
and ic.INDEX_NAME = di.index_name
and ic.table_name=upper('STUDENTS');
INDEX_NAME INDEX_TYPE UNIQUENES STATUS TABLE_NAME COLUMN_NAME
--------------------------- ------------ --------- -------- --------------------- ---------------------------
pk_student_id NORMAL UNIQUE VALID STUDENTS STUDENT_ID
UK_STUDENTS_NAME NORMAL UNIQUE VALID STUDENTS STUDENT_NAME
UK_STUDENTS_NAME NORMAL UNIQUE VALID STUDENTS STATUS
-- online允许创建索引的过程同时进行DML操作 create index IDX_CARD on table_name(t_card_num) online; create index IDX_TIME on table_name(t_time);
时间转换
那些一执行就报错忽略,比如oracle中varchar2,mysql中是varchar一执行就报错,
时间同步
下面是执行不报错,但结果不正确的:
oracle中的DATE时间字段,在mysql中也有这个字段,所以使用照搬该字段不报错,
但mysql中的date只有年月日,没有时分秒,数据虽然同步过来的,
但却是错的,等发现时可能已经同步很多数据了
varchar同步
oracle varchar2(18) 向 mysql varchar(15)同步
不报错,会自动截取oracle字符串的前15位,这一点很致命
这并不是意味着开发者没有仔细看文档
- 有时数据库更新了,但没有去更新文档,文档旧了,但数据库因为数据量大把当初的15扩展为18了
- 就算你现在写成18,并不意味着未来不会有人把它更新为20
- 所以,像这种情况,如果两边都在运行,并且是以oracle为主的话,mysql的varchar可以建到28
- 直接增加10个扩展空间
虚拟列rownum
SQL> select rownum,student_id from students where rownum < 3;
ROWNUM STUDENT_ID
---------- ----------
1 100001
2 100002
Oracle用户密码过期,修改永不过期