安装
DM8 windowsX64版下载地址:
https://eco.dameng.com/download/
创建数据库实例
- 指定数据库名、实例名及端口号
-
设置初始化参数
字符集设置为UTF-8
,去掉字符串大小写敏感 -
设置密码
创建成功后,系统服务里面将新增加一个服务,如果需要删除该数据库时,需要先停止该服务:
管理数据库
新建模式
运行DM管理工具
,连接localhot这个数据库,选中模式,右键,新建模式:
新建一个名为test
的模式。
新建表
打开刚创建的test
模式,选中表,右键,点击新建表:
新建一个名为users
的表,注意设置id字段为主键,并可自增长。
选择新建的users
表,右键,选择浏览数据
:
在右侧的数据窗口,可以任意录入几条测试数据,方便后面测试使用。
查询表数据
新建查询,输入sql语句,点击执行即可查看表数据:
select * from test.users
配置PHP(PDO接口)
由于目前最新版的达梦最高只支持到PHP 7.2版本,这里以7.2为例
(注:最新的版本已支持php7.4)
在达梦的安装包目录下找到pdo72_dm.dll
(注意查看phpinfo
,如果Thread Safet
为enabled
,则选择该文件,否则选择pdo72nts_dm.dll
)
将该文件拷贝至php的扩展目录下(扩展目录通过查看phpinfo
里面的extension_dir
值)
然后在php.ini
的末尾添加一行:
extension=pdo72_dm.dll
打开cmd
命令行,输入php -m
,如果提示PHP Fatal error: Unable to start DM module in Unknown on line 0
错误:
尝试将数据库安装目录bin下的以下dll文件拷贝至C:\Windows\SysWOW64
和C:\Windows\System32
,重新启动Apache。
dmdpi.dll
dmcalc.dll
dmelog.dll
dmmem.dll
dmos.dll
dmcomm.dll
dmcpr.dll
dmcyt.dll
dmstrt.dll
dmclientlex.dll
dmdta.dll
dmcfg.dll
dmdcr.dll
dmmout.dll
dmcvt.dll
dmmsg.dll
如果还不行就尝试把bin所有的dll文件拷贝过去。
连接数据库
date_default_timezone_set("Asia/Shanghai");
header("Content-type:text/html; Charset=utf-8");
$dm_conf = array(
'host'=> '127.0.0.1:5236', //连接地址及端口
'db'=> 'DBNAME', //数据库名
'db_user' => 'SYSDBA', //用户名
'db_pwd'=> '123456789', //密码
);
$pdo = new PDO("dm:host=".$dm_conf['host'].";dbname=".$dm_conf['db']."",$dm_conf['db_user'],$dm_conf['db_pwd']);
创建表
$sql = 'create table "test"."users"
(
"id" INTEGER identity(1, 1) not null ,
"user_name" VARCHAR(20),
"created_at" DATETIME(0),
"updated_at" TIMESTAMP(0) DEFAULT sysdate,
primary key("id")
)';
$result = $pdo->exec($sql);
说明:
在表中创建一个自增列。
语法格式:
IDENTITY [ (种子, 增量) ]
插入数据
$sql = "insert into test.users (user_name,created_at,updated_at) values ('张三','2020-07-17 10:06:00','".date('Y-m-d H:i:s')."')";
$result = $pdo->exec($sql);
查询数据
$sql = "select * from test.users;";
$stmt = $pdo->prepare($sql);
if($stmt===false){
var_dump($pdo->errorInfo());die;
}
$rs = $stmt->execute();
if ($rs) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$row = array_change_key_case($row,CASE_LOWER); //将数组的key转为小写
var_dump($row);
}
}
更新数据
$sql = "update test.users set user_name = '李四' where id = 1";
$result = $pdo->exec($sql);
删除数据
$sql = "delete from test.users where id = 1";
$result = $pdo->exec($sql);
配置PHP(面向对象接口)
以7.2为例
在达梦的安装包目录下找到php72_dm.dll
(注意查看phpinfo
,如果Thread Safet
为enabled
,则选择该文件,否则选择php72nts_dm.dll
)
将该文件拷贝至php的扩展模板下(扩展目录通过查看phpinfo
里面的extension_dir
值)
然后在php.ini
的末尾添加一行:
extension=php72_dm.dll
重启服务器,然后查看phpinfo
如出现以上内容,则说明配置成功。
连接数据库
$link = dm_connect("localhost", "SYSDBA", "SYSDBA");
if(!$link){
echo dm_error().':'.dm_errormsg();exit();
}
dm_setoption($link,1,12345,1); //设置 dm 连接和语句的相关属性,设置UTF8
创建表
$sql = 'create table "test"."users1"
(
"id" INTEGER identity(1, 1) not null,
"user_name" VARCHAR(20),
"created_at" DATETIME(0),
"updated_at" TIMESTAMP(0) DEFAULT sysdate,
primary key("id")
)';
$result = dm_exec($link,$sql);
插入数据
$sql = "insert into test.users1 (user_name,created_at,updated_at) values ('张三','2020-07-17 10:06:00','".date('Y-m-d H:i:s')."')";
$result = dm_exec($link,$sql);
查询数据
$sql = "select * from test.users limit 10";
$result = dm_exec($link,$sql);
print " 查询结果:</br><pre>";
while ($line = dm_fetch_array($result)){
print_r($line);
echo '<br>';
}
更新数据
$sql = "update test.users set user_name = '李四' where id = 1";
$result = dm_exec($link,$sql);
删除数据
$sql = "delete from test.users where id = 1";
$result = dm_exec($link,$sql);
设置默认模式
通常情况下,在sql语句中的表名前需要指定模式名。例如上面例子中的test.users
,其中test
就是模式名,users
是表名。
可以通过SET SCHEMA
设置当前模式。设置后,执行sql语句时,就可以省略模式名。
语法格式:
SET SCHEMA <模式名>;
其他
- 查看数据库库名
select name,create_time from v$database;
- 查看数据库实例名及状态
select name,instance_name,start_time,status$ from v$instance;
- 查看数据库里所有使用用户
select username,user_id,default_tablespace,profile from dba_users;
- 查看所有角色
select role from dba_roles;
- 查看当前时间
SELECT CURRENT_TIMESTAMP();
- 查看数据库版本
SELECT * FROM V$VERSION;
- PDO下中文乱码
打开C:\windows\System32\dm_svc.conf
文件,新增一行:
CHAR_CODE=(PG_UTF8)
保存后重启apache
- 获得系统建库时指定字符集
SELECT SF_GET_UNICODE_FLAG ();
0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR
- 查看是否开启归档模式
select name,arch_mode from v$database;
- 查看库中所有表
SELECT * FROM ALL_TABLES;
- 当前用户拥有的所有的表
select table_name from user_tables
- 查看数据表定义
SELECT TABLEDEF('SYSDBA','MY_TABLE'); --入参:模式名,表名
- 查看字段注释
select * from user_col_comments where Table_Name='xxx'
- 获取最后插入的自增ID
SELECT @@IDENTITY as insert_id
-
group by时,查询的字段必须出现group by 后面
MySQL可以通过any_value
来添加没有出现在group by
后面的字段,但是达梦不支持,可以把any_value
改成min
-
插入单引号
单引号是特殊字符,达梦使用单引号作为转义字符,就像反斜杠。也就是说要插入单引号,那么需要两个单引号。