我有一个表foo,其中包含以下列
create table foo (
id integer not null auto_increment unique,
name varchar(255),
desc varchar(255),
modified_time datetime not null,
type tinyint(1)
)
Run Code Online (Sandbox Code Playgroud)
是否有遵循所有列的排序约定的最佳实践(例如,按字母方式或顶部不为空,底部为其余列)
我希望能够使用我在这里找到的代码在我的C#WinForm应用程序中创建一个数据库.
但我需要找到一种方法来获取该特定SQL Server实例的默认数据目录.我想知道是否有一种简单的方法来实现这一点,可以在各种版本的SQL Server上使用.
提前致谢.
我发现以下Select将返回远程服务器上的默认数据目录:
SELECT
SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files
WHERE database_id = 1
AND file_id = 1
Run Code Online (Sandbox Code Playgroud)
此解决方案仅适用于SQL Server 2005+.
**
我有以下表格:
CREATE TABLE `OBL2`.`item` (
`itemID` INT NOT NULL AUTO_INCREMENT ,
`itemName` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`itemID`) ,
INDEX `itemName` (`itemName` ASC) );
CREATE TABLE `OBL2`.`subject` (
`subjectID` INT NOT NULL ,
`subjectName` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`subjectID`) );
Run Code Online (Sandbox Code Playgroud)
现在由于连接是多对多的,每个项目可以有很多主题,每个主题可以与许多项目相关 - 我想设置一个连接表.这是我的代码:
CREATE TABLE `OBL2`.`itemsubjects` (
`itemID` INT NOT NULL ,
`subjectID` INT NOT NULL ,
PRIMARY KEY (`itemID`, `subjectID`) ,
INDEX `itemID_idx` (`itemID` ASC) ,
INDEX `subjectID_idx` (`subjectID` ASC) ,
CONSTRAINT `itemID`
FOREIGN KEY (`itemID` …Run Code Online (Sandbox Code Playgroud) 我正在开发一个相对庞大的应用程序,其中包含相当多的表。我必须编写一个 SQL 查询,它在简化后涉及 5 个表(有关连接,请参见 jpg)。
想法如下:人有地址,地址有类型(私人、专业等)和国家。人也可以有选择。这些选项(此处在带有 name_id 的选项表中说明)可以链接到地址类型。
这个想法是提取所有拥有一个或多个地址的人,这些地址由一个国家指定,并且他们也出现在 [option address] 表中。
例如,假设我们想要地址为 country_id=1 的人。结果集必须排除与其选项链接的地址类型不同的人员。
嗯...我不确定我是否了解自己 :)
但无论如何,这是创建所有内容的 SQL。
CREATE TABLE `address` (
`person_id` int(11) NOT NULL,
`type_id` int(11) NOT NULL,
`country_id` int(11) NOT NULL,
UNIQUE KEY `apt` (`person_id`,`type_id`),
KEY `apid` (`person_id`),
KEY `atid` (`type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `address` (`person_id`, `type_id`, `country_id`) VALUES
(1, 1, 1),
(2, 2, 1),
(3, 1, 1),
(3, 2, 2),
(5, 1, 2),
(6, 2, 1),
(7, 1, 1),
(7, 2, …Run Code Online (Sandbox Code Playgroud) 我有2张桌子:
Empleados(**numEmpl**, nombre, apellido, sexo, telefono, salario, numDept)
Departamentos(**numDept**, nombreDept, numDirect)
Run Code Online (Sandbox Code Playgroud)
在出发中:
所以有一个循环引用.
首先我创建了表:
CREATE TABLE EMPLEADOS(numEmpl primary key, nombre,
apellido, sexo, telefono, salario, numDept)
CREATE TABLE DEPARTAMENTOS(numDept primary key, nombreDept, numDirect)
(i didn't write here each of type is each colum)
Run Code Online (Sandbox Code Playgroud)
现在我在它们之间创建引用:
ALTER TABLE DEPARTAMENTOS
ADD CONSTRAINT FK_DEPT_EMP FOREIGN KEY (numDirect)
REFERENCES EMPLEADOS(numEmpl)
ALTER TABLE EMPLEADOS
ADD CONSTRAINT FK_EMP_DEPT FOREIGN KEY (numDept)
REFERENCES DEPARTAMENTOS(numDept).
Run Code Online (Sandbox Code Playgroud)
它工作,所以现在我尝试插入一些数据:
INSERT INTO Empleados(numEmpl, nombre, apellidos, sexo, telefono, salario, numDept)
VALUES …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Oracle 的“按选择创建表”功能进行快速更新。我看到的问题是“空”字段没有被保留。
我定义了下表:
create table mytable(
accountname varchar2(40) not null,
username varchar2(40)
);
Run Code Online (Sandbox Code Playgroud)
当我执行原始 CTAS 时,帐户上的 NOT NULL 被保留:
create table ctamytable as select * from mytable;
describe ctamytable;
Name Null Type
----------- -------- ------------
ACCOUNTNAME NOT NULL VARCHAR2(40)
USERNAME VARCHAR2(40)
Run Code Online (Sandbox Code Playgroud)
但是,当我对帐户名进行替换时,不会保留 NOT NULL。
create table ctamytable as
select replace(accountname, 'foo', 'foo2') accountname,
username
from mytable;
describe ctamytable;
Name Null Type
----------- ---- -------------
ACCOUNTNAME VARCHAR2(160)
USERNAME VARCHAR2(40)
Run Code Online (Sandbox Code Playgroud)
请注意,该accountname字段不再有空值,并且该varchar2字段从 40 个字符变为 160 个字符。有没有人见过这个?
我想创建一个新表并使用特定格式设置日期类型。那可能吗?
例如:
CREATE TABLE User (
...
EXPIRATION DATE " YYYY/MM"
...
)
Run Code Online (Sandbox Code Playgroud) 我有这个例子,不能创建customers_b.错误代码1005 /错误号:121.但是,如果我首先创建customers_b而不是customers_a,那么customers_a就是那个不会被创建的.
怎么了?为什么我不能将多个FK链接到PK'id_state'?谢谢!
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
DROP SCHEMA IF EXISTS `testdb` ;
CREATE SCHEMA IF NOT EXISTS `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `testdb` ;
-- -----------------------------------------------------
-- Table `testdb`.`state`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `testdb`.`state` ;
CREATE TABLE IF NOT EXISTS `testdb`.`state` (
`id_state` INT NOT NULL,
`abbr` CHAR(2) NOT NULL,
PRIMARY KEY (`id_state`),
UNIQUE INDEX `id_state_UNIQUE` (`id_state` ASC))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `testdb`.`customers_a`
-- ----------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 在MySQL 5.6.23上创建的简单测试表:
CREATE TABLE `test` (
`tinyint` tinyint(1) NOT NULL DEFAULT 0,
`int` int(11) NOT NULL DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)
注意如何DEFAULT写入值:字面意思0.一旦它被创建,我做:
SHOW CREATE TABLE `test`;
Run Code Online (Sandbox Code Playgroud)
得到:
CREATE TABLE `test` (
`tinyint` tinyint(1) NOT NULL DEFAULT '0',
`int` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
这些DEFAULT价值获得了报价:'0'!
为什么会这样?更重要的是,我应该一直用引号括起数字默认值吗?
我正在按照CREATE TABLE 中的示例进行操作:
CREATE TABLE distributors (
did integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
name varchar(40) NOT NULL CHECK (name <> '')
);
Run Code Online (Sandbox Code Playgroud)
但是,它给了我ERROR: syntax error at or near "GENERATED"。为什么会这样,我该如何解决?
\! psql -V返回psql (PostgreSQL) 10.5 (Ubuntu 10.5-1.pgdg14.04+1)SELECT version();在 x86_64-pc-linux-gnu (Ubuntu 9.4.19-1.pgdg14.04+1) 上返回PostgreSQL 9.4.19,由 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 编译,64 位编辑:
感谢 @muistooshort,我检查了 9.4 文档。所以我执行:
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) …Run Code Online (Sandbox Code Playgroud) create-table ×10
sql ×5
mysql ×4
postgresql ×2
c# ×1
date ×1
date-format ×1
join ×1
oracle ×1
sql-insert ×1
sql-server ×1