数据库应用:Linux 部署 GaussDB

目录

 一、实验

1.环境

2.Linux 部署 GaussDB

3.Linux 使用 GaussDB 

4.使用 GaussDB 进行表与索引操作

5.使用 GaussDB 进行视图操作

6.使用 GaussDB 进行联表查询

7.使用 GaussDB 进行外键关联

二、问题

1.运行python脚本报错

2. 安装GaussDB 报错

3. install 安装有哪些参数

4. GaussDB有哪些服务状态

5. netstat 服务状态

6.查询表字段报错

7.添加外键报错


 一、实验

1.环境

(1)主机

表1  主机

主机软件版本IP备注
gaussdbGaussDB100192.168.204.80

(2)安全机制

查看

[root@localhost ~]# sestatus

关闭

[root@localhost ~]# vim /etc/selinux/config
……
SELINUX=disabled
……

再次查看(需要reboot重启)

[root@localhost ~]# sestatus

(3)防火墙

关闭

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl mask firewalld

(4)修改主机名

[root@localhost opt]# hostnamectl set-hostname gaussdb
[root@localhost opt]# bash

(5)查看IP地址

[root@gaussdb ~]# ip addr

(6)清空iptables规则

[root@gaussdb ~]# iptables -F
[root@gaussdb ~]# iptables -nL

2.Linux 部署 GaussDB

(1)查阅

1)官方文档下载
https://support.huaweicloud.com/download_gaussdb/index.html

2)社区
https://opengauss.org/zh/

(2) 更改内核参数

[root@gaussdb ~]# vim /etc/sysctl.conf

修改前:

修改后:

#内核参数用于控制整个 Linux 系统中信号集的最大数量
kernel.sem = 50100 128256000 50100 2560   
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 1000 
#这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求 
net.ipv4.tcp_max_syn_backlog = 2048 
#控制 Linux 内核将核心转储文件写到磁盘的哪里  
kernel.core_pattern = /corefile/core.%p.%e
#控制core文件的文件名中是否添加pid作为扩展名。文件内容为1,表示添加pid作为扩展名,为0则表示不添加    
kernel.core_uses_pid = 1 
#系统范围内共享内存段的最大数量 (Minimum size of shared memory segment (bytes))   
kernel.shmmni = 4096 
#允许系统打开的端口范围  
net.ipv4.ip_local_port_range = 9000 65500
#这个参数表示内核套接字接受缓存区默认的大小,默认值比较小,网络服务器需要调高 
net.core.rmem_default = 262144
# 这个参数表示内核套接字发送缓存区默认的大小,默认值比较小,网络服务器需要调高     
net.core.wmem_default = 262144
# 这个参数表示内核套接字接受缓存区的最大大小,网络服务器需要调高    
net.core.rmem_max =  4194304 
#这个参数表示内核套接字发送缓存区的最大大小,网络服务器需要调高    
net.core.wmem_max = 1048576
#所允许的并发请求的最大个数。最大个数通常是 64KB(用来对异步 I/O 的性能进行优化)    
fs.aio-max-nr = 1048576
#这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置。     
fs.file-max = 6815744    

刷新内核参数

[root@gaussdb ~]# sysctl -p

(3)创建组与用户

[root@gaussdb ~]# groupadd -g 1000 dbgrp
[root@gaussdb ~]# useradd -u 1100 -g dbgrp -d /home/omm -s /bin/bash omm
[root@gaussdb ~]# id omm
uid=1100(omm) gid=1000(dbgrp) 组=1000(dbgrp)

(4)更改用户密码

[root@gaussdb ~]# echo 123456 | passwd --stdin omm

(5)创建目录

[root@gaussdb ~]# mkdir -p /usr/local/gaussdb/{app,data,logs}

(6)更改属组

[root@gaussdb ~]# chown -R omm.dbgrp /usr/local/gaussdb/

(7)查看目录

[root@gaussdb ~]# tree /usr/local/gaussdb/

(8)解压安装包

[root@gaussdb ~]# tar xf GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz

查看

[root@gaussdb ~]# cd GaussDB_100_1.0.1-DATABASE-REDHAT-64bit/
[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# ls

(9)修改脚本

[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# vim +572 install.py

修改前:

修改后:(572-573注释 或 -1改为 -2)

 572         if self.run_pkg_name.find(distname.upper().replace("OS", "")) == -2:
 573             logExit("Run package %s.tar.gz is inconsistent with os system %s." % (self.run_pkg_name, distna     me))

(10)安装脚本

python install.py \
-U omm:dbgrp \
-R /usr/local/gaussdb/app/ \
-D /usr/local/gaussdb/data/ \
-C LSNR_ADDR=127.0.0.1,192.168.204.80 \
-C LSNR_PORT=1888 \
-C DATA_BUFFER_SIZE=500M \
-C SHARED_POOL_SIZE=150M \
-C TEMP_BUFFER_SIZE=150M

成功:

Checking runner.
Checking parameters.
End check parameters.
Checking user.
End check user.
Checking old install.
End check old install.
Checking kernel parameters.
Checking directory.
Checking integrality of run file...
Decompressing run file.
Setting user env.
Checking data dir and config file
Initialize db instance.
Creating database.
Creating database succeed.
Changing file permission due to security audit.
Install successfully, for more detail information see /home/omm/zengineinstall.log.

(11)监听网络

多了zengine 服务

[root@gaussdb ~]# netstat -antpu

(12)切换用户


[root@gaussdb ~]# su - omm

[omm@gaussdb ~]$ vim .bashrc

(13)查看目录

[omm@gaussdb ~]$ ls /usr/local/gaussdb/
app  data  logs
[omm@gaussdb ~]$ ls /usr/local/gaussdb/app/
add-ons  admin  bin  lib  package.xml
[omm@gaussdb ~]$ ls /usr/local/gaussdb/data/
archive_log  cfg  data  dbs  log  protect  trc  zengine.lck

(14)登录数据库

输入y 


[omm@gaussdb ~]$ zsql sys/Changeme_123@127.0.0.1:1888

Warning: SSL connection to server without CA certificate is insecure. Continue anyway? (y/n):y
connected.


SQL> exit

免密登录

[omm@gaussdb ~]$ zsql sys/Changeme_123@127.0.0.1:1888 -q

connected.


SQL> exit

(15)修改密码

SQL> ALTER USER SYS IDENTIFIED BY 'Admin@123';

(16)查看数据库

SQL> SELECT DBID,NAME,STATUS,OPEN_STATUS FROM dv_database;

查看版本

SQL> SELECT * FROM dv_version;

3.Linux 使用 GaussDB 

(1)查看命令脚本

[omm@gaussdb ~]$ ls /usr/local/gaussdb/app/bin/
Common.py  GaussLog.py  shutdowndb.sh  sql_process.py  uninstall.py  zctl.py  zencrypt  zengine  zsql

(2)安装依赖包 (root用户)

[root@gaussdb ~]# yum -y install lsof

(3)查看状态

[root@gaussdb ~]# su - omm

[omm@gaussdb ~]$ zctl.py -t status

(4)关闭服务

[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t status
Zengine instance has not started.
[root@gaussdb ~]# cd /usr/local/gaussdb/app/admin/scripts
[root@gaussdb scripts]# vim create_database.sample.sql

(5)启动服务

[omm@gaussdb ~]$ zctl.py -t start
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS OPEN

(6)切换状态

NOMOUNT状态

[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start -m nomount
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Do zctl failed: Failed to get status, maybe it's NOMOUNT.

MOUNT状态

[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start -m mount
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS MOUNT

(7)切回默认状态

[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS OPEN

观察网络变化 (在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。)

观察网络变化 (30秒-1分钟)

(8)查看库文件 (root用户)

[root@gaussdb ~]# ls /usr/local/gaussdb/app/admin/scripts
add_standby_log.sample.sql  initdb.sql     initview.sql  readme.md    upgrade
create_database.sample.sql  initplsql.sql  initwsr.sql   sql_dialect

创建数据库

(9)连接数据库


[omm@gaussdb ~]$ zsql sys/Admin@123@127.0.0.1:1888 -q

connected.


SQL>

(10)创建与删除用户

SQL> CREATE USER david IDENTIFIED BY 'Admin@123';

Succeed.

SQL> GRANT DBA TO DAVID;

Succeed.

SQL> DROP USER DAVID;

Succeed.

(11)查看用户信息

SQL> SELECT * FROM DB_USERS;

USER_ID      USERNAME                                                         CREATED                CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0            SYS                                                              2024-03-18 12:31:29    +0000179 23:04:23.655845
1            PUBLIC                                                           2024-03-18 12:31:29    +0000179 22:38:29.319123

2 rows fetched.

再次创建查看

SQL> CREATE USER david IDENTIFIED BY 'Admin@123';

Succeed.

SQL> SELECT * FROM DB_USERS;

USER_ID      USERNAME                                                         CREATED                CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0            SYS                                                              2024-03-18 12:31:29    +0000179 23:02:48.336284
1            PUBLIC                                                           2024-03-18 12:31:29    +0000179 22:36:53.999562
2            DAVID                                                            2024-03-18 13:54:15    +0000179 23:59:39.974081

3 rows fetched.

查看所有用户

SQL> SELECT * FROM all_users;

USER_ID      USERNAME                                                         CREATED                CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0            SYS                                                              2024-03-18 12:31:29    +0000179 22:55:39.756470
1            PUBLIC                                                           2024-03-18 12:31:29    +0000179 22:29:45.419748
2            DAVID                                                            2024-03-18 13:54:15    +0000179 23:52:31.394267

3 rows fetched.

(12)查看表

SQL> SELECT * FROM user_tables;

最后一行显示86个

查看系统所有表 (一共86行)

SQL> SELECT * FROM all_tables;

查看管理员表(一共86行)

SQL> SELECT * FROM dba_tables;

(13)创建表

SQL> CREATE TABLE DEVOPS(
  2 id INT,
  3 name CHAR(20)
  4 );

Succeed.

查看表

SQL> SELECT * FROM USER_TABLES WHERE TABLE_NAME='DEVOPS';

查看表字段

SQL> DESC DEVOPS;

Name                                Null?    Type
----------------------------------- -------- ------------------------------------
ID                                           BINARY_INTEGER
NAME                                         CHAR(20 BYTE)

(14)修改表

添加字段

SQL> ALTER TABLE DEVOPS ADD age INT;

查看表字段

SQL> DESC DEVOPS;

修改字段类型

SQL> ALTER TABLE DEVOPS MODIFY AGE TINYINT;

(15)修改字段名

SQL> ALTER TABLE DEVOPS RENAME COLUMN NAME TO USER_NAME;

查看

(16)删除字段

SQL> ALTER TABLE DEVOPS DROP AGE;

查看

(17)修改表名

SQL> ALTER TABLE DEVOPS RENAME TO CICD;

查看

(18)删除表

SQL> DROP TABLE CICD;

4.使用 GaussDB 进行表与索引操作

(1) 创建表

SQL> CREATE TABLE USERS(
  2 ID INT NOT NULL DEFAULT 0,
  3 NAME CHAR(200) NOT NULL DEFAULT ''
  4 );

(2)查看表字段

SQL> DESC USERS;

Name                                Null?    Type
----------------------------------- -------- ------------------------------------
ID                                  NOT NULL BINARY_INTEGER
NAME                                NOT NULL CHAR(200 BYTE)

(3)字段插入记录

单个记录插入

SQL> INSERT INTO USERS VALUES (1,'JACK');

SQL> INSERT INTO USERS VALUES (2,'TOM');

多个记录连续插入

SQL> INSERT INTO USERS(ID,NAME) VALUES
  2 (3,'HELEN'),(4,'JOHN');

查看

SQL> SELECT * FROM users;

ID           NAME
------------ ----------------------------------------------------------------
1            JACK                                                                                                                                                     
2            TOM                                                                                                                                                      
3            HELEN                                                                                                                                                    
4            JOHN                                                                                                                                                     

4 rows fetched.

(4)修改数据

SQL> UPDATE USERS SET NAME='TONY' WHERE ID=2;

查看

(5)清空表

SQL> DELETE FROM USERS;

查看

(6)创建索引

SQL> CREATE INDEX name ON USERS(NAME);

查看

SQL> SELECT OWNER,INDEX_NAME,TABLE_NAME FROM all_indexes WHERE TABLE_NAME='USERS';

(7)查看索引

SQL> SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME='USERS';

(8)删除索引

SQL> DROP INDEX NAME;

5.使用 GaussDB 进行视图操作

(1)创建表

SQL> CREATE TABLE userinfo(
  2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3 NAME CHAR(200),
  4 TEL CHAR(11),
  5 CARD_ID CHAR(18)
  6 );

查看

(2)插入数据

SQL> INSERT INTO USERINFO(NAME,TEL,CARD_ID)
  2 VALUES
  3 ('jack','11111111111','0001'),
  4 ('tom','22222222222','0002'),
  5 ('helen','33333333333','0003');

查看

(3)测试

截取

SQL> SELECT SUBSTR('ABCDEFG',3,3);

替换

SQL> SELECT REPLACE('abcdefaaa','a','A');

(4)隐藏信息


SQL> SELECT
  2  NAME,
  3 REPLACE(CARD_ID,SUBSTR(CARD_ID,4,1),'*')
  4 FROM USERINFO;

(5)创建视图

SQL> CREATE VIEW EN_USERINFO
  2 AS
  3 SELECT
  4 NAME,
  5  REPLACE(CARD_ID,SUBSTR(CARD_ID,4,1),'*')
  6 FROM USERINFO;

(6)查看视图

SQL> SELECT * FROM EN_USERINFO;

(7)删除视图

SQL> drop VIEW EN_USERINFO;

6.使用 GaussDB 进行联表查询

(1)创建表

表一

SQL> CREATE TABLE DEPTS(
  2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3 NAME CHAR(200)
  4 );

表二

SQL> CREATE TABLE EMPS(
  2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3 NAME CHAR(200),
  4 DEPT_ID INT NOT NULL
  5 );

(2)查看

SQL> DESC DEPTS;DESC EMPS;

Name                                Null?    Type
----------------------------------- -------- ------------------------------------
ID                                  NOT NULL BINARY_INTEGER
NAME                                         CHAR(200 BYTE)


Name                                Null?    Type
----------------------------------- -------- ------------------------------------
ID                                  NOT NULL BINARY_INTEGER
NAME                                         CHAR(200 BYTE)
DEPT_ID                             NOT NULL BINARY_INTEGER

(3)插入数据

SQL> INSERT INTO DEPTS(NAME) VALUES ('DEV'),('NETWORK'),('IT');

额外创建一个不存在的4号部门员工

SQL> INSERT INTO EMPS(NAME,DEPT_ID) VALUES
  2  ('jasmine',1),('machael',2),('simon',3),('hulk',4);

(4)查看表

(5)内连接

SQL> SELECT * FROM EMPS
  2 INNER JOIN DEPTS
  3 ON EMPS.DEPT_ID=DEPTS.ID;

ID           NAME                                                             DEPT_ID      ID           NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1            jasmine                                                                                                                                                                                                  1            1            DEV                                                                                                                   
2            machael                                                                                                                                                                                                  2            2            NETWORK                                                                                                               
3            simon                                                                                                                                                                                                    3            3            IT  

SQL> SELECT EMPS.NAME,DEPTS.NAME FROM EMPS
  2 INNER JOIN DEPTS
  3 ON DEPTS.ID=EMPS.DEPT_ID;

NAME                                                             NAME
---------------------------------------------------------------- ----------------------------------------------------------------
jasmine                                                                                                                                                                                                  DEV                                                                                                                                                          
machael                                                                                                                                                                                                  NETWORK                                                                                                                                                      
simon                                                                                                                                                                                                    IT                                                                                                                                                           

3 rows fetched.

(6)外连接

左外连接

SQL> SELECT * FROM EMPS
  2 LEFT OUTER JOIN DEPTS
  3 ON EMPS.DEPT_ID=DEPTS.ID;

ID           NAME                                                             DEPT_ID      ID           NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1            jasmine                                                                                                                                                                                                  1            1            DEV                                                                                                                   
2            machael                                                                                                                                                                                                  2            2            NETWORK                                                                                                               
3            simon                                                                                                                                                                                                    3            3            IT                                                                                                                    
4            hulk                                                                                                                                                                                                     4

4 rows fetched.

右外连接

SQL> SELECT * FROM EMPS
  2 RIGHT OUTER JOIN DEPTS
  3 ON EMPS.DEPT_ID=DEPTS.ID;

ID           NAME                                                             DEPT_ID      ID           NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1            jasmine                                                                                                                                                                                                  1            1            DEV                                                                                                                   
2            machael                                                                                                                                                                                                  2            2            NETWORK                                                                                                               
3            simon                                                                                                                                                                                                    3            3            IT                                                                                                                    

3 rows fetched.

全外连接

SQL> SELECT * FROM EMPS
  2 FULL OUTER JOIN DEPTS
  3  ON EMPS.DEPT_ID=DEPTS.ID;

ID           NAME                                                             DEPT_ID      ID           NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1            jasmine                                                                                                                                                                                                  1            1            DEV                                                                                                                   
2            machael                                                                                                                                                                                                  2            2            NETWORK                                                                                                               
3            simon                                                                                                                                                                                                    3            3            IT                                                                                                                    
4            hulk                                                                                                                                                                                                     4

4 rows fetched.

7.使用 GaussDB 进行外键关联

(1)查看

SQL> DELETE FROM EMPS WHERE ID=4;

SQL> SELECT * FROM EMPS;

(2)添加外键

级联删除

SQL> ALTER TABLE EMPS ADD CONSTRAINT DID FOREIGN KEY(DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE;

(3)创建表时指定外键

SQL> CREATE TABLE EMPLOYESS(
  2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3 NAME CHAR(20),
  4 DEPT_ID INT NOT NULL,
  5 FOREIGN KEY (DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE);

二、问题

1.运行python脚本报错

(1)报错

在执行python install安装数据库时,安装中止

Error: Run package GaussDB_100_1.0.1-RUN-REDHAT-64bit.tar.gz is inconsistent with os system centos.
Please refer to install log "/home/omm/zengineinstall.log" for more detailed information.

(2)原因分析

在安装执行check时,发现操作系统与安装包内预置check的结果不一致。

(3)解决方法

[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# vim +572 install.py

修改前:

修改后:(572-573注释 或 -1改为 -2)

 572         if self.run_pkg_name.find(distname.upper().replace("OS", "")) == -2:
 573             logExit("Run package %s.tar.gz is inconsistent with os system %s." % (self.run_pkg_name, distna     me))

成功:

2. 安装GaussDB 报错

(1)报错

Error: Can not read user profile: [Errno 2] No such file or directory: '/home/omm/.bashrc'

(2)原因分析

缺少目录启动配置文件。

(3)解决方法

创建文件 

vim /home/omm/.bashrc
if [ -f /etc/bashrc ]; then
         . /etc/bashrc
fi

 

成功:

3. install 安装有哪些参数

(1)参数

1)指定安装用户和用户组
-U

2)指定安装目录
-R

3)指定数据文件目录,即GAUSSDATA目录
-D

4)指定配置参数,可以指定多个。如果不指定,则按照/opt/gaussdb/data/cfg/zengine.ini 中的默认配置项。
-C

5)在安装时,如果禁用免密登录,则需要在命令行最后指定此选项。命令执行过程中,会提示输入连接数据库的用户名和密码,用户名时SYS,密码是SYS用户的初始密码Changeme_123。如果开启免密登录则不许套指定本选项。
-P

4. GaussDB有哪些服务状态

(1)状态

1)关闭
CLOSED

2)读取初始化参数文件,分配SGA并打开后台进程
NOMOUNT

3)加载数据库,根据初始化参数文件,读取控制文件信息
MOUNT

4)根据控制文件打开所有的数据文件和Redo日志,数据库可以进行访问
OPEN

5. netstat 服务状态

(1)状态

1)netstat中的各种状态
CLOSED       初始(无连接)状态。
LISTEN       侦听状态,等待远程机器的连接请求。
SYN_SEND     在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
SYN_RECV     在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
ESTABLISHED  完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
FIN_WAIT_1   在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
FIN_WAIT_2   在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
TIME_WAIT    在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
CLOSING      在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。
CLOSE_WAIT   在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
LAST_ACK     在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。

2)分类
主动连接端可能的状态有:         
        CLOSED        SYN_SEND        ESTABLISHED。
主动关闭端可能的状态有:         
        FIN_WAIT_1        FIN_WAIT_2        TIME_WAIT。
被动连接端可能的状态有:         
        LISTEN        SYN_RECV        ESTABLISHED。
被动关闭端可能的状态有:         
        CLOSE_WAIT        LAST_ACK        CLOSED。

6.查询表字段报错

(1)报错

GS-00601, [1:1]Sql syntax error: key word expected

(2)原因分析

语法错误。

(3)解决方法

SQL> DESC DEVOPS;

7.添加外键报错

(1)报错

GS-00601, Sql syntax error: CASCADE/SET NULL expected but CASCADES found.

(2)原因分析

语法错误。

(3)解决方法

SQL> ALTER TABLE EMPS ADD CONSTRAINT DID FOREIGN KEY(DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468231.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

#include<初见C语言之指针(3)>

目录 一、字符指针变量 二、数组指针变量 1.什么是数组指针变量? 2.数组指针怎么初始化? 三、二组数组传参的本质 四、函数指针变量 1.什么是函数指针变量? 2.函数指针变量使用 3.有趣代码 3.1typedef关键字 五、函数指针数组 六、…

深度学习03价值学习

Q*类似于先知,知道动作的后果 价值学习是得到一个近似的价值函数

【C语言_数组_复习篇】

目录 一、数组的概念 二、数组的类型 三、一维数组 3.1 一维数组的创建 3.2 一维数组的初始化 3.3 一维数组的访问 3.4 一维数组在内存中的存储 四、二维数组 4.1 二维数组的创建 4.2 二维数组的初始化 4.3 二维数组的访问 4.4 二维数组在内存中的存储 五、字符串数组 5.1…

SAP前台处理:物料主数据创建<MM01>之采购视图

一、背景: 终于来到了物料主数据,我觉得物料账是SAP最重要的一项发明,也一直是SAP的一项重要优势,物料账记录了一个个物料的生生不息; 本章主要讲解物料主数据和财务相关的主要内容:这里特别提示由于作者…

“先干后看”式循环

题目:计算 ,直到最后一项小于 。 注意题目要求:计算到最后一项小于 。也就是这一项是要参与到计算中的,计算完这一项才能触发循环停止条件。 这种先运算后判断的情况很对do-while循环的胃口。 do就是做嘛,while就是…

扇区架次数动态展示

打开前端Vue项目:kongguan_web,完成前端src/components/echart/SectorFlightChart.vue页面设计,使用ECharts插件实现柱状图和饼状图 在src/components目录下创建echart目录,完成src/components/echart/SectorFlightChart.vue 的页…

【SM3哈希算法】算法原理

【SM3哈希算法】算法原理 参考: 文章目录 【SM3哈希算法】算法原理一、算法简介二、基本原理三、具体流程1、填充2、分组3、迭代压缩 C语言实现 一、算法简介 SM3算法是一种密码散列函数标准,由国家密码管理局发布。它的安全性和SHA-256相当&#xff0…

【leetcode热题】 阶乘后的零

给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释:3! 6 ,不含尾随 0示例 2: 输入:n 5 输出&a…

二叉树遍历(牛客网)

描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树…

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户:登录 个人信息 简历信息 查看招聘信息 企业:登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员:注册 登录 管理员…

const,static深度总结——c++穿透式分析

前言;c类和对象的知识点中除了几种默认函数, 比较重要的还有使用const和static修饰成员相关知识点。const在c中特性很简单。 但是在使用中, 比较容易疏忽大意出现问题。 static特性也很简单, 但是比起const来要直接的多。 在使用中…

2023 re:Invent 使用 PartyRock 和 Amazon Bedrock 安全高效构建 AI 应用程序

前言 “ Your Data , Your AI , Your Future .(你的数据,你的 AI ,你的未来。) 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界…

javaAPI操作Elasticsearch

mapping属性 mapping是对索引库中文档的约束, 常见的mapping属性包括: type: 字段数据类型,常见的简单类型有: 字符串: text(可分词的文本), keyword(精确值, 例如: 品牌,国家)数值: long, integer, short, byte, double, float布尔: boolean日期: date对象: object index: 是否…

LLMs之Grok-1:Grok-1的简介、安装、使用方法之详细攻略

LLMs之Grok-1:Grok-1的简介、安装、使用方法之详细攻略 导读:马斯克旗下的xAI公司宣布开源名为Grok-1的混合专家模型,参数量达3140亿,为目前最大的开源大语言模型。xAI此举或将引领人工智能开源趋势,同时也将对不太Ope…

协议分类笔记

1.3 协议分类 通信的协议还是比较复杂的,java.net 包中包含的类和接口,它们提供低层次的通信细节。我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节。 java.net 包中提供了两种常见的网络协议的支持&a…

DevExpress WinForms crack,DevExpress WinForms组件套件和库

DevExpress WinForms crack,DevExpress WinForms组件套件和库 Reporting & Analytics - Reports, Pivot Tables, PDF Viewer. The DevExpress WinForms Subscription includes royalty-free user interface components for next-gen decision support systems. Whether you…

Java基础经典10道题

目录 for循环的嵌套 题目一: 求101到200之间的素数的个数,并打印 代码分析: 注意点: 题目二:开发验证码 代码分析: 题目三:数组元素的复制 代码分析: 题目四:评委打分 健壮版代码: 代码分析:看源码 注意点: 题目五:数字加密 优化版代码: 代码分析: 题目六:数字…

MeterSphere和Jmeter使用总结

一、MeterSphere 介绍 MeterSphere 是⼀站式开源持续测试平台,涵盖测试跟踪、接⼝测试、UI 测试和性能测试等,全 ⾯兼容 JMeter、Selenium 等主流开源标准,能够有效助⼒开发和测试团队在线共享协作,实现端到 端的测试管理跟踪…

2、RabbitMQ_安装

RabbitMQ安装文档 RabbitMQ官网下载地址:https://www.rabbitmq.com/download.html 1.安装依赖 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc x…

Java语言: 多线程

1. 线程调度 1.1 线程状态 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。 线程状态:创建、就绪、运行、阻塞、死亡 1.2 线程状态切换 1.3 阻塞唤醒过程 阻塞: 这三个方法的调用都会使当前…