MySQL打破和组织语法

时间:2014-05-02 20:42:39

标签: mysql database database-design

我对MySQL编码很新,我向你保证,我的问题会让我看起来像个傻瓜。然而,尽管不断寻找好的示例代码,我仍然遇到不同的语法和组织习惯;我只是想知道一旦我创建了一个表并用数据填充就可以输入我的查询,或者代码中是否有一些中断,例如java或C之类的语言会使用大括号{}。我的问题是赋值要求我们不要使用外键,而是要设置一般模型;虽然功能不正确,但这是我的代码的一部分。

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';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Music`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Music` (
  `Title` VARCHAR(25) NOT NULL,
  `Artist` VARCHAR(30) NOT NULL,
  `Producer` VARCHAR(45) NOT NULL,
  `Genre` VARCHAR(20) NOT NULL,
  `Year` YEAR NOT NULL,
  `Price` DOUBLE NOT NULL,
  `CD Quantity` INT NOT NULL,
  `Cassette Quantity` INT NOT NULL,
  `Sheet Music Quantity` INT NOT NULL,
  `MID` INT NOT NULL,
  `VID` INT NOT NULL,
  PRIMARY KEY (`Title`, `Artist`, `Producer`, `Genre`, `Year`, `Price`, `CD Quantity`,     `Cassette Quantity`, `Sheet Music Quantity`, `MID`, `VID`))
  ENGINE = InnoDB
COMMENT = '         ';

听到我创建更多表格,然后插入此表格;

#Inserts for Music


$sql = INSERT INTO Music.
       (Title, Artist, Producer, Genre, Year, Price, CD Quantity, Cassette Quantity,   Sheet Music Quantity, MID, VID) .
       VALUES .
('Jazz Hits ', 'Dizzy gillespi', 'Jazz co.', 'Jazz', '1990','12.00','2', '5', '8',      '1', '1');

$sql = INSERT INTO Music.
       (Title, Artist, Producer, Genre, Year, Price, CD Quantity, Cassette Quantity, Sheet Music Quantity, MID, VID) .
       VALUES .
('Funky Fresh', 'Snoop', 'HOV', 'Hip Hop', '1997', '6.00', '5', '3', , '2', '2', '3');

$sql = INSERT INTO Music.
       (Title, Artist, Producer, Genre, Year, Price, CD Quantity, Cassette Quantity,  Sheet Music Quantity, MID, VID) .
       VALUES .
('Classic Jazz', 'Cole Train', 'Jazz inc.', 'Jazz', '1992', '8.00', '5', '3 ',  '4', '3', '1');

$sql = INSERT INTO Music.
       (Title, Artist, Producer, Genre, Year, Price, CD Quantity, Cassette Quantity, Sheet Music Quantity, MID, VID) .
       VALUES .
('Rock Hits', 'ACDC', 'Rocafella', 'Rock', '1989', '11.00', '7', '5 ', '1', '4', '2');

$sql = INSERT INTO Music.
       (Title, Artist, Producer, Genre, Year, Price, CD Quantity, Cassette Quantity, Sheet Music Quantity, MID, VID) .
       VALUES .
('Jazz Masterpiece', 'Jazzy J', 'Jazz Bros', 'Jazz', '1990', '1', '5 ', '15.00', '2', '5', '1');

最后,我添加了一些操作语句;

DELETE FROM Music
WHERE Title='Classic Jazz' AND Artist='Cole Train' AND Producer='Jazz inc.' AND Genre = 'Jazz' AND Year='1992' AND  Price='8.00' AND CD Quantity='5'AND Cassette Quantity= '3' AND Sheet MusicQuantity='4' AND VID='1';

UPDATE Music
SET Title='Rockhits', Artist='The Beats', Producer='RockProductions', Genre='rock', Year='1977', Price='12.25', CD Quantity='2', Cassette Quantity='5', Sheet Music Quantity='2', VID='2'
WHERE MID='3'; 

SELECT SUM(CD Quantity)
    -> FROM Music;

SELECT SUM(Cassette Quantity)
    -> FROM Music;

SELECT SUM(Sheet Music Quantity)
    -> FROM Music;

我的问题是设置看起来是正确的,还是我的行动声明有某种分离,是通过包围/标题或其他组织庄园来实现的?

1 个答案:

答案 0 :(得分:0)

在SQL中,结构位于查询中,通常使用SET而不是单个数据。

插入数据只是一个插入,后跟下一个插入,依此类推。你甚至可以使用多行插入来加快速度,

insert into test (id, name) values (1,"john"), (2,"paul"), (3,"ringo");

但每隔几百KB使用一个新插入(最大值取决于语句变量的某些最大长度)。

其他结构只是JOINWHERE s,就像你的例子一样。

你已经有了一个结构,你似乎用某种编程语言创建了SQL,这是一件好事($sql.)。

我确实有一些很好的程序,就像文本文件中的SQL语句列表一样,但是现在的用户往往想要比

更紧凑的东西。
name |   city   |  age
   john   | London|45
 Paul |  Berlin      | 107

所以你还是需要一个程序。

你有没有尝试过你的陈述,它们有效吗?

编辑:

你缺乏规范化:你很可能会有一个以上的CD类型。如果您只是插入类似" Rock"," Rock' Roll"" Rock&Roll"等字符串,您最终会得到很多类似的条目,如果你想要一些额外的属性也会遇到麻烦。所以:对于不同行或不同地方所需的一切,请使用"规范化"。这只是简单地意味着:如果"流派"是一个实体而且没有明确地以1:1的方式绑定到另一个实体,你应该给它一个表。艺术家也是如此。价格只是某种“音乐”的财产。

所以:     create table genre(id int(11)not null auto_increment,shortname varchar(32),name varchar(255))

和mydb.music只有一个genre_id